6289
package-lock.json
generated
6289
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -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]
|
||||
if(shiftAnchor.value !== undefined && shiftAnchor.value.mIndex === m && shiftAnchor.value.rIndex === r){
|
||||
|
||||
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.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))
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user