Bluesky app fork with some witchin' additions 💫
1import {
2 createContext,
3 type PropsWithChildren,
4 useCallback,
5 useContext,
6 useEffect,
7 useState,
8} from 'react'
9
10import * as persisted from '#/state/persisted'
11
12// Preference: discoverContextEnabled – when true, shows debug context for discover feed
13
14type StateContext = persisted.Schema['discoverContextEnabled']
15// Same setter signature used across other preference modules
16type SetContext = (v: persisted.Schema['discoverContextEnabled']) => void
17
18const stateContext = createContext<StateContext>(
19 persisted.defaults.discoverContextEnabled,
20)
21const setContext = createContext<SetContext>(
22 (_: persisted.Schema['discoverContextEnabled']) => {},
23)
24
25export function Provider({children}: PropsWithChildren<{}>) {
26 const [state, setState] = useState(persisted.get('discoverContextEnabled'))
27
28 const setStateWrapped = useCallback(
29 (discoverContextEnabled: persisted.Schema['discoverContextEnabled']) => {
30 setState(discoverContextEnabled)
31 persisted.write('discoverContextEnabled', discoverContextEnabled)
32 },
33 [setState],
34 )
35
36 useEffect(() => {
37 return persisted.onUpdate(
38 'discoverContextEnabled',
39 nextDiscoverContextEnabled => {
40 setState(nextDiscoverContextEnabled)
41 },
42 )
43 }, [setStateWrapped])
44
45 return (
46 <stateContext.Provider value={state}>
47 <setContext.Provider value={setStateWrapped}>
48 {children}
49 </setContext.Provider>
50 </stateContext.Provider>
51 )
52}
53
54export function useDiscoverContextEnabled() {
55 return useContext(stateContext)
56}
57
58export function useSetDiscoverContextEnabled() {
59 return useContext(setContext)
60}