mirror of
https://github.com/SigNoz/signoz.git
synced 2025-12-18 16:07:10 +00:00
* chore: added jsx-runtime plugin in eslint tsconfig Signed-off-by: GermaVinsmoke <vaibhav1180@gmail.com> * chore: updated react imports Signed-off-by: GermaVinsmoke <vaibhav1180@gmail.com> * chore: renamed redux dispatch Signed-off-by: GermaVinsmoke <vaibhav1180@gmail.com> * fix: build is fixed --------- Signed-off-by: GermaVinsmoke <vaibhav1180@gmail.com> Co-authored-by: Palash Gupta <palashgdev@gmail.com>
82 lines
1.8 KiB
TypeScript
82 lines
1.8 KiB
TypeScript
import { theme as antdTheme } from 'antd';
|
|
import { ThemeConfig } from 'antd/es/config-provider/context';
|
|
import get from 'api/browser/localstorage/get';
|
|
import set from 'api/browser/localstorage/set';
|
|
import { LOCALSTORAGE } from 'constants/localStorage';
|
|
import {
|
|
createContext,
|
|
ReactNode,
|
|
useCallback,
|
|
useContext,
|
|
useMemo,
|
|
useState,
|
|
} from 'react';
|
|
|
|
import { THEME_MODE } from './constant';
|
|
|
|
export const ThemeContext = createContext({
|
|
theme: THEME_MODE.DARK,
|
|
toggleTheme: () => {},
|
|
});
|
|
|
|
export function ThemeProvider({ children }: ThemeProviderProps): JSX.Element {
|
|
const [theme, setTheme] = useState(get(LOCALSTORAGE.THEME) || THEME_MODE.DARK);
|
|
|
|
const toggleTheme = useCallback(() => {
|
|
if (theme === THEME_MODE.LIGHT) {
|
|
setTheme(THEME_MODE.DARK);
|
|
set(LOCALSTORAGE.THEME, THEME_MODE.DARK);
|
|
} else {
|
|
setTheme(THEME_MODE.LIGHT);
|
|
set(LOCALSTORAGE.THEME, THEME_MODE.LIGHT);
|
|
}
|
|
}, [theme]);
|
|
|
|
const value = useMemo(
|
|
() => ({
|
|
theme,
|
|
toggleTheme,
|
|
}),
|
|
[theme, toggleTheme],
|
|
);
|
|
|
|
return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;
|
|
}
|
|
|
|
interface ThemeProviderProps {
|
|
children: ReactNode;
|
|
}
|
|
|
|
interface ThemeMode {
|
|
theme: string;
|
|
toggleTheme: () => void;
|
|
}
|
|
|
|
export const useThemeMode = (): ThemeMode => {
|
|
const { theme, toggleTheme } = useContext(ThemeContext);
|
|
|
|
return { theme, toggleTheme };
|
|
};
|
|
|
|
export const useIsDarkMode = (): boolean => {
|
|
const { theme } = useContext(ThemeContext);
|
|
|
|
return theme === THEME_MODE.DARK;
|
|
};
|
|
|
|
export const useThemeConfig = (): ThemeConfig => {
|
|
const isDarkMode = useIsDarkMode();
|
|
|
|
return {
|
|
algorithm: isDarkMode ? antdTheme.darkAlgorithm : antdTheme.defaultAlgorithm,
|
|
token: {
|
|
borderRadius: 2,
|
|
borderRadiusLG: 2,
|
|
borderRadiusSM: 2,
|
|
borderRadiusXS: 2,
|
|
},
|
|
};
|
|
};
|
|
|
|
export default useThemeMode;
|