From df1623eb539239bd138a3597a4873396a00bde62 Mon Sep 17 00:00:00 2001 From: Aleksi Lassila Date: Thu, 4 Apr 2024 12:17:24 +0300 Subject: [PATCH] feat: Episode card frames --- src/App.svelte | 2 +- src/Container.svelte | 5 +- src/lib/apis/tmdb/tmdb-api.ts | 1 + src/lib/components/Carousel/UICarousel.svelte | 37 ++++++++++++ .../DetachedPage/DetachedPage.svelte | 2 +- .../components/SeriesPage/EpisodeCard.svelte | 28 +++++++++ .../SeriesPage/EpisodeCarousel.svelte | 60 +++++++++++++++++++ .../SeriesPage}/SeriesPage.svelte | 35 ++++++----- 8 files changed, 152 insertions(+), 18 deletions(-) create mode 100644 src/lib/components/Carousel/UICarousel.svelte create mode 100644 src/lib/components/SeriesPage/EpisodeCard.svelte create mode 100644 src/lib/components/SeriesPage/EpisodeCarousel.svelte rename src/lib/{pages => components/SeriesPage}/SeriesPage.svelte (79%) diff --git a/src/App.svelte b/src/App.svelte index 8350641..619da13 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -8,7 +8,7 @@ import LibraryPage from './lib/pages/LibraryPage.svelte'; import ManagePage from './lib/pages/ManagePage.svelte'; import SearchPage from './lib/pages/SearchPage.svelte'; - import SeriesPage from './lib/pages/SeriesPage.svelte'; + import SeriesPage from './lib/components/SeriesPage/SeriesPage.svelte'; import Sidebar from './lib/components/Sidebar/Sidebar.svelte'; import LoginPage from './lib/pages/LoginPage.svelte'; import { getReiverrApiClient } from './lib/apis/reiverr/reiverr-api'; diff --git a/src/Container.svelte b/src/Container.svelte index d90d2b6..6527013 100644 --- a/src/Container.svelte +++ b/src/Container.svelte @@ -3,6 +3,8 @@ import { type NavigationActions, type RevealStrategy, Selectable } from './lib/selectable'; import classNames from 'classnames'; + export let element: HTMLElement; + export let name: string = ''; export let direction: 'vertical' | 'horizontal' | 'grid' = 'vertical'; export let gridCols: number = 0; @@ -10,7 +12,7 @@ export let canFocusEmpty = true; export let trapFocus = false; export let debugOutline = false; - export let revealStrategy: RevealStrategy | undefined = undefined; + export let revealStrategy: RevealStrategy | undefined = undefined; //TODO: change to on:focus export let childrenRevealStrategy: RevealStrategy | undefined = undefined; export let active = true; @@ -58,6 +60,7 @@ 'outline-none': debugOutline === false })} use:registerer + bind:this={element} > diff --git a/src/lib/apis/tmdb/tmdb-api.ts b/src/lib/apis/tmdb/tmdb-api.ts index 04d146c..4ee46dd 100644 --- a/src/lib/apis/tmdb/tmdb-api.ts +++ b/src/lib/apis/tmdb/tmdb-api.ts @@ -16,6 +16,7 @@ export type TmdbSeries2 = operations['tv-series-details']['responses']['200']['content']['application/json']; export type TmdbSeason = operations['tv-season-details']['responses']['200']['content']['application/json']; +export type TmdbEpisode = NonNullable[0]; export type TmdbPerson = operations['person-details']['responses']['200']['content']['application/json']; diff --git a/src/lib/components/Carousel/UICarousel.svelte b/src/lib/components/Carousel/UICarousel.svelte new file mode 100644 index 0000000..b2af111 --- /dev/null +++ b/src/lib/components/Carousel/UICarousel.svelte @@ -0,0 +1,37 @@ + + + + + diff --git a/src/lib/components/DetachedPage/DetachedPage.svelte b/src/lib/components/DetachedPage/DetachedPage.svelte index c0bc041..e30486f 100644 --- a/src/lib/components/DetachedPage/DetachedPage.svelte +++ b/src/lib/components/DetachedPage/DetachedPage.svelte @@ -11,7 +11,7 @@ }} focusOnMount trapFocus - class="fixed inset-0 z-20 bg-stone-950" + class="fixed inset-0 z-20 bg-stone-950 overflow-y-auto" > diff --git a/src/lib/components/SeriesPage/EpisodeCard.svelte b/src/lib/components/SeriesPage/EpisodeCard.svelte new file mode 100644 index 0000000..9e769ca --- /dev/null +++ b/src/lib/components/SeriesPage/EpisodeCard.svelte @@ -0,0 +1,28 @@ + + + +
+

Episode {episode.episode_number}

+

{episode.name}

+
+
+
+ diff --git a/src/lib/components/SeriesPage/EpisodeCarousel.svelte b/src/lib/components/SeriesPage/EpisodeCarousel.svelte new file mode 100644 index 0000000..7aad4ec --- /dev/null +++ b/src/lib/components/SeriesPage/EpisodeCarousel.svelte @@ -0,0 +1,60 @@ + + +{#if $isTmdbSeasonsLoading} + Loading... +{:else if $tmdbSeasons} + + + {#each $tmdbSeasons as season} + handleSelectSeason(season)} + > +
+ Season {season.season_number} +
+
+ {/each} +
+ + {#each $tmdbSeasons as season} + {#each season?.episodes || [] as episode} +
+ +
+ {/each} + {/each} +
+
+{/if} diff --git a/src/lib/pages/SeriesPage.svelte b/src/lib/components/SeriesPage/SeriesPage.svelte similarity index 79% rename from src/lib/pages/SeriesPage.svelte rename to src/lib/components/SeriesPage/SeriesPage.svelte index 1903647..69b0422 100644 --- a/src/lib/pages/SeriesPage.svelte +++ b/src/lib/components/SeriesPage/SeriesPage.svelte @@ -1,24 +1,28 @@ -
+
@@ -140,4 +144,5 @@
+