22 lines
871 B
TypeScript
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);
|
|
}
|
|
});
|