erp-platform/ui/src/utils/hooks/useDarkmode.ts

30 lines
926 B
TypeScript
Raw Normal View History

2025-05-06 06:45:49 +00:00
import type { Mode } from '@/@types/theme'
import { THEME_ENUM } from '@/constants/theme.constant'
import { useStoreActions, useStoreState } from '@/store'
import { useEffect } from 'react'
function useDarkMode(): [isEnabled: boolean, onModeChange: (mode: Mode) => void] {
const mode = useStoreState((state) => state.theme.mode)
const { MODE_DARK, MODE_LIGHT } = THEME_ENUM
const isEnabled = mode === MODE_DARK
const { setMode } = useStoreActions((actions) => actions.theme)
const onModeChange = (mode: Mode) => setMode(mode)
useEffect(() => {
if (window === undefined) {
return
}
const root = window.document.documentElement
root.classList.remove(isEnabled ? MODE_LIGHT : MODE_DARK)
root.classList.add(isEnabled ? MODE_DARK : MODE_LIGHT)
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [isEnabled])
return [isEnabled, onModeChange]
}
export default useDarkMode