fix: Bestätigungsdialog und Farbvalidierung bei Flag-Verwaltung

- Ersetze native confirm() durch app.confirm.request() mit themingfähigem Dialog
- Erweitere Fehlermeldung beim Löschen mit Hinweis auf Marker-Abhängigkeiten
- Validiere Hex-Farben (#rrggbb) vor dem Speichern
- Konsistenz mit Projektmuster (events, runs, riders, times)
This commit is contained in:
Daniel Michelberger 2026-08-06 19:11:38 +02:00
parent c44ec4377f
commit 08af521d19

View file

@ -1,5 +1,6 @@
<script lang="ts">
import { getTrailFlagContext } from '$lib/stores/trailFlags.svelte'
import { app } from '$lib/stores/app.svelte'
import { Button } from '@/components/ui/button'
import { Card, CardContent } from '@/components/ui/card'
import { Badge } from '@/components/ui/badge'
@ -53,6 +54,11 @@
return
}
if (!/^#[0-9a-fA-F]{6}$/.test(form.color)) {
error = 'Bitte eine Farbe im Format #rrggbb angeben.'
return
}
try {
if (editing) await flags.edit(editing.id, { ...form } as Parameters<typeof flags.edit>[1])
else await flags.create({ ...form })
@ -62,14 +68,27 @@
}
}
async function remove(flag: TrailFlagsResponse) {
if (!confirm(`„${flag.label}" wirklich löschen?`)) return
function remove(flag: TrailFlagsResponse) {
app.confirm.request({
title: 'Flag-Typ löschen?',
text: `„${flag.label}" wird entfernt. Marker, die ihn verwenden, verhindern das Löschen.`,
yes: async () => {
try {
await flags.remove(flag.id)
app.confirm.close()
} catch (e: any) {
// Marker verweisen auf den Flag-Typ — PocketBase lehnt das Löschen ab
alert(e.message ?? 'Der Flag-Typ konnte nicht gelöscht werden. Vermutlich ist er noch in Verwendung.')
app.confirm.close()
// Die deleteRule verhindert das Löschen, solange ein Marker
// den Typ verwendet — PocketBase meldet das nur technisch.
alert(
`„${flag.label}" konnte nicht gelöscht werden. ` +
'Vermutlich verwendet ihn noch ein Marker auf einem Trail. ' +
'Entferne zuerst die betroffenen Marker oder markiere sie als erledigt.',
)
}
},
no: () => app.confirm.close(),
})
}
async function seed() {