find indexes instead of just one (#6547)

pull/5289/head^2
Alex van Andel 2023-01-18 19:26:07 +00:00 committed by GitHub
parent f663774fee
commit 25eae4a546
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 22 additions and 5 deletions

View File

@ -118,6 +118,12 @@ function buildSlots({
return slots;
}
function fromIndex<T>(cb: (val: T, i: number, a: T[]) => boolean, index: number) {
return function (e: T, i: number, a: T[]) {
return i >= index && cb(e, i, a);
};
}
const getSlots = ({
inviteeDate,
frequency,
@ -203,14 +209,25 @@ const getSlots = ({
startTime: override.start.getUTCHours() * 60 + override.start.getUTCMinutes(),
endTime: override.end.getUTCHours() * 60 + override.end.getUTCMinutes(),
}));
// unset all working hours that relate to this user availability override
overrides.forEach((override) => {
const index = computedLocalAvailability.findIndex(
(a) => !a.userIds?.length || (override.userIds[0] && a.userIds?.includes(override.userIds[0]))
);
if (index >= 0) {
computedLocalAvailability[index] = override;
let i = -1;
const indexes: number[] = [];
while (
(i = computedLocalAvailability.findIndex(
fromIndex(
(a) => !a.userIds?.length || (!!override.userIds[0] && a.userIds?.includes(override.userIds[0])),
i + 1
)
)) != -1
) {
indexes.push(i);
}
// work backwards as splice modifies the original array.
indexes.reverse().forEach((idx) => computedLocalAvailability.splice(idx, 1));
});
// and push all overrides as new computed availability
computedLocalAvailability.push(...overrides);
}
return buildSlots({