-
Begeleiders:
-
- {medewerkers.map((m) => )}
-
+
+ {medewerkers.map((m) => )}
-
setF({ ...f, opmerkingen: e.target.value })} />
-
-
-
-
-
-
Groep → subgroep: deel dit vak op onder {splitGroepNaam} (zelfde tijd):
-
+
+
+
+
+
+
+
+
+ Splitsen onder {splitGroepNaam}
+
{splitOpties.map((s) => )}
{splitOpties.length === 0 && Nog geen subgroepen onder deze groep.}
-
+ {splitSubs.length > 0 && (
+
+
{splitGroepNaam}
+
+ {splitSubs.map((sid) => {
+ const sub = splitOpties.find((s) => s.id === sid) || subs.find((s) => s.id === sid);
+ return {sub ? sub.naam : "Subgroep"};
+ })}
+
+
+ )}
+
setSplitNieuw(e.target.value)} onKeyDown={(e) => { if (e.key === "Enter") { e.preventDefault(); maakSplitSub(); } }} />
-
-
-
-
-
+
+
+
+
-
-
Kopiëren naar andere tijden/dagen:
-
+
+ Kopiëren
+
{tijdsloten.map((t) => )}
-
-
-
-
+
+
);
}
@@ -1706,21 +1719,33 @@ export function RoosterScherm({ mode }) {
// Op id vergelijken, niet op naam: twee personen kunnen dezelfde naam hebben.
const persoonAfwezig = (id, iso) => afwezig.some((a) => a.persoon === id && a.start_datum <= iso && a.eind_datum >= iso);
const rolAfk = (id) => { const m = medewerkers.find((x) => x.id === id); return m ? (ROL_AFK[m.rol] || "") : ""; };
+ const editorCtx = { activiteiten, locaties, groepen, subgroepen, leerlingen, medewerkers, tijdsloten };
+ const isOpenBlok = (b) => edit && bewerkBlok && bewerkBlok.id === b.id;
+ const toggleOpenBlok = (b) => setBewerkBlok((huidig) => (huidig && huidig.id === b.id ? null : b));
+ const inlineBewerker = (b) => isOpenBlok(b) && (
+ setBewerkBlok(null)}
+ onKlaar={async () => { setBewerkBlok(null); await laadBlokken(); }}
+ />
+ );
function renderRoosterBlok(b, iso, kal) {
const uit = uitzOp(b.id, iso);
const vervallen = !!kal || (uit && uit.vervalt);
return (
setBewerkBlok(b) : undefined}
+ onClick={edit ? () => toggleOpenBlok(b) : undefined}
title={edit ? "Klik om te bewerken" : undefined}
>
{edit && startDrag(e, b)} onClick={(e) => e.stopPropagation()} title="Sleep naar ander tijdslot">⠿}
{b.activiteit_naam}
- {edit && }
+ {edit && }
+ {edit && }
Doel: {b.doel_naam} ({b.doel_type})
{b.locatie_naam &&
Locatie: {b.locatie_naam}
}
@@ -1730,11 +1755,38 @@ export function RoosterScherm({ mode }) {
))}
)}
{kal && Vervalt - {kal.type_label}
}
- {!kal && uit && uit.vervalt && Vervalt {uit.opmerking ? `(${uit.opmerking})` : ""}{edit && <> · >}
}
+ {!kal && uit && uit.vervalt && Vervalt {uit.opmerking ? `(${uit.opmerking})` : ""}{edit && }
}
{!kal && uit && !uit.vervalt && uit.vervanger_naam && Vervanger: {uit.vervanger_naam}
}
{edit && !kal && !uit && (
-
+
)}
+ {inlineBewerker(b)}
+
+ );
+ }
+ function renderCompactBlok(b, iso, kal) {
+ const uit = uitzOp(b.id, iso);
+ const vervallen = !!kal || (uit && uit.vervalt);
+ return (
+
toggleOpenBlok(b) : undefined}
+ title={edit ? "Klik om te bewerken" : undefined}
+ >
+
+ {edit && startDrag(e, b)} onClick={(e) => e.stopPropagation()} title="Sleep naar ander tijdslot">⠿}
+ {b.activiteit_naam}
+ {edit && }
+ {edit && }
+
+
+ {b.locatie_naam && {b.locatie_naam}}
+ {b.begeleiders_namen.length > 0 && {b.begeleiders_namen.map((x) => x.naam).join(", ")}}
+ {vervallen && Vervalt}
+
+ {inlineBewerker(b)}
);
}
@@ -1750,16 +1802,24 @@ export function RoosterScherm({ mode }) {
const out = losse.map((b) => renderRoosterBlok(b, iso, kal));
if (scopeType === "leerplein" && scopeId && perGroep.size > 0) {
const leerplein = leerpleinen.find((l) => l.id === Number(scopeId));
+ const kolommen = [...perGroep.entries()];
out.push(
-
{leerplein ? leerplein.naam : "Leerplein"}
+
+
⤴
+
+ {leerplein ? leerplein.naam : "Leerplein"}
+ Leerplein → groepen
+
+
{kolommen.length}
+
- {[...perGroep.entries()].map(([gid, groepBlokken]) => {
+ {kolommen.map(([gid, groepBlokken]) => {
const groep = groepen.find((g) => g.id === gid);
return (
{groep ? groep.naam : "Groep"}
- {groepBlokken.map((b) => renderRoosterBlok(b, iso, kal))}
+ {groepBlokken.map((b) => renderCompactBlok(b, iso, kal))}
);
})}
@@ -1777,14 +1837,22 @@ export function RoosterScherm({ mode }) {
const groep = groepen.find((g) => g.id === gid);
const heleGroep = groepBlokken.filter((b) => b.groep === gid);
const subIds = [...new Set(groepBlokken.filter((b) => b.subgroep).map((b) => b.subgroep))];
+ const kolomAantal = subIds.length + (heleGroep.length > 0 ? 1 : 0);
out.push(
-
{groep ? groep.naam : "Groep"}
+
+
⤴
+
+ {groep ? groep.naam : "Groep"}
+ Groep → subgroepen
+
+
{kolomAantal}
+
{heleGroep.length > 0 && (
Hele groep
- {heleGroep.map((b) => renderRoosterBlok(b, iso, kal))}
+ {heleGroep.map((b) => renderCompactBlok(b, iso, kal))}
)}
{subIds.map((sid) => {
@@ -1793,7 +1861,7 @@ export function RoosterScherm({ mode }) {
return (
{sub ? sub.naam : "Subgroep"}
- {blocks.map((b) => renderRoosterBlok(b, iso, kal))}
+ {blocks.map((b) => renderCompactBlok(b, iso, kal))}
);
})}
@@ -1829,9 +1897,9 @@ export function RoosterScherm({ mode }) {
week van {fmtDM(maandag)}
)}
- {edit && schooljaar && tab === "week" &&
}
+ {edit && schooljaar && tab === "week" &&
}
{printAan && schooljaar && (edit ? tab === "week" : true) && (
-
+
)}
@@ -1853,16 +1921,31 @@ export function RoosterScherm({ mode }) {
)}
{scopeType !== "alles" && scopeId &&
{zichtbareBlokken.length} blok(ken)}
+ {edit && groepen.length > 0 && (
+
+
+ {groepen.map((g) => (
+
+ ))}
+
+ )}
)}
{edit && (
-
-
-
-
-
+
+
+
+
+
)}
{edit && tab === "week" && (
@@ -1923,8 +2006,8 @@ export function RoosterScherm({ mode }) {
{d.label}
{fmtDM(datum)}
{kal &&
{kal.type_label}{kal.omschrijving ? `: ${kal.omschrijving}` : ""}
}
{edit && (kal
- ?
- :
+ ?
+ :
)}
{slots.length === 0 &&
—
}
@@ -1979,15 +2062,6 @@ export function RoosterScherm({ mode }) {
)}
- {edit && bewerkBlok && (
-