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

73 lines
2.3 KiB
TypeScript
Raw Normal View History

2022-06-14 12:48:49 -04:00
import React, { FunctionComponent, HTMLAttributes, useEffect, useRef } from 'react';
2022-04-14 01:19:27 -04:00
import viewManager from './viewManager/viewManager';
type PageProps = {
id: string, // id is required for libraryMenu
2022-06-14 12:48:49 -04:00
title?: string,
isBackButtonEnabled?: boolean,
2022-06-29 04:16:20 +03:00
isMenuButtonEnabled?: boolean,
isNowPlayingBarEnabled?: boolean,
isThemeMediaSupported?: boolean
2022-04-14 01:19:27 -04:00
};
/**
* Page component that handles hiding active non-react views, triggering the required events for
* navigation and appRouter state updates, and setting the correct classes and data attributes.
*/
2022-06-14 12:48:49 -04:00
const Page: FunctionComponent<PageProps & HTMLAttributes<HTMLDivElement>> = ({
children,
id,
2022-06-14 12:48:49 -04:00
className = '',
title,
isBackButtonEnabled = true,
2022-06-29 04:16:20 +03:00
isMenuButtonEnabled = false,
isNowPlayingBarEnabled = true,
isThemeMediaSupported = false
2022-06-14 12:48:49 -04:00
}) => {
2022-04-14 01:19:27 -04:00
const element = useRef<HTMLDivElement>(null);
useEffect(() => {
// hide active non-react views
viewManager.hideView();
}, []);
useEffect(() => {
const event = {
bubbles: true,
cancelable: false,
detail: {
isRestored: false,
options: {
enableMediaControl: isNowPlayingBarEnabled,
supportsThemeMedia: isThemeMediaSupported
}
2022-04-14 01:19:27 -04:00
}
};
// viewbeforeshow - switches between the admin dashboard and standard themes
element.current?.dispatchEvent(new CustomEvent('viewbeforeshow', event));
// pagebeforeshow - hides tabs on tables pages in libraryMenu
2022-04-14 01:19:27 -04:00
element.current?.dispatchEvent(new CustomEvent('pagebeforeshow', event));
// viewshow - updates state of appRouter
element.current?.dispatchEvent(new CustomEvent('viewshow', event));
// pageshow - updates header/navigation in libraryMenu
element.current?.dispatchEvent(new CustomEvent('pageshow', event));
}, [ element, isNowPlayingBarEnabled, isThemeMediaSupported ]);
2022-04-14 01:19:27 -04:00
return (
<div
ref={element}
id={id}
2022-04-14 01:19:27 -04:00
data-role='page'
2022-06-14 12:48:49 -04:00
className={`page ${className}`}
2022-04-14 01:19:27 -04:00
data-title={title}
2022-06-14 12:48:49 -04:00
data-backbutton={`${isBackButtonEnabled}`}
2022-06-29 04:16:20 +03:00
data-menubutton={`${isMenuButtonEnabled}`}
2022-04-14 01:19:27 -04:00
>
{children}
</div>
);
};
export default Page;