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:
parent
c44ec4377f
commit
08af521d19
1 changed files with 27 additions and 8 deletions
|
|
@ -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() {
|
||||
|
|
|
|||
Loading…
Reference in a new issue