Skip to content

Commit 2ed628d

Browse files
committed
Implement Embed Player
1 parent 649b02c commit 2ed628d

File tree

3 files changed

+29
-27
lines changed

3 files changed

+29
-27
lines changed
Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,31 @@
1-
'use client';
2-
31
import PlayerManager from '@/components/PlayerManager';
42
import SongsColumn from '@/components/SongsColumn';
53
import RelistenAPI from '@/lib/RelistenAPI';
64
import { createShowDate } from '@/lib/utils';
75
import { RawParams } from '@/types/params';
86
import { notFound } from 'next/navigation';
97
import { playImmediatelySearchParamsLoader } from '@/lib/searchParams/playImmediatelySearchParam';
10-
import { useEffect, useState } from 'react';
118

12-
export default function EmbedSongPage(props: { params: Promise<RawParams> }) {
13-
const [params, setParams] = useState<RawParams | null>(null);
14-
const [show, setShow] = useState(null);
15-
const [{ playImmediately }] = playImmediatelySearchParamsLoader.useQueryStates();
9+
interface EmbedSongPageProps {
10+
params: Promise<RawParams>;
11+
searchParams: Promise<{ [key: string]: string | string[] | undefined }>;
12+
}
13+
14+
export default async function EmbedSongPage({ params, searchParams }: EmbedSongPageProps) {
15+
const resolvedParams = await params;
16+
const { artistSlug, year, month, day } = resolvedParams;
1617

17-
useEffect(() => {
18-
async function loadData() {
19-
const resolvedParams = await props.params;
20-
setParams(resolvedParams);
21-
22-
const { artistSlug, year, month, day } = resolvedParams;
23-
if (!year || !month || !day) return;
24-
25-
const showData = await RelistenAPI.fetchShow(artistSlug, year, createShowDate(year, month, day));
26-
setShow(showData);
27-
}
28-
loadData();
29-
}, [props.params]);
18+
if (!year || !month || !day) return notFound();
3019

31-
if (!params || !show) {
32-
return <div>Loading...</div>;
20+
const show = await RelistenAPI.fetchShow(artistSlug, year, createShowDate(year, month, day));
21+
22+
if (!show) {
23+
notFound();
3324
}
3425

35-
const { artistSlug, year, month, day } = params;
26+
// Parse search params on server
27+
const parsedSearchParams = await playImmediatelySearchParamsLoader.parseAndValidate(searchParams);
28+
const playImmediately = parsedSearchParams.playImmediately ?? true;
3629

3730
return (
3831
<div className="flex h-full">
@@ -46,12 +39,17 @@ export default function EmbedSongPage(props: { params: Promise<RawParams> }) {
4639
routePrefix="/embed"
4740
/>
4841
</div>
49-
<PlayerManager {...params} show={show} routePrefix="/embed" playImmediately={playImmediately} />
42+
<PlayerManager
43+
{...resolvedParams}
44+
show={show}
45+
routePrefix="/embed"
46+
playImmediately={playImmediately}
47+
/>
5048
</div>
5149
);
5250
}
5351

54-
export const generateMetadata = async (props) => {
52+
export async function generateMetadata(props) {
5553
const [params, artists] = await Promise.all([props.params, RelistenAPI.fetchArtists()]);
5654
const { artistSlug, year, month, day, songSlug } = params;
5755

@@ -79,4 +77,4 @@ export const generateMetadata = async (props) => {
7977
],
8078
},
8179
};
82-
};
80+
}

src/components/PlayerManager.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ export default function PlayerManager(props: PlayerManagerProps) {
6262
// check if track is already in queue, and re-use
6363
if (player.currentTrack?.metadata?.trackId === activeTrack?.id) {
6464
console.log('track is already playing');
65+
player.play();
6566
return;
6667
}
6768

src/lib/searchParams/playImmediatelySearchParam.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,7 @@ export const playImmediatelyParser = {
1010
playImmediately: parseAsBoolean.withDefault(true),
1111
};
1212

13-
export const playImmediatelySearchParamsLoader = createSearchParams(playImmediatelySchema, playImmediatelyParser);
13+
export const playImmediatelySearchParamsLoader = createSearchParams(
14+
playImmediatelySchema,
15+
playImmediatelyParser
16+
);

0 commit comments

Comments
 (0)