123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- 'use client'
- import { createContext, useContext, useContextSelector } from 'use-context-selector'
- import type { App } from '@/types/app'
- import type { UserProfileResponse } from '@/models/common'
- import { createRef, FC, PropsWithChildren } from 'react'
- export const useSelector = <T extends any>(selector: (value: AppContextValue) => T): T =>
- useContextSelector(AppContext, selector);
- export type AppContextValue = {
- apps: App[]
- mutateApps: () => void
- userProfile: UserProfileResponse
- mutateUserProfile: () => void
- pageContainerRef: React.RefObject<HTMLDivElement>,
- useSelector: typeof useSelector,
- }
- const AppContext = createContext<AppContextValue>({
- apps: [],
- mutateApps: () => { },
- userProfile: {
- id: '',
- name: '',
- email: '',
- },
- mutateUserProfile: () => { },
- pageContainerRef: createRef(),
- useSelector,
- })
- export type AppContextProviderProps = PropsWithChildren<{
- value: Omit<AppContextValue, 'useSelector'>
- }>
- export const AppContextProvider: FC<AppContextProviderProps> = ({ value, children }) => (
- <AppContext.Provider value={{ ...value, useSelector }}>
- {children}
- </AppContext.Provider>
- )
- export const useAppContext = () => useContext(AppContext)
- export default AppContext
|