Fix: web app theme intialization (#14761)
This commit is contained in:
@@ -1,47 +0,0 @@
|
||||
'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<SharePageContextValue>({
|
||||
theme: Theme.light,
|
||||
setTheme: () => { },
|
||||
})
|
||||
|
||||
export function useSelector<T>(selector: (value: SharePageContextValue) => T): T {
|
||||
return useContextSelector(SharePageContext, selector)
|
||||
}
|
||||
|
||||
export type SharePageContextProviderProps = {
|
||||
children: ReactNode
|
||||
}
|
||||
|
||||
export const SharePageContextProvider: FC<SharePageContextProviderProps> = ({ children }) => {
|
||||
const [theme, setTheme] = useState<Theme>(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 (
|
||||
<SharePageContext.Provider value={{
|
||||
theme,
|
||||
setTheme: handleSetTheme,
|
||||
}}>
|
||||
{children}
|
||||
</SharePageContext.Provider>
|
||||
)
|
||||
}
|
||||
|
||||
export default SharePageContextProvider
|
Reference in New Issue
Block a user