mirror of
https://github.com/datahub-project/datahub.git
synced 2025-09-04 14:53:14 +00:00
63 lines
1.8 KiB
TypeScript
63 lines
1.8 KiB
TypeScript
import { useEffect } from 'react';
|
|
|
|
import { useAppConfig } from '@app/useAppConfig';
|
|
import { useIsThemeV2 } from '@app/useIsThemeV2';
|
|
import { useCustomTheme } from '@src/customThemeContext';
|
|
|
|
// add new theme ids here
|
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
enum ThemeId {}
|
|
|
|
function useCustomThemeId() {
|
|
const { config, loaded } = useAppConfig();
|
|
|
|
if (!loaded) {
|
|
return loadThemeIdFromLocalStorage();
|
|
}
|
|
|
|
return config.visualConfig.theme?.themeId || null;
|
|
}
|
|
|
|
export function useSetAppTheme() {
|
|
const isThemeV2 = useIsThemeV2();
|
|
const { config } = useAppConfig();
|
|
const { updateTheme } = useCustomTheme();
|
|
const customThemeId = useCustomThemeId();
|
|
|
|
useEffect(() => {
|
|
setThemeIdLocalStorage(customThemeId);
|
|
}, [customThemeId]);
|
|
|
|
useEffect(() => {
|
|
// here is where we can start adding new custom themes based on customThemeId
|
|
|
|
if (isThemeV2) {
|
|
import('../conf/theme/theme_v2.config.json').then((theme) => updateTheme(theme));
|
|
} else {
|
|
import('../conf/theme/theme_light.config.json').then((theme) => updateTheme(theme));
|
|
}
|
|
}, [config, isThemeV2, updateTheme, customThemeId]);
|
|
}
|
|
|
|
function setThemeIdLocalStorage(customThemeId: string | null) {
|
|
if (!customThemeId) {
|
|
removeThemeIdFromLocalStorage();
|
|
} else if (loadThemeIdFromLocalStorage() !== customThemeId) {
|
|
saveToLocalStorage(customThemeId);
|
|
}
|
|
}
|
|
|
|
const CUSTOM_THEME_ID_KEY = 'customThemeId';
|
|
|
|
export function loadThemeIdFromLocalStorage(): string | null {
|
|
return localStorage.getItem(CUSTOM_THEME_ID_KEY);
|
|
}
|
|
|
|
function removeThemeIdFromLocalStorage() {
|
|
return localStorage.removeItem(CUSTOM_THEME_ID_KEY);
|
|
}
|
|
|
|
function saveToLocalStorage(customThemeId: string) {
|
|
localStorage.setItem(CUSTOM_THEME_ID_KEY, customThemeId);
|
|
}
|