Welche Vorlagen auf der Geraeteseite als Kachel erscheinen, stand nur im Seed. Wer eine eigene Vorlage dort haben wollte, kam nicht heran; wer eine mitgelieferte loswerden wollte, auch nicht. Neue Seite Verwaltung -> Schnellstart: je Geraetetyp eine Liste, Reihenfolge ueber Hoch und Runter. Kein Drag & Drop -- der Editor braucht dnd-kit fuer hundert Schritte, hier sind es zwei bis vier Kacheln, und zwei Knoepfe sind am Handy verlaesslicher als eine Ziehgeste neben einer scrollenden Seite. Gespeichert wird die ganze Liste; position kommt aus ihrer Reihenfolge, damit es nur eine Wahrheit darueber gibt. Zur Auswahl stehen nur veroeffentlichte, nicht archivierte Vorlagen. Einstellung.schnellstartGepflegt haelt den Seed heraus, sobald jemand gespeichert hat -- auch bei unveraenderter Liste. Eine fehlende Zeile sagt nicht, ob sie noch nie da war oder bewusst entfernt wurde. Das Durchklicken des gebauten Stands fand einen Fehler, den die Suite nicht gesehen haette: die Umsortierung wurde nicht gespeichert. Altdaten tragen mehrere Zeilen auf position 0, und bei gleicher Position ist die Reihenfolge in Postgres nicht festgelegt -- Lesemodell und Dienst gaben sie unterschiedlich zurueck, und der Vergleich hielt die Umsortierung fuer einen Leerlauf. Behoben durch einen eindeutigen Tiebreak in beiden Abfragen, mit Regressionstest. Closes #34
52 lines
2.0 KiB
TypeScript
52 lines
2.0 KiB
TypeScript
import { Rocket } from "lucide-react";
|
||
import { SchnellstartPflege } from "@/components/schnellstart-pflege";
|
||
import { sitzungErforderlich } from "@/server/auth/sitzungspflicht";
|
||
import { schnellstartPflege } from "@/server/queries/schnellstart";
|
||
|
||
/**
|
||
* Schnellstart je Gerätetyp (#022).
|
||
*
|
||
* Welche Vorlagen auf der Geräteseite als Kachel erscheinen, stand bisher nur im
|
||
* Seed. Wer eine eigene Vorlage dort haben wollte, kam nicht heran.
|
||
*
|
||
* `verwaltung`, wie bei den Abteilungen: die Zuordnung gilt global und bestimmt,
|
||
* was jeder Techniker an jedem Gerät als erstes sieht.
|
||
*/
|
||
|
||
export default async function SchnellstartSeite() {
|
||
// Jede Seite prüft selbst – das Admin-Layout darüber ist das zweite Netz,
|
||
// nicht das erste (siehe CLAUDE.md).
|
||
await sitzungErforderlich("verwaltung", "/admin/schnellstart");
|
||
const { typen, auswahl } = await schnellstartPflege();
|
||
|
||
return (
|
||
<>
|
||
<h1 className="flex items-center gap-2 text-2xl font-bold">
|
||
<Rocket className="size-6 text-nebentext" strokeWidth={1.75} aria-hidden="true" />
|
||
Schnellstart
|
||
</h1>
|
||
<p className="mt-2 max-w-prose text-nebentext">
|
||
Auf der Seite eines Geräts stehen oben die Vorlagen, die dort am häufigsten gebraucht werden — ein
|
||
Klick, und der Lauf steht. Hier wird festgelegt, welche das je Gerätetyp sind und in welcher
|
||
Reihenfolge sie erscheinen.
|
||
</p>
|
||
<p className="mt-2 max-w-prose text-sm text-nebentext">
|
||
Zur Auswahl stehen nur veröffentlichte, nicht archivierte Vorlagen. Wird eine Vorlage später
|
||
archiviert, verschwindet sie von selbst aus dem Schnellstart — niemand muss hier aufräumen. Eine
|
||
Vorlage, die nur für einen Kunden gilt, erscheint auch nur bei dessen Geräten.
|
||
</p>
|
||
|
||
<div className="mt-6 flex flex-col gap-4">
|
||
{typen.map((eintrag) => (
|
||
<SchnellstartPflege
|
||
key={eintrag.typ}
|
||
typ={eintrag.typ}
|
||
zugewiesen={eintrag.zugewiesen}
|
||
auswahl={auswahl}
|
||
/>
|
||
))}
|
||
</div>
|
||
</>
|
||
);
|
||
}
|