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['useInAppBrowser']
6type SetContext = (v: persisted.Schema['useInAppBrowser']) => void
7
8const stateContext = React.createContext<StateContext>(
9 persisted.defaults.useInAppBrowser,
10)
11stateContext.displayName = 'InAppBrowserStateContext'
12const setContext = React.createContext<SetContext>(
13 (_: persisted.Schema['useInAppBrowser']) => {},
14)
15setContext.displayName = 'InAppBrowserSetContext'
16
17export function Provider({children}: React.PropsWithChildren<{}>) {
18 const [state, setState] = React.useState(persisted.get('useInAppBrowser'))
19
20 const setStateWrapped = React.useCallback(
21 (inAppBrowser: persisted.Schema['useInAppBrowser']) => {
22 setState(inAppBrowser)
23 persisted.write('useInAppBrowser', inAppBrowser)
24 },
25 [setState],
26 )
27
28 React.useEffect(() => {
29 return persisted.onUpdate('useInAppBrowser', nextUseInAppBrowser => {
30 setState(nextUseInAppBrowser)
31 })
32 }, [setStateWrapped])
33
34 return (
35 <stateContext.Provider value={state}>
36 <setContext.Provider value={setStateWrapped}>
37 {children}
38 </setContext.Provider>
39 </stateContext.Provider>
40 )
41}
42
43export function useInAppBrowser() {
44 return React.useContext(stateContext)
45}
46
47export function useSetInAppBrowser() {
48 return React.useContext(setContext)
49}