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)
11const setContext = React.createContext<SetContext>(
12 (_: persisted.Schema['largeAltBadgeEnabled']) => {},
13)
14
15export function Provider({children}: React.PropsWithChildren<{}>) {
16 const [state, setState] = React.useState(
17 persisted.get('largeAltBadgeEnabled'),
18 )
19
20 const setStateWrapped = React.useCallback(
21 (largeAltBadgeEnabled: persisted.Schema['largeAltBadgeEnabled']) => {
22 setState(largeAltBadgeEnabled)
23 persisted.write('largeAltBadgeEnabled', largeAltBadgeEnabled)
24 },
25 [setState],
26 )
27
28 React.useEffect(() => {
29 return persisted.onUpdate(
30 'largeAltBadgeEnabled',
31 nextLargeAltBadgeEnabled => {
32 setState(nextLargeAltBadgeEnabled)
33 },
34 )
35 }, [setStateWrapped])
36
37 return (
38 <stateContext.Provider value={state}>
39 <setContext.Provider value={setStateWrapped}>
40 {children}
41 </setContext.Provider>
42 </stateContext.Provider>
43 )
44}
45
46export function useLargeAltBadgeEnabled() {
47 return React.useContext(stateContext)
48}
49
50export function useSetLargeAltBadgeEnabled() {
51 return React.useContext(setContext)
52}