- block-timeline: ref updates moved to useLayoutEffect - channel-card, guide/page: Date.now() wrapped in useMemo + suppress purity rule - auth-context: lazy localStorage init (removes setState-in-effect) - use-channel-order: lazy localStorage init (removes setState-in-effect) - use-idle: start timer on mount without calling resetIdle (removes setState-in-effect) - use-subtitles, transcode-settings-dialog: inline eslint-disable on exact violating line - providers: block-level eslint-disable for tokenRef closure in useState initializer - edit-channel-sheet: remove unused minsToTime and BlockContent imports - docs/page: escape unescaped quote and apostrophe entities
29 lines
961 B
TypeScript
29 lines
961 B
TypeScript
"use client";
|
|
|
|
import { useState, useEffect } from "react";
|
|
import type { SubtitleTrack } from "@/app/(main)/tv/components/video-player";
|
|
|
|
export function useSubtitlePicker(channelIdx: number, slotId?: string) {
|
|
const [subtitleTracks, setSubtitleTracks] = useState<SubtitleTrack[]>([]);
|
|
const [activeSubtitleTrack, setActiveSubtitleTrack] = useState(-1);
|
|
const [showSubtitlePicker, setShowSubtitlePicker] = useState(false);
|
|
|
|
// Reset when channel or slot changes — resetting event-driven state on key
|
|
// change is intentional; no clean alternative without a component key reset
|
|
useEffect(() => {
|
|
// eslint-disable-next-line react-hooks/set-state-in-effect
|
|
setSubtitleTracks([]);
|
|
setActiveSubtitleTrack(-1);
|
|
setShowSubtitlePicker(false);
|
|
}, [channelIdx, slotId]);
|
|
|
|
return {
|
|
subtitleTracks,
|
|
setSubtitleTracks,
|
|
activeSubtitleTrack,
|
|
setActiveSubtitleTrack,
|
|
showSubtitlePicker,
|
|
setShowSubtitlePicker,
|
|
};
|
|
}
|