1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

Backport pull request #6433 from jellyfin-web/release-10.10.z

Fix main tab manager crash in experimental layout

Original-merge: 700e72b409

Merged-by: thornbill <thornbill@users.noreply.github.com>

Backported-by: thornbill <thornbill@users.noreply.github.com>
This commit is contained in:
thornbill 2025-01-22 03:12:49 -05:00
parent d974ac47d9
commit bcae4477b4
3 changed files with 27 additions and 5 deletions

View file

@ -5,6 +5,8 @@ import globalize from '../../../lib/globalize';
import { clearBackdrop } from '../../../components/backdrop/backdrop'; import { clearBackdrop } from '../../../components/backdrop/backdrop';
import layoutManager from '../../../components/layoutManager'; import layoutManager from '../../../components/layoutManager';
import Page from '../../../components/Page'; import Page from '../../../components/Page';
import { EventType } from 'types/eventType';
import Events from 'utils/events';
import '../../../elements/emby-tabs/emby-tabs'; import '../../../elements/emby-tabs/emby-tabs';
import '../../../elements/emby-button/emby-button'; import '../../../elements/emby-button/emby-button';
@ -32,6 +34,8 @@ const Home = () => {
const mainTabsManager = useMemo(() => import('../../../components/maintabsmanager'), []); const mainTabsManager = useMemo(() => import('../../../components/maintabsmanager'), []);
const tabController = useRef<ControllerProps | null>(); const tabController = useRef<ControllerProps | null>();
const tabControllers = useMemo<ControllerProps[]>(() => [], []); const tabControllers = useMemo<ControllerProps[]>(() => [], []);
const documentRef = useRef<Document>(document);
const element = useRef<HTMLDivElement>(null); const element = useRef<HTMLDivElement>(null);
const setTitle = async () => { const setTitle = async () => {
@ -122,7 +126,7 @@ const Home = () => {
} else if (currentTabController?.onResume) { } else if (currentTabController?.onResume) {
currentTabController.onResume({}); currentTabController.onResume({});
} }
(document.querySelector('.skinHeader') as HTMLDivElement).classList.add('noHomeButtonHeader'); (documentRef.current.querySelector('.skinHeader') as HTMLDivElement).classList.add('noHomeButtonHeader');
}, [ initialTabIndex, mainTabsManager ]); }, [ initialTabIndex, mainTabsManager ]);
const onPause = useCallback(() => { const onPause = useCallback(() => {
@ -130,17 +134,32 @@ const Home = () => {
if (currentTabController?.onPause) { if (currentTabController?.onPause) {
currentTabController.onPause(); currentTabController.onPause();
} }
(document.querySelector('.skinHeader') as HTMLDivElement).classList.remove('noHomeButtonHeader'); (documentRef.current.querySelector('.skinHeader') as HTMLDivElement).classList.remove('noHomeButtonHeader');
}, []); }, []);
useEffect(() => { const renderHome = useCallback(() => {
void onSetTabs(); void onSetTabs();
void onResume(); void onResume();
}, [ onResume, onSetTabs ]);
useEffect(() => {
if (documentRef.current?.querySelector('.headerTabs')) {
renderHome();
}
return () => { return () => {
onPause(); onPause();
}; };
}, [ onPause, onResume, onSetTabs ]); }, [onPause, renderHome]);
useEffect(() => {
const doc = documentRef.current;
if (doc) Events.on(doc, EventType.HEADER_RENDERED, renderHome);
return () => {
if (doc) Events.off(doc, EventType.HEADER_RENDERED, renderHome);
};
}, [ renderHome ]);
return ( return (
<div ref={element}> <div ref={element}>

View file

@ -58,6 +58,8 @@ function renderHeader() {
skinHeader.classList.add('skinHeader-blurred'); skinHeader.classList.add('skinHeader-blurred');
skinHeader.innerHTML = html; skinHeader.innerHTML = html;
Events.trigger(document, EventType.HEADER_RENDERED);
headerBackButton = skinHeader.querySelector('.headerBackButton'); headerBackButton = skinHeader.querySelector('.headerBackButton');
headerHomeButton = skinHeader.querySelector('.headerHomeButton'); headerHomeButton = skinHeader.querySelector('.headerHomeButton');
mainDrawerButton = skinHeader.querySelector('.mainDrawerButton'); mainDrawerButton = skinHeader.querySelector('.mainDrawerButton');

View file

@ -2,6 +2,7 @@
* Custom event types. * Custom event types.
*/ */
export enum EventType { export enum EventType {
HEADER_RENDERED = 'HEADER_RENDERED',
SET_TABS = 'SET_TABS', SET_TABS = 'SET_TABS',
SHOW_VIDEO_OSD = 'SHOW_VIDEO_OSD' SHOW_VIDEO_OSD = 'SHOW_VIDEO_OSD'
} }