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