diff --git a/web/app/(app)/admin/vorlagen/actions.ts b/web/app/(app)/admin/vorlagen/actions.ts index c3c43c8..6197d1b 100644 --- a/web/app/(app)/admin/vorlagen/actions.ts +++ b/web/app/(app)/admin/vorlagen/actions.ts @@ -67,7 +67,7 @@ export async function saveTemplate(input: unknown): Promise { await writeAudit(tx, { actorId: user.id, - action: 'roles.update', + action: 'template.update', targetType: 'DocumentTemplate', targetId: `${key}:${version}`, clearanceAtTime: user.permissions.clearanceLevel, diff --git a/web/components/StampMark.tsx b/web/components/StampMark.tsx index 185f34b..b9d99ae 100644 --- a/web/components/StampMark.tsx +++ b/web/components/StampMark.tsx @@ -11,6 +11,32 @@ export function stampColor(level: number): string { return STAMP_COLOR[level] ?? STAMP_COLOR[0]! } +/** + * Die Farbmarken, die aus der Datenbank kommen duerfen. + * + * `ClearanceLevelConfig.colorToken` und `PersonnelStatusTag.colorToken` sind + * Daten und im Adminbereich pflegbar. Sie landen als Name einer CSS-Variablen + * in einem `style`-Attribut, und was aus der Datenbank in ein Stilattribut + * geht, wird geprueft — nicht weil es heute jemand setzen koennte, sondern + * weil es morgen jemand koennen soll. Ein unbekannter Wert faellt auf die + * neutrale Marke zurueck, statt eine Variable zu erfinden, die es nicht gibt. + */ +export const COLOR_TOKENS = [ + 'stamp-0', + 'stamp-1', + 'stamp-2', + 'stamp-3', + 'stamp-4', + 'stamp-5', +] as const + +export type ColorToken = (typeof COLOR_TOKENS)[number] + +export function colorVariable(token: string | null | undefined): string { + const erlaubt = (COLOR_TOKENS as readonly string[]).includes(token ?? '') + return `var(--color-${erlaubt ? token : 'stamp-0'})` +} + /** * Stempelmarke oben rechts am Objekt. Der Stempelcharakter kommt aus dem * schmalen Schnitt, der Rahmenlinie und der Farbe, nicht aus Grossbuchstaben. diff --git a/web/components/StatusTags.tsx b/web/components/StatusTags.tsx index 205b710..e0ca1ce 100644 --- a/web/components/StatusTags.tsx +++ b/web/components/StatusTags.tsx @@ -1,3 +1,5 @@ +import { colorVariable } from '@/components/StampMark' + /** * Status einer Person als Etiketten. * @@ -20,7 +22,7 @@ export function StatusTags({