All checks were successful
Container-Image bauen und veröffentlichen / build-and-push (push) Successful in 2m3s
Sortierung: Erklaerungen erscheinen im Admin wie im oeffentlichen
Bereich alphabetisch nach Titel. Bewusst in JavaScript statt ueber die
Datenbank - SQLite vergleicht binaer, dort landeten "Aenderungs-
mitteilung" und "Uebernahme" hinter "Zaehlerstandsablesung". Intl mit
deutscher Kollation sortiert Ae bei A. Gemeinsame Regel in
lib/policy-sort.ts, benutzt von der Server-Komponente, der API und der
Admin-Tabelle; die Spaltenkoepfe bleiben umschaltbar.
Overlay: @radix-ui/react-select verlangte react-dismissable-layer
1.1.11, alle anderen Radix-Pakete 1.1.19. Dieses Paket setzt und
entfernt pointer-events auf dem body und fuehrt dazu eine Liste offener
Layer im Modulzustand - bei zwei Kopien zwei getrennte Listen. Ein
Select im Dialog liess deshalb beim Schliessen das Overlay des Dialogs
verschwinden und pointer-events: none stehen. Die Seite war danach bis
zum Neuladen tot.
Belegt im Browser mit einer Wegwerfseite (Select im Dialog):
zwei Versionen -> Dialog nach Select-Schliessen nicht mehr bedienbar,
body pointer-events bleibt "none"
eine Version -> body wieder leer, Seite klickbar
react-select, -label, -slot und -tabs auf aktuelle Versionen gehoben;
damit liegt jedes Radix-Kernpaket nur noch einmal im Baum.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
20 lines
721 B
TypeScript
20 lines
721 B
TypeScript
/**
|
|
* Einheitliche Sortierung der Erklärungen nach Titel.
|
|
*
|
|
* Bewusst nicht über die Datenbank: SQLite vergleicht Zeichenketten binär,
|
|
* dort landete „Änderungsmitteilung“ hinter „Zählerstandsablesung“. Intl
|
|
* sortiert nach deutschen Regeln, Ä also bei A.
|
|
*
|
|
* `numeric` sorgt außerdem für „Nr. 2“ vor „Nr. 10“.
|
|
*/
|
|
const collator = new Intl.Collator("de", { numeric: true })
|
|
|
|
export function compareByTitle(a: { title: string }, b: { title: string }) {
|
|
return collator.compare(a.title, b.title)
|
|
}
|
|
|
|
/** Gibt eine nach Titel aufsteigend sortierte Kopie zurück. */
|
|
export function sortByTitle<T extends { title: string }>(policies: T[]): T[] {
|
|
return [...policies].sort(compareByTitle)
|
|
}
|