···1+import React from 'react'
2+3+import * as persisted from '#/state/persisted'
4+5+// Preference: disableViaRepostNotification – when true, disables notifications sent when liking/reposting a post someone else reposted
6+7+type StateContext = persisted.Schema['disableViaRepostNotification']
8+// Same setter signature used across other preference modules
9+type SetContext = (v: persisted.Schema['disableViaRepostNotification']) => void
10+11+const stateContext = React.createContext<StateContext>(
12+ persisted.defaults.disableViaRepostNotification,
13+)
14+const setContext = React.createContext<SetContext>(
15+ (_: persisted.Schema['disableViaRepostNotification']) => {},
16+)
17+18+export function Provider({children}: React.PropsWithChildren<{}>) {
19+ const [state, setState] = React.useState(
20+ persisted.get('disableViaRepostNotification'),
21+ )
22+23+ const setStateWrapped = React.useCallback(
24+ (value: persisted.Schema['disableViaRepostNotification']) => {
25+ setState(value)
26+ persisted.write('disableViaRepostNotification', value)
27+ },
28+ [setState],
29+ )
30+31+ React.useEffect(() => {
32+ return persisted.onUpdate('disableViaRepostNotification', 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+46+export function useDisableViaRepostNotification() {
47+ return React.useContext(stateContext)
48+}
49+50+export function useSetDisableViaRepostNotification() {
51+ return React.useContext(setContext)
52+}
+4-1
src/state/preferences/index.tsx
···7import {Provider as DeerVerificationProvider} from './deer-verification'
8import {Provider as DirectFetchRecordsProvider} from './direct-fetch-records'
9import {Provider as DisableHapticsProvider} from './disable-haptics'
010import {Provider as ExternalEmbedsProvider} from './external-embeds-prefs'
11import {Provider as GoLinksProvider} from './go-links-enabled'
12import {Provider as HiddenPostsProvider} from './hidden-posts'
···69 <RepostCarouselProvider>
70 <KawaiiProvider>
71 <HideFeedsPromoTabProvider>
72- {children}
0073 </HideFeedsPromoTabProvider>
74 </KawaiiProvider>
75 </RepostCarouselProvider>
···7import {Provider as DeerVerificationProvider} from './deer-verification'
8import {Provider as DirectFetchRecordsProvider} from './direct-fetch-records'
9import {Provider as DisableHapticsProvider} from './disable-haptics'
10+import {Provider as DisableViaRepostNotificationProvider} from './disable-via-repost-notification'
11import {Provider as ExternalEmbedsProvider} from './external-embeds-prefs'
12import {Provider as GoLinksProvider} from './go-links-enabled'
13import {Provider as HiddenPostsProvider} from './hidden-posts'
···70 <RepostCarouselProvider>
71 <KawaiiProvider>
72 <HideFeedsPromoTabProvider>
73+ <DisableViaRepostNotificationProvider>
74+ {children}
75+ </DisableViaRepostNotificationProvider>
76 </HideFeedsPromoTabProvider>
77 </KawaiiProvider>
78 </RepostCarouselProvider>