feature/share-libs
tsx 50 lines 1.58 KB
Raw
1 "use client";
2
3 import { useSearchParams } from "next/navigation";
4 import { useLogger } from "@/lib/logger";
5 import { useEffect, useState } from "react";
6 import { invoke } from "@tauri-apps/api/tauri";
7 import { TAURI_CONTENT_SONG_BRIDGE_DETAIL } from "@/lib/tauri-handler";
8 import { SongProvider } from "@/models/song-response";
9 import SongVotes from "./_components/song-votes";
10 import { SongBridgeResponse } from "@/models/content";
11 import { SongProviderVote } from "@/models/song-votes-detail-response";
12
13 export default function Page() {
14 const log = useLogger("Play");
15 const searchParams = useSearchParams();
16 const songProviderId = searchParams.get("songProviderId");
17 const [songProvider, setSongProvider] = useState<SongProvider | null>(null);
18 const [votes, setVotes] = useState<SongProviderVote[]>([]);
19
20 useEffect(() => {
21 log.debug("Play page loaded.");
22 async function fetchData() {
23 try {
24 const rest: SongBridgeResponse = await invoke(
25 TAURI_CONTENT_SONG_BRIDGE_DETAIL,
26 { songProviderId }
27 );
28 setSongProvider(rest.song_provider);
29 setVotes(rest.votes);
30 log.debug("PreparePlayerResponse", rest);
31 } catch (error) {
32 log.error(error);
33 }
34 }
35 fetchData();
36 // eslint-disable-next-line react-hooks/exhaustive-deps
37 }, []);
38
39 // Sanity check
40 if (!songProvider) {
41 log.error("No songProvider context");
42 return <div>No songProvider context</div>;
43 }
44
45 return (
46 <div className="prose prose-sm prose-invert max-w-none">
47 <SongVotes songProvider={songProvider} votes={votes} />
48 </div>
49 );
50 }