forked from
jollywhoppers.com/witchsky.app
Bluesky app fork with some witchin' additions 馃挮
1import React from 'react'
2
3import * as persisted from '#/state/persisted'
4
5type StateContext = persisted.Schema['requireAltTextEnabled']
6type SetContext = (v: persisted.Schema['requireAltTextEnabled']) => void
7
8const stateContext = React.createContext<StateContext>(
9 persisted.defaults.requireAltTextEnabled,
10)
11stateContext.displayName = 'AltTextRequiredStateContext'
12const setContext = React.createContext<SetContext>(
13 (_: persisted.Schema['requireAltTextEnabled']) => {},
14)
15setContext.displayName = 'AltTextRequiredSetContext'
16
17export function Provider({children}: React.PropsWithChildren<{}>) {
18 const [state, setState] = React.useState(
19 persisted.get('requireAltTextEnabled'),
20 )
21
22 const setStateWrapped = React.useCallback(
23 (requireAltTextEnabled: persisted.Schema['requireAltTextEnabled']) => {
24 setState(requireAltTextEnabled)
25 persisted.write('requireAltTextEnabled', requireAltTextEnabled)
26 },
27 [setState],
28 )
29
30 React.useEffect(() => {
31 return persisted.onUpdate(
32 'requireAltTextEnabled',
33 nextRequireAltTextEnabled => {
34 setState(nextRequireAltTextEnabled)
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 useRequireAltTextEnabled() {
49 return React.useContext(stateContext)
50}
51
52export function useSetRequireAltTextEnabled() {
53 return React.useContext(setContext)
54}