'use client' import { useCallback, useEffect, useState } from 'react' import { createContext, useContextSelector } from 'use-context-selector' import type { FC, ReactNode } from 'react' import { Theme } from '@/types/app' export type SharePageContextValue = { theme: Theme setTheme: (theme: Theme) => void } const SharePageContext = createContext({ theme: Theme.light, setTheme: () => { }, }) export function useSelector(selector: (value: SharePageContextValue) => T): T { return useContextSelector(SharePageContext, selector) } export type SharePageContextProviderProps = { children: ReactNode } export const SharePageContextProvider: FC = ({ children }) => { const [theme, setTheme] = useState(Theme.light) const handleSetTheme = useCallback((theme: Theme) => { setTheme(theme) globalThis.document.documentElement.setAttribute('data-theme', theme) }, []) useEffect(() => { globalThis.document.documentElement.setAttribute('data-theme', theme) // eslint-disable-next-line react-hooks/exhaustive-deps }, []) return ( {children} ) } export default SharePageContextProvider