From e7da1423ce50a5ee1b09d6b6bed88d6466661a9f Mon Sep 17 00:00:00 2001 From: Xevion Date: Wed, 16 Jul 2025 19:30:38 -0500 Subject: [PATCH] feat: slugify, switch episode route to title-based url --- app/components/layout/SeasonList.vue | 62 ++++++++++++++++-------- app/components/layout/SeasonListItem.vue | 34 ++++++------- app/lib/utils.ts | 10 +++- app/pages/episode/[id].vue | 24 ++++++--- 4 files changed, 81 insertions(+), 49 deletions(-) diff --git a/app/components/layout/SeasonList.vue b/app/components/layout/SeasonList.vue index 0de5241..5db8f85 100644 --- a/app/components/layout/SeasonList.vue +++ b/app/components/layout/SeasonList.vue @@ -8,31 +8,54 @@ import { } from '@/components/ui/accordion'; import { ChevronDown } from 'lucide-vue-next'; import { computed } from 'vue'; -import { cn } from '@/lib/utils'; -import useStore from '@/store'; -const store = useStore(); -store.preloadEpisodes(); -const seasons = computed(() => store.quoteData); +import episodes from '@/../public/json/episodes.json'; + +const data = computed(() => { + return episodes.map((season, seasonIndex) => { + return { + seasonNumber: seasonIndex + 1, + episodes: season.map((episode, episodeIndex) => { + const title = episode?.title; + if (!title) { + // throw new Error( + // `Episode title is required for season ${seasonIndex + 1} episode ${episodeIndex + 1}`, + // ); + return { + episodeNumber: episodeIndex + 1, + seasonNumber: seasonIndex + 1, + title: 'IDK', + }; + } + + return { + episodeNumber: episodeIndex + 1, + seasonNumber: seasonIndex + 1, + title, + }; + }), + }; + }); +});