Files
Homarr/src/config/provider.tsx

53 lines
1.8 KiB
TypeScript
Raw Normal View History

2022-12-04 17:36:30 +01:00
import { createContext, ReactNode, useContext, useEffect, useState } from 'react';
import shallow from 'zustand/shallow';
import { useColorTheme } from '../tools/color';
import { ConfigType } from '../types/config';
import { useConfigStore } from './store';
export type ConfigContextType = {
config: ConfigType | undefined;
name: string | undefined;
configVersion: number | undefined;
increaseVersion: () => void;
2022-12-04 17:36:30 +01:00
setConfigName: (name: string) => void;
};
const ConfigContext = createContext<ConfigContextType>({
name: 'unknown',
config: undefined,
configVersion: undefined,
2023-03-03 00:37:22 +09:00
increaseVersion: () => {},
setConfigName: () => {},
2022-12-04 17:36:30 +01:00
});
export const ConfigProvider = ({ children }: { children: ReactNode }) => {
const [configName, setConfigName] = useState<string>();
const [configVersion, setConfigVersion] = useState(0);
2022-12-04 17:36:30 +01:00
const { configs } = useConfigStore((s) => ({ configs: s.configs }), shallow);
const { setPrimaryColor, setSecondaryColor, setPrimaryShade } = useColorTheme();
const currentConfig = configs.find((c) => c.value.configProperties.name === configName)?.value;
2022-12-04 17:36:30 +01:00
useEffect(() => {
setPrimaryColor(currentConfig?.settings.customization.colors.primary || 'red');
setSecondaryColor(currentConfig?.settings.customization.colors.secondary || 'orange');
setPrimaryShade(currentConfig?.settings.customization.colors.shade || 6);
}, [configName]);
return (
<ConfigContext.Provider
value={{
name: configName,
config: currentConfig,
configVersion,
increaseVersion: () => setConfigVersion((v) => v + 1),
2022-12-04 17:36:30 +01:00
setConfigName: (name: string) => setConfigName(name),
}}
>
{children}
</ConfigContext.Provider>
);
};
export const useConfigContext = () => useContext(ConfigContext);