fix: add split-lunch detection with formatted time range warnings
CI / Env docs check (push) Successful in 29s
CI / Frontend deps check (push) Failing after 27s
CI / Knip (push) Has been skipped
CI / Frontend a11y check (push) Has been skipped
CI / Docker compose check (push) Successful in 20s
CI / Nginx config check (push) Successful in 43s
CI / Frontend major deps (push) Failing after 52s
CI / Go build (push) Successful in 1m5s
CI / Secrets scan (push) Successful in 1m8s
CI / Frontend build (push) Successful in 53s
CI / Svelte strict check (push) Has been skipped
CI / Frontend QC (audit) (push) Has been skipped
CI / Frontend QC (typecheck) (push) Has been skipped
CI / Frontend QC (lint) (push) Has been skipped
CI / go mod tidy (push) Successful in 1m17s
CI / Go vet (dev) (push) Successful in 1m47s
CI / Go vet (prod) (push) Successful in 2m2s
CI / Go vulnerabilities (push) Successful in 1m24s
CI / Staticcheck (prod) (push) Successful in 2m54s
CI / Staticcheck (dev) (push) Successful in 3m4s
CI / golangci-lint (push) Successful in 3m24s
CI / Security scan (prod) (push) Successful in 4m29s
CI / Security scan (dev) (push) Successful in 4m29s
CI / Tests (prod) (push) Has been cancelled
CI / Tests (dev) (push) Has been cancelled
CI / Race (prod) (push) Has been cancelled
CI / Race (dev) (push) Has been cancelled

This commit is contained in:
2026-07-10 21:16:59 +01:00
parent 7c8fd94fcb
commit 7833e87aab
+25
View File
@@ -212,6 +212,21 @@ export function getLunchProtectionForSlots(
if (isAdmin) {
if (gapWith < 30) {
const gapWasBelow30 = gapsWith.length > 1;
if (gapWasBelow30) {
const gapsWithout = findAllLunchGaps(windowStart, windowEnd, existingBookings);
const gapWithout = gapsWithout[0] ?? 0;
if (gapWithout >= 30 && gapWith < gapWithout) {
const firstGap = gapsWith[0] ?? 0;
const secondGap = gapsWith[1] ?? 0;
results.set(slotStartStr, {
isBlocked: false,
showWarning: true,
warningMessage: `This booking (${slotStartStr}${slotEndStr}) would split your suggested lunch break into ${firstGap} and ${secondGap} minute blocks.`
});
continue;
}
}
results.set(slotStartStr, {
isBlocked: true,
showWarning: false,
@@ -221,6 +236,15 @@ export function getLunchProtectionForSlots(
const gapsWithout = findAllLunchGaps(windowStart, windowEnd, existingBookings);
const gapWithout = gapsWithout[0] ?? 0;
if (gapWith < gapWithout) {
if (gapsWith.length > 1) {
const firstGap = gapsWith[0] ?? 0;
const secondGap = gapsWith[1] ?? 0;
results.set(slotStartStr, {
isBlocked: false,
showWarning: true,
warningMessage: `This booking (${slotStartStr}${slotEndStr}) would split your suggested lunch break into ${firstGap} and ${secondGap} minute blocks.`
});
} else {
results.set(slotStartStr, {
isBlocked: false,
showWarning: true,
@@ -228,6 +252,7 @@ export function getLunchProtectionForSlots(
});
}
}
}
} else {
if (gapWith < 60) {
const gapsWithout = findAllLunchGaps(windowStart, windowEnd, existingBookings);