You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.2 KiB
43 lines
1.2 KiB
import { useEffect, useRef } from "react"; |
|
import { useHistory } from "react-router-dom"; |
|
|
|
import { useVideoPlayerDescriptor } from "@/video/state/hooks"; |
|
import { useMeta } from "@/video/state/logic/meta"; |
|
|
|
interface SeriesControllerProps { |
|
onSelect?: (state: { episodeId?: string; seasonId?: string }) => void; |
|
} |
|
|
|
export function SeriesController(props: SeriesControllerProps) { |
|
const descriptor = useVideoPlayerDescriptor(); |
|
const meta = useMeta(descriptor); |
|
const history = useHistory(); |
|
|
|
const lastState = useRef<{ |
|
episodeId?: string; |
|
seasonId?: string; |
|
} | null>(null); |
|
|
|
useEffect(() => { |
|
const currentState = { |
|
episodeId: meta?.episode?.episodeId, |
|
seasonId: meta?.episode?.seasonId, |
|
}; |
|
if (lastState.current === null) { |
|
if (!meta) return; |
|
lastState.current = currentState; |
|
return; |
|
} |
|
|
|
// when changes are detected, trigger event handler |
|
if ( |
|
currentState.episodeId !== lastState.current?.episodeId || |
|
currentState.seasonId !== lastState.current?.seasonId |
|
) { |
|
lastState.current = currentState; |
|
props.onSelect?.(currentState); |
|
} |
|
}, [meta, props, history]); |
|
|
|
return null; |
|
}
|
|
|