mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
1import React from 'react'
2
3import * as persisted from '#/state/persisted'
4
5type StateContext = persisted.Schema['largeAltBadgeEnabled']
6type SetContext = (v: persisted.Schema['largeAltBadgeEnabled']) => void
7
8const stateContext = React.createContext<StateContext>(
9 persisted.defaults.largeAltBadgeEnabled,
10)
11stateContext.displayName = 'LargeAltBadgeStateContext'
12const setContext = React.createContext<SetContext>(
13 (_: persisted.Schema['largeAltBadgeEnabled']) => {},
14)
15setContext.displayName = 'LargeAltBadgeSetContext'
16
17export function Provider({children}: React.PropsWithChildren<{}>) {
18 const [state, setState] = React.useState(
19 persisted.get('largeAltBadgeEnabled'),
20 )
21
22 const setStateWrapped = React.useCallback(
23 (largeAltBadgeEnabled: persisted.Schema['largeAltBadgeEnabled']) => {
24 setState(largeAltBadgeEnabled)
25 persisted.write('largeAltBadgeEnabled', largeAltBadgeEnabled)
26 },
27 [setState],
28 )
29
30 React.useEffect(() => {
31 return persisted.onUpdate(
32 'largeAltBadgeEnabled',
33 nextLargeAltBadgeEnabled => {
34 setState(nextLargeAltBadgeEnabled)
35 },
36 )
37 }, [setStateWrapped])
38
39 return (
40 <stateContext.Provider value={state}>
41 <setContext.Provider value={setStateWrapped}>
42 {children}
43 </setContext.Provider>
44 </stateContext.Provider>
45 )
46}
47
48export function useLargeAltBadgeEnabled() {
49 return React.useContext(stateContext)
50}
51
52export function useSetLargeAltBadgeEnabled() {
53 return React.useContext(setContext)
54}