This commit is contained in:
Sockenklaus
2021-10-14 00:47:03 +02:00
parent 46a9948643
commit e050db4155
2 changed files with 59 additions and 6302 deletions

6289
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -33,9 +33,9 @@ AddEmployeeModal(
v-for="(date, dIndex) in row.dates"
:key="dIndex"
:class="{'bg-secondary bg-opacity-10' : row.dates[dIndex] === null, 'selected' : isSelected(mIndex, rIndex, eIndex, dIndex)}"
@click.exact="select(mIndex, rIndex, eIndex, dIndex)"
@click.ctrl.exact="ctrlSelect(mIndex, rIndex, eIndex, dIndex)"
@click.shift.exact="shiftSelect(mIndex, rIndex, eIndex, dIndex)"
@click.exact="row.dates[dIndex] !== null ? select(mIndex, rIndex, eIndex, dIndex) : null"
@click.ctrl.exact="row.dates[dIndex] !== null ? ctrlSelect(mIndex, rIndex, eIndex, dIndex) : null"
@click.shift.exact="row.dates[dIndex] !== null ? shiftSelect(mIndex, rIndex, eIndex, dIndex) : null"
)
tr()
td.text-end
@@ -134,7 +134,7 @@ AddEmployeeModal(
const scheduleData : Ref<ScheduleData> = ref(getScheduleData())
const { employees } = storeToRefs(store)
const selected : Ref<Set<string>> = ref(new Set())
const selected : Ref<string[]> = ref([])
const shiftAnchor : Ref<Coordinates | undefined> = ref(undefined)
/**
* End Refs
@@ -189,10 +189,31 @@ AddEmployeeModal(
}
function isSelected(m : number, r : number, e : number, d : number) : boolean {
return selected.value.has(Coordinates.toString(m,r,e,d))
return selected.value.includes(Coordinates.toString(m,r,e,d))
}
function removeFromSelected(m : number, r : number, e : number, d : number) : boolean {
return selected.value.delete(Coordinates.toString(m,r,e,d))
if(selected.value.includes(Coordinates.toString(m,r,e,d))){
selected.value.splice(selected.value.indexOf(Coordinates.toString(m,r,e,d)),1)
return true
}
return false
}
function getRange(x : number, y : number) : number[] {
let arr : number[] = []
if(x === y) return [x]
if ( x < y){
for(x ; x <= y; x++){
arr.push(x)
}
}
else if (x > y){
for(x ; x >= y; x--){
arr.push(x)
}
}
return arr
}
/**
@@ -206,13 +227,13 @@ AddEmployeeModal(
}
function select(m : number, r : number, e : number, d : number) : void {
if(selected.value.size > 1 || !isSelected(m,r,e,d)) {
selected.value.clear()
selected.value.add(Coordinates.toString(m,r,e,d))
if(selected.value.length > 1 || !isSelected(m,r,e,d)) {
selected.value = []
selected.value.push(Coordinates.toString(m,r,e,d))
shiftAnchor.value = new Coordinates(m,r,e,d)
}
else {
selected.value.clear()
selected.value = []
shiftAnchor.value = undefined
}
}
@@ -223,26 +244,29 @@ AddEmployeeModal(
shiftAnchor.value = new Coordinates(m,r,e,d)
}
else {
selected.value.add(Coordinates.toString(m,r,e,d))
selected.value.push(Coordinates.toString(m,r,e,d))
shiftAnchor.value = new Coordinates(m,r,e,d)
}
}
function shiftSelect(m : number, r : number, e : number, d : number) : void {
if(shiftAnchor.value !== undefined &&
shiftAnchor.value.mIndex === m &&
shiftAnchor.value.rIndex === r &&
shiftAnchor.value.toString() === [...selected.value].pop()
){
// TODO: #8 Figure out how to select all cells between anchor and click
let [eBig, eSmall] : number[] = shiftAnchor.value.eIndex > e ? [shiftAnchor.value.eIndex, e] : [e, shiftAnchor.value.eIndex]
let [dBig, dSmall] : number[] = shiftAnchor.value.dIndex > d ? [shiftAnchor.value.dIndex, d] : [d, shiftAnchor.value.dIndex]
for(let eIt = eSmall; eIt <= eBig; eIt++){
for(let dIt = dSmall; dIt <= dBig; dIt++){
selected.value.add(Coordinates.toString(m,r,eIt,dIt))
}
if(shiftAnchor.value !== undefined && shiftAnchor.value.mIndex === m && shiftAnchor.value.rIndex === r){
if(shiftAnchor.value.toString() !== selected.value[selected.value.length - 1] && selected.value.includes(shiftAnchor.value.toString())){
selected.value.splice(selected.value.indexOf(shiftAnchor.value.toString()))
}
let rangeE : number[] = getRange(shiftAnchor.value.eIndex, e)
let rangeD : number[] = getRange(shiftAnchor.value.dIndex, d)
let anchor = shiftAnchor.value
removeFromSelected(anchor.mIndex, anchor.rIndex, anchor.eIndex, anchor.dIndex)
rangeE.forEach(te => {
rangeD.forEach(td => {
selected.value.push(Coordinates.toString(m,r,te,td))
})
})
}
}