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