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: hideFeedsPromoTab – when true, suppress the "Feeds ✨" promotional tab in HomeHeader.
6
7type StateContext = persisted.Schema['hideFeedsPromoTab']
8// Same setter signature used across other preference modules
9type SetContext = (v: persisted.Schema['hideFeedsPromoTab']) => void
10
11const stateContext = React.createContext<StateContext>(
12 persisted.defaults.hideFeedsPromoTab,
13)
14const setContext = React.createContext<SetContext>(
15 (_: persisted.Schema['hideFeedsPromoTab']) => {},
16)
17
18export function Provider({children}: React.PropsWithChildren<{}>) {
19 const [state, setState] = React.useState(persisted.get('hideFeedsPromoTab'))
20
21 const setStateWrapped = React.useCallback(
22 (value: persisted.Schema['hideFeedsPromoTab']) => {
23 setState(value)
24 persisted.write('hideFeedsPromoTab', value)
25 },
26 [setState],
27 )
28
29 React.useEffect(() => {
30 return persisted.onUpdate('hideFeedsPromoTab', next => {
31 setState(next)
32 })
33 }, [setStateWrapped])
34
35 return (
36 <stateContext.Provider value={state}>
37 <setContext.Provider value={setStateWrapped}>
38 {children}
39 </setContext.Provider>
40 </stateContext.Provider>
41 )
42}
43
44export function useHideFeedsPromoTab() {
45 return React.useContext(stateContext)
46}
47
48export function useSetHideFeedsPromoTab() {
49 return React.useContext(setContext)
50}