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