Roostermaker: vak opdelen in subgroepen vanuit blok-bewerkpaneel
This commit is contained in:
parent
5adddb03c1
commit
d5c3778a32
1 changed files with 40 additions and 0 deletions
|
|
@ -1250,7 +1250,12 @@ function BlokBewerker({ blok, ctx, onSluit, onKlaar }) {
|
||||||
const [error, setError] = useState(null);
|
const [error, setError] = useState(null);
|
||||||
const [subs, setSubs] = useState(subgroepen);
|
const [subs, setSubs] = useState(subgroepen);
|
||||||
const [nieuweSub, setNieuweSub] = useState("");
|
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;
|
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() {
|
async function maakSubgroep() {
|
||||||
if (!nieuweSub.trim()) return;
|
if (!nieuweSub.trim()) return;
|
||||||
|
|
@ -1261,6 +1266,26 @@ function BlokBewerker({ blok, ctx, onSluit, onKlaar }) {
|
||||||
setNieuweSub("");
|
setNieuweSub("");
|
||||||
} catch (e) { setError(e.message); }
|
} 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 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 toggleKopie = (id) => setKopieDoelen((d) => d.includes(id) ? d.filter((x) => x !== id) : [...d, id]);
|
||||||
const doelPayload = () => ({
|
const doelPayload = () => ({
|
||||||
|
|
@ -1326,6 +1351,21 @@ function BlokBewerker({ blok, ctx, onSluit, onKlaar }) {
|
||||||
<button className="btn primary" onClick={opslaan}>Opslaan</button>
|
<button className="btn primary" onClick={opslaan}>Opslaan</button>
|
||||||
<button className="btn" onClick={verwijderen}>Verwijderen</button>
|
<button className="btn" onClick={verwijderen}>Verwijderen</button>
|
||||||
</div>
|
</div>
|
||||||
|
<hr className="modal-hr" />
|
||||||
|
<div className="muted small">Dit vak opdelen in subgroepen (zelfde tijd):</div>
|
||||||
|
<div className="chips">
|
||||||
|
{subs.map((s) => <button type="button" key={s.id} className={splitSubs.includes(s.id) ? "chip on" : "chip"} onClick={() => toggleSplit(s.id)}>{s.naam}</button>)}
|
||||||
|
{subs.length === 0 && <span className="muted small">Nog geen subgroepen.</span>}
|
||||||
|
</div>
|
||||||
|
<div className="form-row">
|
||||||
|
<input placeholder="Nieuwe subgroep" value={splitNieuw} onChange={(e) => setSplitNieuw(e.target.value)} onKeyDown={(e) => { if (e.key === "Enter") { e.preventDefault(); maakSplitSub(); } }} />
|
||||||
|
<button type="button" className="btn" onClick={maakSplitSub}>+ Subgroep</button>
|
||||||
|
</div>
|
||||||
|
<label className="veld"><input type="checkbox" checked={verwijderOrig} onChange={(e) => setVerwijderOrig(e.target.checked)} /> oorspronkelijke blok verwijderen na opdelen</label>
|
||||||
|
<div className="form-row">
|
||||||
|
<button className="btn primary" disabled={splitSubs.length === 0} onClick={opdelen}>Opdelen in {splitSubs.length} subgroep(en)</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
<hr className="modal-hr" />
|
<hr className="modal-hr" />
|
||||||
<div className="muted small">Kopiëren naar andere tijden/dagen:</div>
|
<div className="muted small">Kopiëren naar andere tijden/dagen:</div>
|
||||||
<div className="chips">
|
<div className="chips">
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue