From e435ddd96121aa085a66dc2311284c095a9f706f Mon Sep 17 00:00:00 2001 From: bes-r <27369668+bes-r@users.noreply.github.com> Date: Fri, 19 Jun 2026 23:12:37 +0200 Subject: [PATCH] perioderooster: resulterende conflicten in voltooien-preview tonen --- frontend/src/pages.jsx | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/frontend/src/pages.jsx b/frontend/src/pages.jsx index d3904f2..80e26e6 100644 --- a/frontend/src/pages.jsx +++ b/frontend/src/pages.jsx @@ -2870,8 +2870,15 @@ export function PeriodeRoosterPage() { try { const live = await listResource("roosterblokken", `?schooljaar=${schooljaar}`); // sjabloon=False const keys = new Set(blokken.map(doelKey)); - const verwijderen = live.filter((b) => keys.has(doelKey(b)) && overlaptPeriode(b, van, tot)); - setPreview({ toevoegen: blokken, verwijderen, van, tot }); + const overlappend = live.filter((b) => overlaptPeriode(b, van, tot)); + const verwijderen = overlappend.filter((b) => keys.has(doelKey(b))); + const behouden = overlappend.filter((b) => !keys.has(doelKey(b))); + // Resultaat na toepassen = behouden bestaande blokken + nieuwe periodeblokken + // (met de periodedatums). Zelfde conflictcheck als het Rooster. + const nieuwe = blokken.map((b) => ({ ...b, geldig_van: van, geldig_tot: tot })); + const resultaat = [...behouden, ...nieuwe]; + const resConflict = berekenRoosterConflicten(resultaat, ctx, tijdsloten); + setPreview({ toevoegen: blokken, verwijderen, conflicten: resConflict.meldingen, van, tot }); setError(null); } catch (e) { setError(e.message); } } @@ -3020,6 +3027,14 @@ export function PeriodeRoosterPage() { > ) :
Geen overlappende bestaande blokken.
} + {preview.conflicten.length > 0 ? ( + <> +{preview.conflicten.length} conflict(en) in het rooster ná toepassen (nieuwe + behouden blokken):
+✓ geen conflicten ná toepassen
}