feat: Trail-Stores registrieren und Navigationseintrag ergänzen
Die vier Trail-Stores (trails, trailVersions, trailFlags, trailMarkers) werden im Dashboard-Layout per Context bereitgestellt, laden ihre Daten beim Mount, abonnieren Realtime-Updates und werden beim Unmount wieder aufgeräumt. Zusätzlich ergänzt ein Navigationseintrag „Trails" mit dem Route-Icon aus lucide-svelte.
This commit is contained in:
parent
f432b47df1
commit
616694a7f5
1 changed files with 22 additions and 2 deletions
|
|
@ -7,11 +7,15 @@
|
||||||
import { setRunContext } from '$lib/stores/runs.svelte'
|
import { setRunContext } from '$lib/stores/runs.svelte'
|
||||||
import { setRiderContext } from '$lib/stores/riders.svelte'
|
import { setRiderContext } from '$lib/stores/riders.svelte'
|
||||||
import { setTimeContext } from '$lib/stores/times.svelte'
|
import { setTimeContext } from '$lib/stores/times.svelte'
|
||||||
|
import { setTrailContext } from '$lib/stores/trails.svelte'
|
||||||
|
import { setTrailVersionContext } from '$lib/stores/trailVersions.svelte'
|
||||||
|
import { setTrailFlagContext } from '$lib/stores/trailFlags.svelte'
|
||||||
|
import { setTrailMarkerContext } from '$lib/stores/trailMarkers.svelte'
|
||||||
import { Button } from '@/components/ui/button'
|
import { Button } from '@/components/ui/button'
|
||||||
import { Separator } from '@/components/ui/separator'
|
import { Separator } from '@/components/ui/separator'
|
||||||
import Logo from '$lib/components/Logo.svelte'
|
import Logo from '$lib/components/Logo.svelte'
|
||||||
import TeamSwitcher from '$lib/components/TeamSwitcher.svelte'
|
import TeamSwitcher from '$lib/components/TeamSwitcher.svelte'
|
||||||
import { Home, Calendar, Flag, Timer, LogOut, Menu, X, Moon, Sun } from 'lucide-svelte'
|
import { Home, Calendar, Flag, Timer, LogOut, Menu, X, Moon, Sun, Route } from 'lucide-svelte'
|
||||||
import { toggleMode, mode } from 'mode-watcher'
|
import { toggleMode, mode } from 'mode-watcher'
|
||||||
import { onDestroy, onMount } from 'svelte'
|
import { onDestroy, onMount } from 'svelte'
|
||||||
|
|
||||||
|
|
@ -24,6 +28,10 @@
|
||||||
const runs = setRunContext()
|
const runs = setRunContext()
|
||||||
const riders = setRiderContext()
|
const riders = setRiderContext()
|
||||||
const times = setTimeContext()
|
const times = setTimeContext()
|
||||||
|
const trails = setTrailContext()
|
||||||
|
const trailVersions = setTrailVersionContext()
|
||||||
|
const trailFlags = setTrailFlagContext()
|
||||||
|
const trailMarkers = setTrailMarkerContext()
|
||||||
|
|
||||||
let isMobileMenuOpen = $state(false)
|
let isMobileMenuOpen = $state(false)
|
||||||
|
|
||||||
|
|
@ -35,11 +43,18 @@
|
||||||
// Teams zuerst laden, weil die anderen Stores nach team filtern
|
// Teams zuerst laden, weil die anderen Stores nach team filtern
|
||||||
await teams.load()
|
await teams.load()
|
||||||
teams.subscribe()
|
teams.subscribe()
|
||||||
await Promise.all([events.load(), runs.load(), riders.load(), times.load()])
|
await Promise.all([
|
||||||
|
events.load(), runs.load(), riders.load(), times.load(),
|
||||||
|
trails.load(), trailVersions.load(), trailFlags.load(), trailMarkers.load(),
|
||||||
|
])
|
||||||
events.subscribe()
|
events.subscribe()
|
||||||
runs.subscribe()
|
runs.subscribe()
|
||||||
riders.subscribe()
|
riders.subscribe()
|
||||||
times.subscribe()
|
times.subscribe()
|
||||||
|
trails.subscribe()
|
||||||
|
trailVersions.subscribe()
|
||||||
|
trailFlags.subscribe()
|
||||||
|
trailMarkers.subscribe()
|
||||||
})
|
})
|
||||||
|
|
||||||
onDestroy(() => {
|
onDestroy(() => {
|
||||||
|
|
@ -48,6 +63,10 @@
|
||||||
runs.destroy()
|
runs.destroy()
|
||||||
riders.destroy()
|
riders.destroy()
|
||||||
times.destroy()
|
times.destroy()
|
||||||
|
trails.destroy()
|
||||||
|
trailVersions.destroy()
|
||||||
|
trailFlags.destroy()
|
||||||
|
trailMarkers.destroy()
|
||||||
})
|
})
|
||||||
|
|
||||||
function handleLogout() {
|
function handleLogout() {
|
||||||
|
|
@ -66,6 +85,7 @@
|
||||||
const nav = [
|
const nav = [
|
||||||
{ href: '/dashboard', icon: Home, label: 'Dashboard' },
|
{ href: '/dashboard', icon: Home, label: 'Dashboard' },
|
||||||
{ href: '/dashboard/events', icon: Calendar, label: 'Events' },
|
{ href: '/dashboard/events', icon: Calendar, label: 'Events' },
|
||||||
|
{ href: '/dashboard/trails', icon: Route, label: 'Trails' },
|
||||||
{ href: '/dashboard/timing', icon: Timer, label: 'Zeitnahme' },
|
{ href: '/dashboard/timing', icon: Timer, label: 'Zeitnahme' },
|
||||||
{ href: '/dashboard/results', icon: Flag, label: 'Ergebnisse' },
|
{ href: '/dashboard/results', icon: Flag, label: 'Ergebnisse' },
|
||||||
]
|
]
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue