Skip to content

Commit ddec52a

Browse files
committed
feat: collections page compact header and reusable component, use in persons page
1 parent ef5c87d commit ddec52a

File tree

4 files changed

+53
-41
lines changed

4 files changed

+53
-41
lines changed

src/lib/components/CardGrid.svelte

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
style={`grid-template-columns: repeat(${cols}, minmax(0, 1fr));`}
7272
on:mount
7373
>
74-
<slot />
74+
<slot columns={cols} />
7575
</Container>
7676

7777
<!--<svelte:window on:resize={calculateRows} />-->

src/lib/components/StackRouter/StackRouterPage.svelte

-7
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,6 @@
1313
const topSelectable = useRegistrar();
1414
1515
function handleGoBack() {
16-
// if ('willLeaveContainer' in detail) {
17-
// if (detail.direction !== 'left' || !detail.willLeaveContainer) return;
18-
// detail.preventNavigation();
19-
// }
20-
2116
const selectable = get(topSelectable);
2217
if (selectable && get(selectable.focusIndex) === 0) {
2318
history.back();
@@ -32,8 +27,6 @@
3227
selectable?.focusChild(0, { cycleTo: true }) || selectable?.focus({ cycleTo: true });
3328
} else handleGoBack();
3429
}
35-
36-
// onDestroy(() => background.destroy())
3730
</script>
3831

3932
<Container

src/lib/pages/CollectionPages/CollectionPage.svelte

+42-16
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,10 @@
2222

2323
<Container
2424
on:back={handleGoBack}
25-
on:mount={registrar}
26-
class="*:px-32 flex flex-col h-screen relative"
25+
class="py-16 *:px-32 flex flex-col h-screen overflow-y-auto overflow-x-hidden"
2726
>
28-
<div
29-
class={classNames(
30-
'pt-16 pb-4 absolute top-0 inset-x-0 z-10 bg-gradient-to-b from-100% from-secondary-900 to-transparent transition-transform',
31-
{
32-
'-translate-y-12 ': !$topVisible
33-
}
34-
)}
35-
>
36-
<div class={classNames('transition-transform', {})}>
27+
<slot name="header">
28+
<div class="pt-8">
3729
<h2 class="uppercase text-zinc-300 font-semibold tracking-wider">{subtitle}</h2>
3830
<h1
3931
class={classNames('text-left font-semibold tracking-wider text-stone-200 mt-1', {
@@ -44,14 +36,48 @@
4436
{title}
4537
</h1>
4638
</div>
47-
</div>
48-
<div class="py-48 flex-1 overflow-y-auto overflow-x-hidden scrollbar-hide" use:registerScroll>
39+
</slot>
40+
41+
<slot name="header-compact">
42+
<div
43+
class={classNames(
44+
'py-6 absolute top-0 inset-x-0 z-10 bg-gradient-to-b from-100% from-secondary-900 to-transparent transition-all',
45+
{
46+
'opacity-0 pointer-events-none -translate-y-4': $topVisible
47+
}
48+
)}
49+
>
50+
<h2 class="uppercase text-zinc-300 font-semibold tracking-wider">{subtitle}</h2>
51+
<h1
52+
class={classNames('text-left font-semibold tracking-wider text-stone-200 mt-1', {
53+
'text-3xl sm:text-4xl 2xl:text-5xl': title.length || 0 < 15,
54+
'text-2xl sm:text-3xl 2xl:text-4xl': title.length || 0 >= 15
55+
})}
56+
>
57+
{title}
58+
</h1>
59+
</div>
60+
</slot>
61+
62+
<div class="pt-16" use:registerScroll>
4963
{#await items}
5064
Loading...
5165
{:then items}
52-
<CardGrid>
53-
{#each items as item}
54-
<TmdbCard on:enter={scrollIntoView({ top: 192 })} {item} />
66+
<CardGrid let:columns
67+
on:mount={registrar}
68+
69+
>
70+
{#each items as item, index}
71+
<TmdbCard
72+
on:enter={(e) => {
73+
if (index < columns) {
74+
scrollIntoView({ top: 500 })(e);
75+
} else {
76+
scrollIntoView({ top: 192 })(e);
77+
}
78+
}}
79+
{item}
80+
/>
5581
{/each}
5682
</CardGrid>
5783
{/await}

src/lib/pages/PersonPage.svelte

+10-17
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import TmdbCard from '../components/Card/TmdbCard.svelte';
88
import CardGrid from '../components/CardGrid.svelte';
99
import { TMDB_POSTER_SMALL } from '../constants.js';
10+
import CollectionPage from './CollectionPages/CollectionPage.svelte';
1011
import HeroTitleInfo from './TitlePages/HeroTitleInfo.svelte';
1112
1213
createBackgroundPage();
@@ -64,15 +65,15 @@
6465
</script>
6566

6667
{#await person then person}
67-
<Container
68-
focusOnMount
69-
on:back={handleGoBack}
70-
on:mount={registrar}
71-
class="px-32 py-16 space-y-16"
68+
<CollectionPage
69+
items={titles}
70+
subtitle="Person"
71+
title={person.name ?? 'Unknown'}
72+
{registrar}
73+
{handleGoBack}
7274
>
73-
<div class="flex space-x-8">
74-
<Container
75-
on:enter={scrollIntoView({ vertical: 128 })}
75+
<div class="flex space-x-8" slot="header">
76+
<div
7677
class="bg-center bg-cover rounded-xl w-44 h-64 cursor-pointer flex-shrink-0"
7778
style={`background-image: url("${TMDB_POSTER_SMALL + person.profile_path}")`}
7879
/>
@@ -85,13 +86,5 @@
8586
/>
8687
</div>
8788
</div>
88-
89-
<CardGrid>
90-
{#await titles then titles}
91-
{#each titles as title}
92-
<TmdbCard item={title} on:enter={scrollIntoView({ vertical: 128 })} />
93-
{/each}
94-
{/await}
95-
</CardGrid>
96-
</Container>
89+
</CollectionPage>
9790
{/await}

0 commit comments

Comments
 (0)