@@ -2,62 +2,62 @@ import cls from "clsx";
22import type { meQuery } from "🛠️/me" ;
33
44export interface Props {
5- show : Awaited < typeof meQuery > [ "tv" ] [ number ] ;
6- selected ?: number ;
7- i ?: number ;
5+ show : Awaited < typeof meQuery > [ "tv" ] [ number ] ;
6+ selected ?: number ;
7+ i ?: number ;
88}
99
1010function parseEpisode ( text : string ) {
11- return {
12- season : / S 0 ? ( \d + ) / . exec ( text ) ?. [ 1 ] ,
13- episode : / E 0 ? ( \d + ) / . exec ( text ) ?. [ 1 ] ,
14- } ;
11+ return {
12+ season : / S 0 ? ( \d + ) / . exec ( text ) ?. [ 1 ] ,
13+ episode : / E 0 ? ( \d + ) / . exec ( text ) ?. [ 1 ] ,
14+ } ;
1515}
1616
1717export default function WatchedTvShow ( { show, selected, i } : Props ) {
18- const { episode, season } = parseEpisode ( show . episode ) ;
19- if ( ! show . coverUrl ) {
20- throw new Error ( "Invalid coverUrl, empty" ) ;
21- }
18+ const { episode, season } = parseEpisode ( show . episode ) ;
19+ if ( ! show . coverUrl ) {
20+ throw new Error ( "Invalid coverUrl, empty" ) ;
21+ }
2222
23- const isSelected = selected === i || typeof selected === "undefined" ;
24- return (
25- < a
26- href = { show . simklLink ?? "#" }
27- rel = "nofollower noopener external"
28- className = { cls ( "flex flex-col gap-1 w-full h-full" ) }
29- >
30- < img
31- src = { show . coverUrl }
32- alt = { `Cover for ${ show . title } ` }
33- className = { cls (
34- "rounded mb-2 max-h-[200px] object-cover h-full w-full ease-out transition-all aspect-ratio-[9/16]" ,
35- isSelected ? "opacity-100" : "opacity-20%" ,
36- ) }
37- />
38- < div className = "flex flex-col gap-1" >
39- < h3
40- className = { cls (
41- "font-medium whitespace-nowrap overflow-hidden" ,
42- isSelected ? "color-text-800" : "color-text-100 opacity-50%" ,
43- ) }
44- >
45- { show . title }
46- </ h3 >
47- < span
48- className = { cls (
49- "text-xs flex gap-1" ,
50- isSelected ? "color-text-300" : "color-text-100 opacity-50%" ,
51- ) }
52- >
53- { season !== undefined && < p > S{ season } </ p > }
54- { episode !== undefined && (
55- < >
56- { season && "·" } < p > E{ episode } </ p >
57- </ >
58- ) }
59- </ span >
60- </ div >
61- </ a >
62- ) ;
23+ const isSelected = selected === i || typeof selected === "undefined" ;
24+ return (
25+ < a
26+ href = { show . simklLink ?? "#" }
27+ rel = "nofollower noopener external"
28+ className = { cls ( "flex flex-col gap-1 w-full h-full" ) }
29+ >
30+ < img
31+ src = { show . coverUrl }
32+ alt = { `Cover for ${ show . title } ` }
33+ className = { cls (
34+ "rounded mb-2 max-h-[200px] object-cover h-full w-full ease-out transition-all aspect-ratio-[9/16]" ,
35+ isSelected ? "opacity-100" : "opacity-20%"
36+ ) }
37+ />
38+ < div className = "flex flex-col gap-1" >
39+ < h3
40+ className = { cls (
41+ "font-medium whitespace-nowrap overflow-hidden" ,
42+ isSelected ? "color-text-800" : "color-text-100 opacity-50%"
43+ ) }
44+ >
45+ { show . title }
46+ </ h3 >
47+ < span
48+ className = { cls (
49+ "text-xs flex gap-1" ,
50+ isSelected ? "color-text-300" : "color-text-100 opacity-50%"
51+ ) }
52+ >
53+ { season !== undefined && < p > S{ season } </ p > }
54+ { episode !== undefined && (
55+ < >
56+ { season && "·" } < p > E{ episode } </ p >
57+ </ >
58+ ) }
59+ </ span >
60+ </ div >
61+ </ a >
62+ ) ;
6363}
0 commit comments