diff --git a/frontend/src/pages.jsx b/frontend/src/pages.jsx index 575dee5..a62b008 100644 --- a/frontend/src/pages.jsx +++ b/frontend/src/pages.jsx @@ -1250,7 +1250,12 @@ function BlokBewerker({ blok, ctx, onSluit, onKlaar }) { const [error, setError] = useState(null); const [subs, setSubs] = useState(subgroepen); const [nieuweSub, setNieuweSub] = useState(""); + const [splitSubs, setSplitSubs] = useState([]); + const [splitNieuw, setSplitNieuw] = useState(""); + const [verwijderOrig, setVerwijderOrig] = useState(true); const doelOpties = f.doel_type === "groep" ? groepen : f.doel_type === "subgroep" ? subs : leerlingen; + // Groep waaronder nieuwe split-subgroepen vallen: de groep van het blok zelf. + const splitGroep = blok.groep || null; async function maakSubgroep() { if (!nieuweSub.trim()) return; @@ -1261,6 +1266,26 @@ function BlokBewerker({ blok, ctx, onSluit, onKlaar }) { setNieuweSub(""); } catch (e) { setError(e.message); } } + const toggleSplit = (id) => setSplitSubs((d) => d.includes(id) ? d.filter((x) => x !== id) : [...d, id]); + async function maakSplitSub() { + if (!splitNieuw.trim()) return; + try { + const s = await createResource("subgroepen", { naam: splitNieuw.trim(), groep: splitGroep }); + setSubs([...subs, s]); + setSplitSubs([...splitSubs, s.id]); + setSplitNieuw(""); + } catch (e) { setError(e.message); } + } + async function opdelen() { + if (splitSubs.length === 0) return; + try { + for (const sid of splitSubs) { + await createResource("roosterblokken", { schooljaar: blok.schooljaar, tijdslot: blok.tijdslot, activiteit: f.activiteit, locatie: f.locatie || null, subgroep: sid, begeleiders: f.begeleiders, opmerkingen: f.opmerkingen }); + } + if (verwijderOrig) await deleteResource("roosterblokken", blok.id); + await onKlaar(); + } catch (e) { setError(e.message); } + } const toggleBeg = (id) => setF((s) => s.begeleiders.includes(id) ? { ...s, begeleiders: s.begeleiders.filter((x) => x !== id) } : { ...s, begeleiders: [...s.begeleiders, id] }); const toggleKopie = (id) => setKopieDoelen((d) => d.includes(id) ? d.filter((x) => x !== id) : [...d, id]); const doelPayload = () => ({ @@ -1326,6 +1351,21 @@ function BlokBewerker({ blok, ctx, onSluit, onKlaar }) { +