mirror of
https://github.com/streamyfin/streamyfin.git
synced 2026-07-07 13:02:52 +01:00
fix(tv): only defer subtitle selection when it navigates
The close-first + runAfterInteractions pattern is needed only in the player, where selecting a subtitle can navigate (replacePlayer for a burn-in switch while transcoding). On the item detail page the selection just updates state, so deferring it until after the modal is dismissed re-renders the page after focus returns and yanks TV focus — leaving navigation stuck. Gate the deferral behind deferApplyUntilDismissed (set by the in-player caller only); the detail page runs the selection before closing, preserving focus.
This commit is contained in:
@@ -11,6 +11,14 @@ export type TVSubtitleModalState = {
|
||||
onServerSubtitleDownloaded?: () => void;
|
||||
onLocalSubtitleDownloaded?: (path: string) => void;
|
||||
refreshSubtitleTracks?: () => Promise<Track[]>;
|
||||
/**
|
||||
* Run the selection callback AFTER the modal route is dismissed. Needed when
|
||||
* `setTrack` navigates (the player's replacePlayer for a burn-in switch),
|
||||
* which would be swallowed by the still-active modal route. Leave false for
|
||||
* callers whose selection only updates state (the item detail page), so the
|
||||
* update runs before dismissal and doesn't yank focus after it returns.
|
||||
*/
|
||||
deferApplyUntilDismissed?: boolean;
|
||||
} | null;
|
||||
|
||||
export const tvSubtitleModalAtom = atom<TVSubtitleModalState>(null);
|
||||
|
||||
Reference in New Issue
Block a user