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:
parent
d974ac47d9
commit
bcae4477b4
3 changed files with 27 additions and 5 deletions
|
@ -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}>
|
||||||
|
|
|
@ -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');
|
||||||
|
|
|
@ -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'
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue