Files
jellyfin-web/src/themes/themeStorageManager.ts
T
2025-10-03 09:46:25 -04:00

22 lines
871 B
TypeScript

import { StorageManager } from '@mui/material/styles';
import Events, { type Event } from 'utils/events';
import { EventType } from 'types/eventType';
/**
* A custom MUI StorageManager.
*
* Since we switch the theme based on the current page, we handle getting/setting the current theme via autoTheme +
* themeManager. We need to implement `subscribe` so MUI is aware of theme changes though otherwise the `useTheme` hook
* will always return the default theme.
*/
export const ThemeStorageManager: StorageManager = () => ({
get: defaultValue => defaultValue,
set: () => { /* no-op */ },
subscribe: handler => {
const wrappedHandler = (_e: Event, value: string) => handler(value);
Events.on(document, EventType.THEME_CHANGE, wrappedHandler);
return () => Events.off(document, EventType.THEME_CHANGE, wrappedHandler);
}
});