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.
46 lines
1.2 KiB
46 lines
1.2 KiB
import { useEffect, useRef } from "react"; |
|
import { useVideoPlayerState } from "../VideoContext"; |
|
|
|
interface ShowControlProps { |
|
series?: { |
|
episodeId: string; |
|
seasonId: string; |
|
}; |
|
onSelect?: (state: { episodeId?: string; seasonId?: string }) => void; |
|
} |
|
|
|
export function ShowControl(props: ShowControlProps) { |
|
const { videoState } = useVideoPlayerState(); |
|
const lastState = useRef<{ |
|
episodeId?: string; |
|
seasonId?: string; |
|
} | null>({ |
|
episodeId: props.series?.episodeId, |
|
seasonId: props.series?.seasonId, |
|
}); |
|
|
|
useEffect(() => { |
|
videoState.setShowData({ |
|
current: props.series, |
|
isSeries: !!props.series, |
|
}); |
|
// we only want it to run when props change, not when videoState changes |
|
// eslint-disable-next-line react-hooks/exhaustive-deps |
|
}, [props]); |
|
|
|
useEffect(() => { |
|
const currentState = { |
|
episodeId: videoState.seasonData.current?.episodeId, |
|
seasonId: videoState.seasonData.current?.seasonId, |
|
}; |
|
if ( |
|
currentState.episodeId !== lastState.current?.episodeId || |
|
currentState.seasonId !== lastState.current?.seasonId |
|
) { |
|
lastState.current = currentState; |
|
props.onSelect?.(currentState); |
|
} |
|
}, [videoState, props]); |
|
|
|
return null; |
|
}
|
|
|