Bestückungs-Pflege: Fach-Sidebar + Verwaltung linksbündig statt zentriert
ObjektPositionenPanel: Fach-Sidebar (Vorlagen-Feature "feste Fächer-Liste") links, damit die Bestückung übersichtlich bleibt und auch Dritte (Vertretung ohne die Kontrollperson) sehen, wo welches Material im Rucksack hingehört. Gruppierungslogik aus KontrollPage in gemeinsames Util (utils/fachGruppierung) ausgelagert, da jetzt zweimal gebraucht. .page-wide: margin:0 statt zentriert (Nutzer-Vorgabe: bei 1200px sonst viel verschenkter Platz links/rechts auf breiten Monitoren). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
export const OHNE_FACH = "Ohne Fach";
|
||||
|
||||
/**
|
||||
* Gruppierung nach Fach (Vorlagen-Feature "feste Fächer-Liste je Objekttyp"):
|
||||
* Reihenfolge folgt dem ersten Auftreten in der Eingabeliste (die wiederum
|
||||
* die Vorlagen-Reihenfolge widerspiegelt), "Ohne Fach" immer zuletzt - bleibt
|
||||
* damit nah am Regal-/Fahrzeug-Layout statt alphabetisch zu springen.
|
||||
* Geteilt zwischen Kontroll-Erfassung (KontrollPage) und Bestückungs-Pflege
|
||||
* (ObjektPositionenPanel) - gleiche Gruppierungslogik, unterschiedliche
|
||||
* Eintragstypen.
|
||||
*/
|
||||
export function gruppiereNachFach<T>(eintraege: T[], fachVon: (eintrag: T) => string | null): [string, T[]][] {
|
||||
const gruppen = new Map<string, T[]>();
|
||||
for (const eintrag of eintraege) {
|
||||
const fach = fachVon(eintrag) ?? OHNE_FACH;
|
||||
const liste = gruppen.get(fach);
|
||||
if (liste) {
|
||||
liste.push(eintrag);
|
||||
} else {
|
||||
gruppen.set(fach, [eintrag]);
|
||||
}
|
||||
}
|
||||
const gruppenListe = [...gruppen.entries()];
|
||||
gruppenListe.sort(([a], [b]) => {
|
||||
if (a === OHNE_FACH) return 1;
|
||||
if (b === OHNE_FACH) return -1;
|
||||
return 0;
|
||||
});
|
||||
return gruppenListe;
|
||||
}
|
||||
Reference in New Issue
Block a user