aboutsummaryrefslogtreecommitdiffstats
path: root/web/pages/tracks
diff options
context:
space:
mode:
authorLeonardo Bishop <me@leonardobishop.com>2025-08-14 18:07:12 +0100
committerLeonardo Bishop <me@leonardobishop.com>2025-08-14 18:07:12 +0100
commit4697556cac819c47d068819b9fc9c3b4ea84e279 (patch)
treeb832d8fc6b643a8b9d0eeca35c1268e1649da731 /web/pages/tracks
parentdd49c9205bb04844b686b9c3396c40eb49d25826 (diff)
Merge confplanner-web and replace fiber with native net/http
Diffstat (limited to 'web/pages/tracks')
-rw-r--r--web/pages/tracks/[slug].vue45
-rw-r--r--web/pages/tracks/index.vue49
2 files changed, 94 insertions, 0 deletions
diff --git a/web/pages/tracks/[slug].vue b/web/pages/tracks/[slug].vue
new file mode 100644
index 0000000..27fb97d
--- /dev/null
+++ b/web/pages/tracks/[slug].vue
@@ -0,0 +1,45 @@
+<script setup lang="ts">
+import { TrainTrack } from 'lucide-vue-next';
+import { useScheduleStore } from '~/stores/schedule';
+
+const route = useRoute();
+const scheduleStore = useScheduleStore();
+
+const track = scheduleStore.schedule?.tracks.find((track) => track.slug === route.params.slug);
+</script>
+
+<template>
+ <Panel v-if="track" :title="track.name" :breadcrumbs="[{ text: 'Tracks', to: '/tracks' }]" :icon="TrainTrack">
+ <ul class="events-list">
+ <li
+ v-for="event in scheduleStore.eventsPerTrack[track.name]"
+ :key="event.id"
+ class="event-item"
+ >
+ <EventListing :event="event" />
+ </li>
+ </ul>
+ </Panel>
+</template>
+
+<style>
+.events-list {
+ list-style: none;
+ margin: -1rem 0;
+ padding: 0;
+ display: grid;
+}
+
+.event-item {
+ border-bottom: 1px solid var(--color-background-muted);
+}
+
+.events-title {
+ margin-bottom: 1rem;
+}
+
+.event-item:last-child {
+ border-bottom: none;
+}
+
+</style> \ No newline at end of file
diff --git a/web/pages/tracks/index.vue b/web/pages/tracks/index.vue
new file mode 100644
index 0000000..8d7534e
--- /dev/null
+++ b/web/pages/tracks/index.vue
@@ -0,0 +1,49 @@
+<script setup lang="ts">
+import { TrainTrack } from 'lucide-vue-next';
+import Panel from '~/components/Panel.vue';
+
+const scheduleStore = useScheduleStore();
+</script>
+
+<template>
+ <Panel v-if="scheduleStore.schedule" title="Tracks" :icon="TrainTrack">
+ <ul class="tracks-list">
+ <li
+ v-for="track in scheduleStore.schedule.tracks"
+ :key="track.name"
+ class="tracks-item"
+ >
+ <NuxtLink :to="'/tracks/' + track.slug" class="track-item">
+ {{ track.name }}
+ </NuxtLink>
+ </li>
+ </ul>
+ </Panel>
+</template>
+
+<style scoped>
+.tracks-list {
+ list-style: none;
+ margin: -0.5rem 0 0 0;
+ padding: 0;
+ display: grid;
+}
+
+.track-item {
+ position: relative;
+ border-bottom: 1px solid var(--color-background-muted);
+ padding: 0.5rem 1rem;
+ left: -1rem;
+ width: calc(100%);
+ display: block;
+ text-decoration: none;
+}
+
+.track-item:last-child {
+ border-bottom: none;
+}
+
+.track-item:hover {
+ background-color: var(--color-background-muted);
+}
+</style> \ No newline at end of file