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"
|
v-for="(date, dIndex) in row.dates"
|
||||||
:key="dIndex"
|
:key="dIndex"
|
||||||
:class="{'bg-secondary bg-opacity-10' : row.dates[dIndex] === null, 'selected' : isSelected(mIndex, rIndex, eIndex, 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.exact="row.dates[dIndex] !== null ? select(mIndex, rIndex, eIndex, dIndex) : null"
|
||||||
@click.ctrl.exact="ctrlSelect(mIndex, rIndex, eIndex, dIndex)"
|
@click.ctrl.exact="row.dates[dIndex] !== null ? ctrlSelect(mIndex, rIndex, eIndex, dIndex) : null"
|
||||||
@click.shift.exact="shiftSelect(mIndex, rIndex, eIndex, dIndex)"
|
@click.shift.exact="row.dates[dIndex] !== null ? shiftSelect(mIndex, rIndex, eIndex, dIndex) : null"
|
||||||
)
|
)
|
||||||
tr()
|
tr()
|
||||||
td.text-end
|
td.text-end
|
||||||
@@ -134,7 +134,7 @@ AddEmployeeModal(
|
|||||||
const scheduleData : Ref<ScheduleData> = ref(getScheduleData())
|
const scheduleData : Ref<ScheduleData> = ref(getScheduleData())
|
||||||
const { employees } = storeToRefs(store)
|
const { employees } = storeToRefs(store)
|
||||||
|
|
||||||
const selected : Ref<Set<string>> = ref(new Set())
|
const selected : Ref<string[]> = ref([])
|
||||||
const shiftAnchor : Ref<Coordinates | undefined> = ref(undefined)
|
const shiftAnchor : Ref<Coordinates | undefined> = ref(undefined)
|
||||||
/**
|
/**
|
||||||
* End Refs
|
* End Refs
|
||||||
@@ -189,10 +189,31 @@ AddEmployeeModal(
|
|||||||
}
|
}
|
||||||
|
|
||||||
function isSelected(m : number, r : number, e : number, d : number) : boolean {
|
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 {
|
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 {
|
function select(m : number, r : number, e : number, d : number) : void {
|
||||||
if(selected.value.size > 1 || !isSelected(m,r,e,d)) {
|
if(selected.value.length > 1 || !isSelected(m,r,e,d)) {
|
||||||
selected.value.clear()
|
selected.value = []
|
||||||
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)
|
shiftAnchor.value = new Coordinates(m,r,e,d)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
selected.value.clear()
|
selected.value = []
|
||||||
shiftAnchor.value = undefined
|
shiftAnchor.value = undefined
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -223,26 +244,29 @@ AddEmployeeModal(
|
|||||||
shiftAnchor.value = new Coordinates(m,r,e,d)
|
shiftAnchor.value = new Coordinates(m,r,e,d)
|
||||||
}
|
}
|
||||||
else {
|
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)
|
shiftAnchor.value = new Coordinates(m,r,e,d)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function shiftSelect(m : number, r : number, e : number, d : number) : void {
|
function shiftSelect(m : number, r : number, e : number, d : number) : void {
|
||||||
if(shiftAnchor.value !== undefined &&
|
if(shiftAnchor.value !== undefined && shiftAnchor.value.mIndex === m && shiftAnchor.value.rIndex === r){
|
||||||
shiftAnchor.value.mIndex === m &&
|
|
||||||
shiftAnchor.value.rIndex === r &&
|
if(shiftAnchor.value.toString() !== selected.value[selected.value.length - 1] && selected.value.includes(shiftAnchor.value.toString())){
|
||||||
shiftAnchor.value.toString() === [...selected.value].pop()
|
selected.value.splice(selected.value.indexOf(shiftAnchor.value.toString()))
|
||||||
){
|
|
||||||
// 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))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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