···11+import React from 'react'
22+33+import * as persisted from '#/state/persisted'
44+55+// Preference: enableSquareAvatars – when true, disables notifications sent when liking/reposting a post someone else reposted
66+77+type StateContext = persisted.Schema['enableSquareAvatars']
88+// Same setter signature used across other preference modules
99+type SetContext = (v: persisted.Schema['enableSquareAvatars']) => void
1010+1111+const stateContext = React.createContext<StateContext>(
1212+ persisted.defaults.enableSquareAvatars,
1313+)
1414+const setContext = React.createContext<SetContext>(
1515+ (_: persisted.Schema['enableSquareAvatars']) => {},
1616+)
1717+1818+export function Provider({children}: React.PropsWithChildren<{}>) {
1919+ const [state, setState] = React.useState(persisted.get('enableSquareAvatars'))
2020+2121+ const setStateWrapped = React.useCallback(
2222+ (value: persisted.Schema['enableSquareAvatars']) => {
2323+ setState(value)
2424+ persisted.write('enableSquareAvatars', value)
2525+ },
2626+ [setState],
2727+ )
2828+2929+ React.useEffect(() => {
3030+ return persisted.onUpdate('enableSquareAvatars', next => {
3131+ setState(next)
3232+ })
3333+ }, [setStateWrapped])
3434+3535+ return (
3636+ <stateContext.Provider value={state}>
3737+ <setContext.Provider value={setStateWrapped}>
3838+ {children}
3939+ </setContext.Provider>
4040+ </stateContext.Provider>
4141+ )
4242+}
4343+4444+export function useEnableSquareAvatars() {
4545+ return React.useContext(stateContext)
4646+}
4747+4848+export function useSetEnableSquareAvatars() {
4949+ return React.useContext(setContext)
5050+}
+4-1
src/state/preferences/index.tsx
···1313import {Provider as DisableRepostsMetricsProvider} from './disable-reposts-metrics'
1414import {Provider as DisableSavesMetricsProvider} from './disable-saves-metrics'
1515import {Provider as DisableViaRepostNotificationProvider} from './disable-via-repost-notification'
1616+import {Provider as EnableSquareAvatarsProvider} from './enable-square-avatars'
1617import {Provider as ExternalEmbedsProvider} from './external-embeds-prefs'
1718import {Provider as ExternalShareButtonsProvider} from './external-share-buttons'
1819import {Provider as GoLinksProvider} from './go-links-enabled'
···8586 <DisableSavesMetricsProvider>
8687 <DisableReplyMetricsProvider>
8788 <HideSimilarAccountsRecommProvider>
8888- {children}
8989+ <EnableSquareAvatarsProvider>
9090+ {children}
9191+ </EnableSquareAvatarsProvider>
8992 </HideSimilarAccountsRecommProvider>
9093 </DisableReplyMetricsProvider>
9194 </DisableSavesMetricsProvider>