diff --git a/src/components/ProfileHoverCard/index.web.tsx b/src/components/ProfileHoverCard/index.web.tsx index 2a5664543..af5d258b4 100644 --- a/src/components/ProfileHoverCard/index.web.tsx +++ b/src/components/ProfileHoverCard/index.web.tsx @@ -1,4 +1,4 @@ -import {memo, useCallback, useEffect, useMemo, useReducer, useRef} from 'react' +import {memo, useEffect, useMemo, useReducer, useRef} from 'react' import {View} from 'react-native' import { type AppBskyActorDefs, @@ -275,15 +275,15 @@ export function ProfileHoverCardInner(props: ProfileHoverCardProps) { const prefetchProfileQuery = usePrefetchProfileQuery() const prefetchedProfile = useRef(false) - const prefetchIfNeeded = useCallback(async () => { + const prefetchIfNeeded = async () => { if (!prefetchedProfile.current) { prefetchedProfile.current = true prefetchProfileQuery(props.did) } - }, [prefetchProfileQuery, props.did]) + } const didFireHover = useRef(false) - const onPointerMoveTarget = useCallback(() => { + const onPointerMoveTarget = () => { prefetchIfNeeded() // Conceptually we want something like onPointerEnter, // but we want to ignore entering only due to scrolling. @@ -292,24 +292,24 @@ export function ProfileHoverCardInner(props: ProfileHoverCardProps) { didFireHover.current = true dispatch('hovered-target') } - }, [prefetchIfNeeded]) + } - const onPointerLeaveTarget = useCallback(() => { + const onPointerLeaveTarget = () => { didFireHover.current = false dispatch('unhovered-target') - }, []) + } - const onPointerEnterCard = useCallback(() => { + const onPointerEnterCard = () => { dispatch('hovered-card') - }, []) + } - const onPointerLeaveCard = useCallback(() => { + const onPointerLeaveCard = () => { dispatch('unhovered-card') - }, []) + } - const onPress = useCallback(() => { + const onPress = () => { dispatch('pressed') - }, []) + } const isVisible = currentState.stage === 'showing' || @@ -368,13 +368,13 @@ let Card = ({ const status = useActorStatus(data) - const onPressOpenProfile = useCallback(() => { + const onPressOpenProfile = () => { if (!status.isActive || !data) return hide() navigation.push('Profile', { name: data.handle, }) - }, [hide, navigation, status, data]) + } return ( m.value === tag && m.targets.includes('tag'), )) && - !optimisticRemove?.find(m => m?.value === tag), + !optimisticRemove?.find(m => m?.value === tag), ) /* * Mute word records that exactly match the tag in question. */ - const removeableMuteWords = useMemo(() => { - return ( - preferences?.moderationPrefs.mutedWords?.filter(word => { - return word.value === tag - }) || [] - ) - }, [tag, preferences?.moderationPrefs?.mutedWords]) + const removeableMuteWords = + preferences?.moderationPrefs.mutedWords?.filter(word => { + return word.value === tag + }) || [] return ( diff --git a/src/components/dialogs/PostInteractionSettingsDialog.tsx b/src/components/dialogs/PostInteractionSettingsDialog.tsx index 8a5c7101c..420aae8b2 100644 --- a/src/components/dialogs/PostInteractionSettingsDialog.tsx +++ b/src/components/dialogs/PostInteractionSettingsDialog.tsx @@ -352,7 +352,7 @@ export function PostInteractionSettingsForm({ v => v.type === 'list', ).length - const toggleGroupValues = useMemo(() => { + const toggleGroupValues = (() => { const values: string[] = [] for (const setting of threadgateAllowUISettings) { switch (setting.type) { @@ -377,7 +377,7 @@ export function PostInteractionSettingsForm({ } } return values - }, [threadgateAllowUISettings]) + })() const toggleGroupOnChange = (values: string[]) => { const settings: ThreadgateAllowUISetting[] = [] diff --git a/src/components/forms/TextField.tsx b/src/components/forms/TextField.tsx index a4cb879f3..58038f178 100644 --- a/src/components/forms/TextField.tsx +++ b/src/components/forms/TextField.tsx @@ -1,4 +1,15 @@ -import React, {createContext, useContext, useMemo, useRef} from 'react' +import { + Children, + type ComponentType, + createContext, + type ForwardedRef, + isValidElement, + type PropsWithChildren, + type RefObject, + useContext, + useMemo, + useRef, +} from 'react' import { type AccessibilityProps, StyleSheet, @@ -29,7 +40,7 @@ import {Text} from '#/components/Typography' import {IS_WEB} from '#/env' const Context = createContext<{ - inputRef: React.RefObject | null + inputRef: RefObject | null isInvalid: boolean hovered: boolean onHoverIn: () => void @@ -49,9 +60,7 @@ const Context = createContext<{ }) Context.displayName = 'TextFieldContext' -export type RootProps = React.PropsWithChildren< - {isInvalid?: boolean} & TextStyleProp -> +export type RootProps = PropsWithChildren<{isInvalid?: boolean} & TextStyleProp> export function Root({children, isInvalid = false, style}: RootProps) { const inputRef = useRef(null) @@ -88,9 +97,9 @@ export function Root({children, isInvalid = false, style}: RootProps) { // Check if any child has multiline prop const hasMultiline = useMemo(() => { let found = false - React.Children.forEach(children, child => { + Children.forEach(children, child => { if ( - React.isValidElement(child) && + isValidElement(child) && (child.props as {multiline?: boolean})?.multiline ) { found = true @@ -172,7 +181,7 @@ export type InputProps = Omit< value?: string onChangeText?: (value: string) => void isInvalid?: boolean - inputRef?: React.RefObject | React.ForwardedRef + inputRef?: RefObject | ForwardedRef /** * Note: this currently falls back to the label if not specified. However, * most new designs have no placeholder. We should eventually remove this fallback @@ -324,7 +333,7 @@ export const Input = createInput(TextInput) export function LabelText({ nativeID, children, -}: React.PropsWithChildren<{nativeID?: string}>) { +}: PropsWithChildren<{nativeID?: string}>) { const t = useTheme() return ( }) { +export function Icon({icon: Comp}: {icon: ComponentType}) { const t = useTheme() const ctx = useContext(Context) const {hover, focus, errorHover, errorFocus} = useMemo(() => { @@ -389,7 +398,7 @@ export function SuffixText({ label, accessibilityHint, style, -}: React.PropsWithChildren< +}: PropsWithChildren< TextStyleProp & { label: string accessibilityHint?: AccessibilityProps['accessibilityHint'] diff --git a/src/components/moderation/ContentHider.tsx b/src/components/moderation/ContentHider.tsx index b05be6629..a604f04b1 100644 --- a/src/components/moderation/ContentHider.tsx +++ b/src/components/moderation/ContentHider.tsx @@ -1,4 +1,4 @@ -import {useMemo, useState} from 'react' +import {useState} from 'react' import { LayoutAnimation, type StyleProp, @@ -88,7 +88,7 @@ function ContentHiderActive({ const blur = modui?.blurs[0] const desc = useModerationCauseDescription(blur) - const labelName = useMemo(() => { + const labelName = (() => { if (!modui?.blurs || !blur) { return undefined } @@ -137,16 +137,7 @@ function ContentHiderActive({ return desc.name } return [...new Set(selfBlurNames)].join(', ') - }, [ - _, - modui?.blurs, - blur, - desc.name, - desc.isSubjectAccount, - labelDefs, - i18n.locale, - globalLabelStrings, - ]) + })() return ( diff --git a/src/screens/Login/index.tsx b/src/screens/Login/index.tsx index 16049a6c4..eda46503d 100644 --- a/src/screens/Login/index.tsx +++ b/src/screens/Login/index.tsx @@ -23,7 +23,6 @@ import {SetNewPasswordForm} from '#/screens/Login/SetNewPasswordForm' import {atoms as a, native} from '#/alf' import {ScreenTransition} from '#/components/ScreenTransition' import {useAnalytics} from '#/analytics' -import {IS_WEB} from '#/env' import {ChooseAccountForm} from './ChooseAccountForm' import * as AuthLayout from './components/AuthLayout' import {AuthLayoutNavigationContext} from './components/AuthLayout/context' diff --git a/src/screens/PostThread/index.tsx b/src/screens/PostThread/index.tsx index dfd01e744..954d9e836 100644 --- a/src/screens/PostThread/index.tsx +++ b/src/screens/PostThread/index.tsx @@ -73,7 +73,7 @@ export function PostThread({uri}: {uri: string}) { * One query to rule them all */ const thread = usePostThread({anchor: uri}) - const {anchor, hasParents} = useMemo(() => { + const {anchor, hasParents} = (() => { let hasParents = false for (const item of thread.data.items) { if (item.type === 'threadPost' && item.depth === 0) { @@ -82,7 +82,7 @@ export function PostThread({uri}: {uri: string}) { hasParents = true } return {hasParents} - }, [thread.data.items]) + })() // Track post:view event when anchor post is viewed const seenPostUriRef = useRef(null) diff --git a/src/state/gallery.ts b/src/state/gallery.ts index bdc9d78b7..fcf8cc2b7 100644 --- a/src/state/gallery.ts +++ b/src/state/gallery.ts @@ -13,7 +13,7 @@ import { } from 'expo-image-manipulator' import {type BlobRef} from '@atproto/api' import {transformExif} from '@uwx/exif-be-gone-web' -import {toByteArray, fromByteArray} from 'base64-js' +import {fromByteArray, toByteArray} from 'base64-js' import {nanoid} from 'nanoid/non-secure' import {POST_IMG_MAX} from '#/lib/constants' @@ -437,8 +437,13 @@ function blobToDataUri(blob: Blob): Promise { }) } -function arrayBufferToDataUri(buffer: Uint8Array | ArrayBufferLike, mime: string): string { - const base64 = fromByteArray(buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer)) +function arrayBufferToDataUri( + buffer: Uint8Array | ArrayBufferLike, + mime: string, +): string { + const base64 = fromByteArray( + buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer), + ) return `data:${mime};base64,${base64}` } diff --git a/src/state/preferences/alt-text-required.tsx b/src/state/preferences/alt-text-required.tsx index 91cdacb90..855b23caf 100644 --- a/src/state/preferences/alt-text-required.tsx +++ b/src/state/preferences/alt-text-required.tsx @@ -5,6 +5,7 @@ import { useEffect, useState, } from 'react' +import type {PropsWithChildren} from 'react' import * as persisted from '#/state/persisted' @@ -20,7 +21,7 @@ const setContext = createContext( ) setContext.displayName = 'AltTextRequiredSetContext' -export function Provider({children}: React.PropsWithChildren<{}>) { +export function Provider({children}: PropsWithChildren<{}>) { const [state, setState] = useState(persisted.get('requireAltTextEnabled')) const setStateWrapped = useCallback( diff --git a/src/state/preferences/auto-like-on-repost.tsx b/src/state/preferences/auto-like-on-repost.tsx index c19c542c7..559831c3e 100644 --- a/src/state/preferences/auto-like-on-repost.tsx +++ b/src/state/preferences/auto-like-on-repost.tsx @@ -5,6 +5,7 @@ import { useEffect, useState, } from 'react' +import type {PropsWithChildren} from 'react' import * as persisted from '#/state/persisted' @@ -20,7 +21,7 @@ const setContext = createContext( ) setContext.displayName = 'AutoLikeOnRepostStateContext' -export function Provider({children}: React.PropsWithChildren<{}>) { +export function Provider({children}: PropsWithChildren<{}>) { const [state, setState] = useState(persisted.get('autoLikeOnRepost')) const setStateWrapped = useCallback( diff --git a/src/state/preferences/autoplay.tsx b/src/state/preferences/autoplay.tsx index ec5e8153f..41777c276 100644 --- a/src/state/preferences/autoplay.tsx +++ b/src/state/preferences/autoplay.tsx @@ -5,6 +5,7 @@ import { useEffect, useState, } from 'react' +import type {PropsWithChildren} from 'react' import * as persisted from '#/state/persisted' @@ -18,7 +19,7 @@ stateContext.displayName = 'AutoplayStateContext' const setContext = createContext((_: boolean) => {}) setContext.displayName = 'AutoplaySetContext' -export function Provider({children}: {children: React.ReactNode}) { +export function Provider({children}: PropsWithChildren<{}>) { const [state, setState] = useState(Boolean(persisted.get('disableAutoplay'))) const setStateWrapped = useCallback( diff --git a/src/state/preferences/constellation-enabled.tsx b/src/state/preferences/constellation-enabled.tsx index 6e2fb992c..ade4e17cd 100644 --- a/src/state/preferences/constellation-enabled.tsx +++ b/src/state/preferences/constellation-enabled.tsx @@ -1,23 +1,28 @@ -import React from 'react' +import { + createContext, + useCallback, + useContext, + useEffect, + useState, +} from 'react' +import type {PropsWithChildren} from 'react' import * as persisted from '#/state/persisted' type StateContext = persisted.Schema['constellationEnabled'] type SetContext = (v: persisted.Schema['constellationEnabled']) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.constellationEnabled, ) -const setContext = React.createContext( +const setContext = createContext( (_: persisted.Schema['constellationEnabled']) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState( - persisted.get('constellationEnabled'), - ) +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState(persisted.get('constellationEnabled')) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( (constellationEnabled: persisted.Schema['constellationEnabled']) => { setState(constellationEnabled) persisted.write('constellationEnabled', constellationEnabled) @@ -25,7 +30,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate( 'constellationEnabled', nextConstellationEnabled => { @@ -44,9 +49,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function useConstellationEnabled() { - return React.useContext(stateContext) + return useContext(stateContext) } export function useSetConstellationEnabled() { - return React.useContext(setContext) + return useContext(setContext) } diff --git a/src/state/preferences/constellation-instance.tsx b/src/state/preferences/constellation-instance.tsx index a8bfef986..de07e2435 100644 --- a/src/state/preferences/constellation-instance.tsx +++ b/src/state/preferences/constellation-instance.tsx @@ -1,23 +1,28 @@ -import React from 'react' +import { + createContext, + useCallback, + useContext, + useEffect, + useState, +} from 'react' +import type {PropsWithChildren} from 'react' import * as persisted from '#/state/persisted' type StateContext = persisted.Schema['constellationInstance'] type SetContext = (v: persisted.Schema['constellationInstance']) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.constellationInstance, ) -const setContext = React.createContext( +const setContext = createContext( (_: persisted.Schema['constellationInstance']) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState( - persisted.get('constellationInstance'), - ) +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState(persisted.get('constellationInstance')) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( (constellationInstance: persisted.Schema['constellationInstance']) => { setState(constellationInstance) persisted.write('constellationInstance', constellationInstance) @@ -25,7 +30,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate( 'constellationInstance', nextConstellationInstance => { @@ -44,11 +49,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function useConstellationInstance() { - return ( - React.useContext(stateContext) ?? persisted.defaults.constellationInstance! - ) + return useContext(stateContext) ?? persisted.defaults.constellationInstance! } export function useSetConstellationInstance() { - return React.useContext(setContext) + return useContext(setContext) } diff --git a/src/state/preferences/custom-appview-did.tsx b/src/state/preferences/custom-appview-did.tsx index 470941658..5da1ee85d 100644 --- a/src/state/preferences/custom-appview-did.tsx +++ b/src/state/preferences/custom-appview-did.tsx @@ -1,4 +1,4 @@ -import React from 'react' +import {useCallback} from 'react' import {reloadAppAsync} from 'expo' import {isDid} from '@atproto/api' @@ -17,7 +17,7 @@ export function useCustomAppViewDid() { export function useSetCustomAppViewDid() { const [, setCustomAppViewDid] = useCustomAppViewDid() - return React.useCallback( + return useCallback( (customAppViewDid: string | undefined) => { setCustomAppViewDid(customAppViewDid) diff --git a/src/state/preferences/deer-verification.tsx b/src/state/preferences/deer-verification.tsx index 7251bae18..196b1565f 100644 --- a/src/state/preferences/deer-verification.tsx +++ b/src/state/preferences/deer-verification.tsx @@ -1,21 +1,29 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useMemo, + useState, +} from 'react' import * as persisted from '#/state/persisted' type StateContext = persisted.Schema['deerVerification'] type SetContext = (v: persisted.Schema['deerVerification']) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.deerVerification, ) -const setContext = React.createContext( +const setContext = createContext( (_: persisted.Schema['deerVerification']) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState(persisted.get('deerVerification')) +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState(persisted.get('deerVerification')) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( (deerVerification: persisted.Schema['deerVerification']) => { setState(deerVerification) persisted.write('deerVerification', deerVerification) @@ -23,7 +31,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate('deerVerification', nextDeerVerification => { setState(nextDeerVerification) }) @@ -39,7 +47,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function useDeerVerification() { - return React.useContext(stateContext) ?? persisted.defaults.deerVerification! + return useContext(stateContext) ?? persisted.defaults.deerVerification! } export function useDeerVerificationEnabled() { @@ -57,14 +65,14 @@ export function useDeerVerificationTrusted( } export function useSetDeerVerification() { - return React.useContext(setContext) + return useContext(setContext) } export function useSetDeerVerificationEnabled() { const deerVerification = useDeerVerification() const setDeerVerification = useSetDeerVerification() - return React.useMemo( + return useMemo( () => (enabled: boolean) => setDeerVerification({...deerVerification, enabled}), [deerVerification, setDeerVerification], @@ -75,7 +83,7 @@ export function useSetDeerVerificationTrust() { const deerVerification = useDeerVerification() const setDeerVerification = useSetDeerVerification() - return React.useMemo( + return useMemo( () => ({ add: (add: string) => { const trusted = new Set(deerVerification.trusted) diff --git a/src/state/preferences/direct-fetch-records.tsx b/src/state/preferences/direct-fetch-records.tsx index 72e515ea2..fa515c280 100644 --- a/src/state/preferences/direct-fetch-records.tsx +++ b/src/state/preferences/direct-fetch-records.tsx @@ -1,21 +1,28 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useState, +} from 'react' import * as persisted from '#/state/persisted' type StateContext = persisted.Schema['directFetchRecords'] type SetContext = (v: persisted.Schema['directFetchRecords']) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.directFetchRecords, ) -const setContext = React.createContext( +const setContext = createContext( (_: persisted.Schema['directFetchRecords']) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState(persisted.get('directFetchRecords')) +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState(persisted.get('directFetchRecords')) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( (directFetchRecords: persisted.Schema['directFetchRecords']) => { setState(directFetchRecords) persisted.write('directFetchRecords', directFetchRecords) @@ -23,7 +30,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate('directFetchRecords', nextDirectFetchRecords => { setState(nextDirectFetchRecords) }) @@ -39,9 +46,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function useDirectFetchRecords() { - return React.useContext(stateContext) + return useContext(stateContext) } export function useSetDirectFetchRecords() { - return React.useContext(setContext) + return useContext(setContext) } diff --git a/src/state/preferences/disable-composer-prompt.tsx b/src/state/preferences/disable-composer-prompt.tsx index a65065db3..ae7c6e002 100644 --- a/src/state/preferences/disable-composer-prompt.tsx +++ b/src/state/preferences/disable-composer-prompt.tsx @@ -1,4 +1,11 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useState, +} from 'react' import * as persisted from '#/state/persisted' @@ -8,19 +15,17 @@ type StateContext = persisted.Schema['disableComposerPrompt'] // Same setter signature used across other preference modules type SetContext = (v: persisted.Schema['disableComposerPrompt']) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.disableComposerPrompt, ) -const setContext = React.createContext( +const setContext = createContext( (_: persisted.Schema['disableComposerPrompt']) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState( - persisted.get('disableComposerPrompt'), - ) +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState(persisted.get('disableComposerPrompt')) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( (disableComposerPrompt: persisted.Schema['disableComposerPrompt']) => { setState(disableComposerPrompt) persisted.write('disableComposerPrompt', disableComposerPrompt) @@ -28,7 +33,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate( 'disableComposerPrompt', nextDisableComposerPrompt => { @@ -47,9 +52,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function useDisableComposerPrompt() { - return React.useContext(stateContext) + return useContext(stateContext) } export function useSetDisableComposerPrompt() { - return React.useContext(setContext) + return useContext(setContext) } diff --git a/src/state/preferences/disable-followed-by-metrics.tsx b/src/state/preferences/disable-followed-by-metrics.tsx index be1f7e442..0d18a9187 100644 --- a/src/state/preferences/disable-followed-by-metrics.tsx +++ b/src/state/preferences/disable-followed-by-metrics.tsx @@ -1,4 +1,11 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useState, +} from 'react' import * as persisted from '#/state/persisted' @@ -8,19 +15,17 @@ type StateContext = persisted.Schema['disableFollowedByMetrics'] // Same setter signature used across other preference modules type SetContext = (v: persisted.Schema['disableFollowedByMetrics']) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.disableFollowedByMetrics, ) -const setContext = React.createContext( +const setContext = createContext( (_: persisted.Schema['disableFollowedByMetrics']) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState( - persisted.get('disableFollowedByMetrics'), - ) +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState(persisted.get('disableFollowedByMetrics')) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( (value: persisted.Schema['disableFollowedByMetrics']) => { setState(value) persisted.write('disableFollowedByMetrics', value) @@ -28,7 +33,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate('disableFollowedByMetrics', next => { setState(next) }) @@ -44,9 +49,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function useDisableFollowedByMetrics() { - return React.useContext(stateContext) + return useContext(stateContext) } export function useSetDisableFollowedByMetrics() { - return React.useContext(setContext) + return useContext(setContext) } diff --git a/src/state/preferences/disable-followers-metrics.tsx b/src/state/preferences/disable-followers-metrics.tsx index 0c7f36998..7c74a606f 100644 --- a/src/state/preferences/disable-followers-metrics.tsx +++ b/src/state/preferences/disable-followers-metrics.tsx @@ -1,4 +1,11 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useState, +} from 'react' import * as persisted from '#/state/persisted' @@ -8,19 +15,17 @@ type StateContext = persisted.Schema['disableFollowersMetrics'] // Same setter signature used across other preference modules type SetContext = (v: persisted.Schema['disableFollowersMetrics']) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.disableFollowersMetrics, ) -const setContext = React.createContext( +const setContext = createContext( (_: persisted.Schema['disableFollowersMetrics']) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState( - persisted.get('disableFollowersMetrics'), - ) +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState(persisted.get('disableFollowersMetrics')) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( (value: persisted.Schema['disableFollowersMetrics']) => { setState(value) persisted.write('disableFollowersMetrics', value) @@ -28,7 +33,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate('disableFollowersMetrics', next => { setState(next) }) @@ -44,9 +49,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function useDisableFollowersMetrics() { - return React.useContext(stateContext) + return useContext(stateContext) } export function useSetDisableFollowersMetrics() { - return React.useContext(setContext) + return useContext(setContext) } diff --git a/src/state/preferences/disable-following-metrics.tsx b/src/state/preferences/disable-following-metrics.tsx index e4da9d4fb..019b6317a 100644 --- a/src/state/preferences/disable-following-metrics.tsx +++ b/src/state/preferences/disable-following-metrics.tsx @@ -1,4 +1,11 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useState, +} from 'react' import * as persisted from '#/state/persisted' @@ -8,19 +15,17 @@ type StateContext = persisted.Schema['disableFollowingMetrics'] // Same setter signature used across other preference modules type SetContext = (v: persisted.Schema['disableFollowingMetrics']) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.disableFollowingMetrics, ) -const setContext = React.createContext( +const setContext = createContext( (_: persisted.Schema['disableFollowingMetrics']) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState( - persisted.get('disableFollowingMetrics'), - ) +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState(persisted.get('disableFollowingMetrics')) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( (value: persisted.Schema['disableFollowingMetrics']) => { setState(value) persisted.write('disableFollowingMetrics', value) @@ -28,7 +33,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate('disableFollowingMetrics', next => { setState(next) }) @@ -44,9 +49,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function useDisableFollowingMetrics() { - return React.useContext(stateContext) + return useContext(stateContext) } export function useSetDisableFollowingMetrics() { - return React.useContext(setContext) + return useContext(setContext) } diff --git a/src/state/preferences/disable-haptics.tsx b/src/state/preferences/disable-haptics.tsx index bc67c95a6..6d14b514c 100644 --- a/src/state/preferences/disable-haptics.tsx +++ b/src/state/preferences/disable-haptics.tsx @@ -5,6 +5,7 @@ import { useEffect, useState, } from 'react' +import type {PropsWithChildren} from 'react' import * as persisted from '#/state/persisted' @@ -18,7 +19,7 @@ stateContext.displayName = 'DisableHapticsStateContext' const setContext = createContext((_: boolean) => {}) setContext.displayName = 'DisableHapticsSetContext' -export function Provider({children}: {children: React.ReactNode}) { +export function Provider({children}: PropsWithChildren<{}>) { const [state, setState] = useState(Boolean(persisted.get('disableHaptics'))) const setStateWrapped = useCallback( diff --git a/src/state/preferences/disable-likes-metrics.tsx b/src/state/preferences/disable-likes-metrics.tsx index 320416c0c..91bf52d21 100644 --- a/src/state/preferences/disable-likes-metrics.tsx +++ b/src/state/preferences/disable-likes-metrics.tsx @@ -1,4 +1,11 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useState, +} from 'react' import * as persisted from '#/state/persisted' @@ -8,17 +15,17 @@ type StateContext = persisted.Schema['disableLikesMetrics'] // Same setter signature used across other preference modules type SetContext = (v: persisted.Schema['disableLikesMetrics']) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.disableLikesMetrics, ) -const setContext = React.createContext( +const setContext = createContext( (_: persisted.Schema['disableLikesMetrics']) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState(persisted.get('disableLikesMetrics')) +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState(persisted.get('disableLikesMetrics')) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( (value: persisted.Schema['disableLikesMetrics']) => { setState(value) persisted.write('disableLikesMetrics', value) @@ -26,7 +33,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate('disableLikesMetrics', next => { setState(next) }) @@ -42,9 +49,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function useDisableLikesMetrics() { - return React.useContext(stateContext) + return useContext(stateContext) } export function useSetDisableLikesMetrics() { - return React.useContext(setContext) + return useContext(setContext) } diff --git a/src/state/preferences/disable-posts-metrics.tsx b/src/state/preferences/disable-posts-metrics.tsx index e4bd0b178..b7b3137b7 100644 --- a/src/state/preferences/disable-posts-metrics.tsx +++ b/src/state/preferences/disable-posts-metrics.tsx @@ -1,4 +1,11 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useState, +} from 'react' import * as persisted from '#/state/persisted' @@ -8,17 +15,17 @@ type StateContext = persisted.Schema['disablePostsMetrics'] // Same setter signature used across other preference modules type SetContext = (v: persisted.Schema['disablePostsMetrics']) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.disablePostsMetrics, ) -const setContext = React.createContext( +const setContext = createContext( (_: persisted.Schema['disablePostsMetrics']) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState(persisted.get('disablePostsMetrics')) +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState(persisted.get('disablePostsMetrics')) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( (value: persisted.Schema['disablePostsMetrics']) => { setState(value) persisted.write('disablePostsMetrics', value) @@ -26,7 +33,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate('disablePostsMetrics', next => { setState(next) }) @@ -42,9 +49,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function useDisablePostsMetrics() { - return React.useContext(stateContext) + return useContext(stateContext) } export function useSetDisablePostsMetrics() { - return React.useContext(setContext) + return useContext(setContext) } diff --git a/src/state/preferences/disable-quotes-metrics.tsx b/src/state/preferences/disable-quotes-metrics.tsx index e1025dc4a..05e9d5707 100644 --- a/src/state/preferences/disable-quotes-metrics.tsx +++ b/src/state/preferences/disable-quotes-metrics.tsx @@ -1,4 +1,11 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useState, +} from 'react' import * as persisted from '#/state/persisted' @@ -8,19 +15,17 @@ type StateContext = persisted.Schema['disableQuotesMetrics'] // Same setter signature used across other preference modules type SetContext = (v: persisted.Schema['disableQuotesMetrics']) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.disableQuotesMetrics, ) -const setContext = React.createContext( +const setContext = createContext( (_: persisted.Schema['disableQuotesMetrics']) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState( - persisted.get('disableQuotesMetrics'), - ) +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState(persisted.get('disableQuotesMetrics')) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( (value: persisted.Schema['disableQuotesMetrics']) => { setState(value) persisted.write('disableQuotesMetrics', value) @@ -28,7 +33,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate('disableQuotesMetrics', next => { setState(next) }) @@ -44,9 +49,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function useDisableQuotesMetrics() { - return React.useContext(stateContext) + return useContext(stateContext) } export function useSetDisableQuotesMetrics() { - return React.useContext(setContext) + return useContext(setContext) } diff --git a/src/state/preferences/disable-reply-metrics.tsx b/src/state/preferences/disable-reply-metrics.tsx index 5ca7d2af6..4ae9f31b9 100644 --- a/src/state/preferences/disable-reply-metrics.tsx +++ b/src/state/preferences/disable-reply-metrics.tsx @@ -1,4 +1,11 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useState, +} from 'react' import * as persisted from '#/state/persisted' @@ -8,17 +15,17 @@ type StateContext = persisted.Schema['disableReplyMetrics'] // Same setter signature used across other preference modules type SetContext = (v: persisted.Schema['disableReplyMetrics']) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.disableReplyMetrics, ) -const setContext = React.createContext( +const setContext = createContext( (_: persisted.Schema['disableReplyMetrics']) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState(persisted.get('disableReplyMetrics')) +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState(persisted.get('disableReplyMetrics')) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( (value: persisted.Schema['disableReplyMetrics']) => { setState(value) persisted.write('disableReplyMetrics', value) @@ -26,7 +33,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate('disableReplyMetrics', next => { setState(next) }) @@ -42,9 +49,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function useDisableReplyMetrics() { - return React.useContext(stateContext) + return useContext(stateContext) } export function useSetDisableReplyMetrics() { - return React.useContext(setContext) + return useContext(setContext) } diff --git a/src/state/preferences/disable-reposts-metrics.tsx b/src/state/preferences/disable-reposts-metrics.tsx index 823ab884a..ca5132dd9 100644 --- a/src/state/preferences/disable-reposts-metrics.tsx +++ b/src/state/preferences/disable-reposts-metrics.tsx @@ -1,4 +1,11 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useState, +} from 'react' import * as persisted from '#/state/persisted' @@ -8,19 +15,17 @@ type StateContext = persisted.Schema['disableRepostsMetrics'] // Same setter signature used across other preference modules type SetContext = (v: persisted.Schema['disableRepostsMetrics']) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.disableRepostsMetrics, ) -const setContext = React.createContext( +const setContext = createContext( (_: persisted.Schema['disableRepostsMetrics']) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState( - persisted.get('disableRepostsMetrics'), - ) +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState(persisted.get('disableRepostsMetrics')) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( (value: persisted.Schema['disableRepostsMetrics']) => { setState(value) persisted.write('disableRepostsMetrics', value) @@ -28,7 +33,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate('disableRepostsMetrics', next => { setState(next) }) @@ -44,9 +49,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function useDisableRepostsMetrics() { - return React.useContext(stateContext) + return useContext(stateContext) } export function useSetDisableRepostsMetrics() { - return React.useContext(setContext) + return useContext(setContext) } diff --git a/src/state/preferences/disable-saves-metrics.tsx b/src/state/preferences/disable-saves-metrics.tsx index a9337e106..42b78fbde 100644 --- a/src/state/preferences/disable-saves-metrics.tsx +++ b/src/state/preferences/disable-saves-metrics.tsx @@ -1,4 +1,11 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useState, +} from 'react' import * as persisted from '#/state/persisted' @@ -8,17 +15,17 @@ type StateContext = persisted.Schema['disableSavesMetrics'] // Same setter signature used across other preference modules type SetContext = (v: persisted.Schema['disableSavesMetrics']) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.disableSavesMetrics, ) -const setContext = React.createContext( +const setContext = createContext( (_: persisted.Schema['disableSavesMetrics']) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState(persisted.get('disableSavesMetrics')) +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState(persisted.get('disableSavesMetrics')) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( (value: persisted.Schema['disableSavesMetrics']) => { setState(value) persisted.write('disableSavesMetrics', value) @@ -26,7 +33,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate('disableSavesMetrics', next => { setState(next) }) @@ -42,9 +49,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function useDisableSavesMetrics() { - return React.useContext(stateContext) + return useContext(stateContext) } export function useSetDisableSavesMetrics() { - return React.useContext(setContext) + return useContext(setContext) } diff --git a/src/state/preferences/disable-verify-email-reminder.tsx b/src/state/preferences/disable-verify-email-reminder.tsx index 25324f29d..910a18baa 100644 --- a/src/state/preferences/disable-verify-email-reminder.tsx +++ b/src/state/preferences/disable-verify-email-reminder.tsx @@ -1,4 +1,11 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useState, +} from 'react' import * as persisted from '#/state/persisted' @@ -8,19 +15,19 @@ type StateContext = persisted.Schema['disableVerifyEmailReminder'] // Same setter signature used across other preference modules type SetContext = (v: persisted.Schema['disableVerifyEmailReminder']) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.disableVerifyEmailReminder, ) -const setContext = React.createContext( +const setContext = createContext( (_: persisted.Schema['disableVerifyEmailReminder']) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState( +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState( persisted.get('disableVerifyEmailReminder'), ) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( (value: persisted.Schema['disableVerifyEmailReminder']) => { setState(value) persisted.write('disableVerifyEmailReminder', value) @@ -28,7 +35,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate('disableVerifyEmailReminder', next => { setState(next) }) @@ -44,9 +51,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function useDisableVerifyEmailReminder() { - return React.useContext(stateContext) + return useContext(stateContext) } export function useSetDisableVerifyEmailReminder() { - return React.useContext(setContext) + return useContext(setContext) } diff --git a/src/state/preferences/disable-via-repost-notification.tsx b/src/state/preferences/disable-via-repost-notification.tsx index 516aa57ad..15f4cc2cf 100644 --- a/src/state/preferences/disable-via-repost-notification.tsx +++ b/src/state/preferences/disable-via-repost-notification.tsx @@ -1,4 +1,11 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useState, +} from 'react' import * as persisted from '#/state/persisted' @@ -8,19 +15,19 @@ type StateContext = persisted.Schema['disableViaRepostNotification'] // Same setter signature used across other preference modules type SetContext = (v: persisted.Schema['disableViaRepostNotification']) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.disableViaRepostNotification, ) -const setContext = React.createContext( +const setContext = createContext( (_: persisted.Schema['disableViaRepostNotification']) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState( +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState( persisted.get('disableViaRepostNotification'), ) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( (value: persisted.Schema['disableViaRepostNotification']) => { setState(value) persisted.write('disableViaRepostNotification', value) @@ -28,7 +35,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate('disableViaRepostNotification', next => { setState(next) }) @@ -44,9 +51,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function useDisableViaRepostNotification() { - return React.useContext(stateContext) + return useContext(stateContext) } export function useSetDisableViaRepostNotification() { - return React.useContext(setContext) + return useContext(setContext) } diff --git a/src/state/preferences/discover-context-enabled.tsx b/src/state/preferences/discover-context-enabled.tsx index 90943ff0d..2522871e8 100644 --- a/src/state/preferences/discover-context-enabled.tsx +++ b/src/state/preferences/discover-context-enabled.tsx @@ -1,4 +1,11 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useState, +} from 'react' import * as persisted from '#/state/persisted' @@ -8,19 +15,17 @@ type StateContext = persisted.Schema['discoverContextEnabled'] // Same setter signature used across other preference modules type SetContext = (v: persisted.Schema['discoverContextEnabled']) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.discoverContextEnabled, ) -const setContext = React.createContext( +const setContext = createContext( (_: persisted.Schema['discoverContextEnabled']) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState( - persisted.get('discoverContextEnabled'), - ) +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState(persisted.get('discoverContextEnabled')) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( (discoverContextEnabled: persisted.Schema['discoverContextEnabled']) => { setState(discoverContextEnabled) persisted.write('discoverContextEnabled', discoverContextEnabled) @@ -28,7 +33,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate( 'discoverContextEnabled', nextDiscoverContextEnabled => { @@ -47,9 +52,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function useDiscoverContextEnabled() { - return React.useContext(stateContext) + return useContext(stateContext) } export function useSetDiscoverContextEnabled() { - return React.useContext(setContext) + return useContext(setContext) } diff --git a/src/state/preferences/enable-square-avatars.tsx b/src/state/preferences/enable-square-avatars.tsx index 8473973b3..0e32e1b18 100644 --- a/src/state/preferences/enable-square-avatars.tsx +++ b/src/state/preferences/enable-square-avatars.tsx @@ -1,4 +1,11 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useState, +} from 'react' import * as persisted from '#/state/persisted' @@ -8,17 +15,17 @@ type StateContext = persisted.Schema['enableSquareAvatars'] // Same setter signature used across other preference modules type SetContext = (v: persisted.Schema['enableSquareAvatars']) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.enableSquareAvatars, ) -const setContext = React.createContext( +const setContext = createContext( (_: persisted.Schema['enableSquareAvatars']) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState(persisted.get('enableSquareAvatars')) +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState(persisted.get('enableSquareAvatars')) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( (value: persisted.Schema['enableSquareAvatars']) => { setState(value) persisted.write('enableSquareAvatars', value) @@ -26,7 +33,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate('enableSquareAvatars', next => { setState(next) }) @@ -42,9 +49,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function useEnableSquareAvatars() { - return React.useContext(stateContext) + return useContext(stateContext) } export function useSetEnableSquareAvatars() { - return React.useContext(setContext) + return useContext(setContext) } diff --git a/src/state/preferences/enable-square-buttons.tsx b/src/state/preferences/enable-square-buttons.tsx index f533d5198..974b52a4b 100644 --- a/src/state/preferences/enable-square-buttons.tsx +++ b/src/state/preferences/enable-square-buttons.tsx @@ -1,4 +1,11 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useState, +} from 'react' import * as persisted from '#/state/persisted' @@ -8,17 +15,17 @@ type StateContext = persisted.Schema['enableSquareButtons'] // Same setter signature used across other preference modules type SetContext = (v: persisted.Schema['enableSquareButtons']) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.enableSquareButtons, ) -const setContext = React.createContext( +const setContext = createContext( (_: persisted.Schema['enableSquareButtons']) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState(persisted.get('enableSquareButtons')) +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState(persisted.get('enableSquareButtons')) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( (value: persisted.Schema['enableSquareButtons']) => { setState(value) persisted.write('enableSquareButtons', value) @@ -26,7 +33,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate('enableSquareButtons', next => { setState(next) }) @@ -42,9 +49,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function useEnableSquareButtons() { - return React.useContext(stateContext) + return useContext(stateContext) } export function useSetEnableSquareButtons() { - return React.useContext(setContext) + return useContext(setContext) } diff --git a/src/state/preferences/external-embeds-prefs.tsx b/src/state/preferences/external-embeds-prefs.tsx index 399371191..88d83d843 100644 --- a/src/state/preferences/external-embeds-prefs.tsx +++ b/src/state/preferences/external-embeds-prefs.tsx @@ -5,6 +5,7 @@ import { useEffect, useState, } from 'react' +import type {PropsWithChildren} from 'react' import {type EmbedPlayerSource} from '#/lib/strings/embed-player' import * as persisted from '#/state/persisted' @@ -22,7 +23,7 @@ stateContext.displayName = 'ExternalEmbedsPrefsStateContext' const setContext = createContext({} as SetContext) setContext.displayName = 'ExternalEmbedsPrefsSetContext' -export function Provider({children}: React.PropsWithChildren<{}>) { +export function Provider({children}: PropsWithChildren<{}>) { const [state, setState] = useState(persisted.get('externalEmbeds')) const setStateWrapped = useCallback( diff --git a/src/state/preferences/external-share-buttons.tsx b/src/state/preferences/external-share-buttons.tsx index 4bb8718ff..7b53398da 100644 --- a/src/state/preferences/external-share-buttons.tsx +++ b/src/state/preferences/external-share-buttons.tsx @@ -1,23 +1,28 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useState, +} from 'react' import * as persisted from '#/state/persisted' type StateContext = persisted.Schema['showExternalShareButtons'] type SetContext = (v: persisted.Schema['showExternalShareButtons']) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.showExternalShareButtons, ) -const setContext = React.createContext( +const setContext = createContext( (_: persisted.Schema['showExternalShareButtons']) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState( - persisted.get('showExternalShareButtons'), - ) +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState(persisted.get('showExternalShareButtons')) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( ( showExternalShareButtons: persisted.Schema['showExternalShareButtons'], ) => { @@ -27,7 +32,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate( 'showExternalShareButtons', nextShowExternalShareButtons => { @@ -46,9 +51,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function useShowExternalShareButtons() { - return React.useContext(stateContext) + return useContext(stateContext) } export function useSetShowExternalShareButtons() { - return React.useContext(setContext) + return useContext(setContext) } diff --git a/src/state/preferences/favicon-service.tsx b/src/state/preferences/favicon-service.tsx index 228c507aa..dd6e87e3d 100644 --- a/src/state/preferences/favicon-service.tsx +++ b/src/state/preferences/favicon-service.tsx @@ -1,21 +1,28 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useState, +} from 'react' import * as persisted from '#/state/persisted' type StateContext = persisted.Schema['faviconService'] type SetContext = (v: persisted.Schema['faviconService']) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.faviconService, ) -const setContext = React.createContext( +const setContext = createContext( (_: persisted.Schema['faviconService']) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState(persisted.get('faviconService')) +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState(persisted.get('faviconService')) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( (faviconService: persisted.Schema['faviconService']) => { setState(faviconService) persisted.write('faviconService', faviconService) @@ -23,7 +30,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate('faviconService', next => { setState(next) }) @@ -39,10 +46,10 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function useFaviconService() { - return React.useContext(stateContext) ?? persisted.defaults.faviconService + return useContext(stateContext) ?? persisted.defaults.faviconService } export function useSetFaviconService() { - const setFaviconService = React.useContext(setContext) + const setFaviconService = useContext(setContext) return setFaviconService } diff --git a/src/state/preferences/go-links-enabled.tsx b/src/state/preferences/go-links-enabled.tsx index 05d26035c..acb31f9ba 100644 --- a/src/state/preferences/go-links-enabled.tsx +++ b/src/state/preferences/go-links-enabled.tsx @@ -1,21 +1,28 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useState, +} from 'react' import * as persisted from '#/state/persisted' type StateContext = persisted.Schema['goLinksEnabled'] type SetContext = (v: persisted.Schema['goLinksEnabled']) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.goLinksEnabled, ) -const setContext = React.createContext( +const setContext = createContext( (_: persisted.Schema['goLinksEnabled']) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState(persisted.get('goLinksEnabled')) +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState(persisted.get('goLinksEnabled')) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( (goLinksEnabled: persisted.Schema['goLinksEnabled']) => { setState(goLinksEnabled) persisted.write('goLinksEnabled', goLinksEnabled) @@ -23,7 +30,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate('goLinksEnabled', nextGoLinksEnabled => { setState(nextGoLinksEnabled) }) @@ -39,9 +46,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function useGoLinksEnabled() { - return React.useContext(stateContext) + return useContext(stateContext) } export function useSetGoLinksEnabled() { - return React.useContext(setContext) + return useContext(setContext) } diff --git a/src/state/preferences/hidden-posts.tsx b/src/state/preferences/hidden-posts.tsx index 2f9cbbb4f..cf5610801 100644 --- a/src/state/preferences/hidden-posts.tsx +++ b/src/state/preferences/hidden-posts.tsx @@ -6,6 +6,7 @@ import { useMemo, useState, } from 'react' +import type {PropsWithChildren} from 'react' import * as persisted from '#/state/persisted' @@ -26,7 +27,7 @@ const apiContext = createContext({ }) apiContext.displayName = 'HiddenPostsApiContext' -export function Provider({children}: React.PropsWithChildren<{}>) { +export function Provider({children}: PropsWithChildren<{}>) { const [state, setState] = useState(persisted.get('hiddenPosts')) const setStateWrapped = useCallback( diff --git a/src/state/preferences/hide-feeds-promo-tab.tsx b/src/state/preferences/hide-feeds-promo-tab.tsx index 3e5f41756..2ae461d87 100644 --- a/src/state/preferences/hide-feeds-promo-tab.tsx +++ b/src/state/preferences/hide-feeds-promo-tab.tsx @@ -1,4 +1,11 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useState, +} from 'react' import * as persisted from '#/state/persisted' @@ -8,17 +15,17 @@ type StateContext = persisted.Schema['hideFeedsPromoTab'] // Same setter signature used across other preference modules type SetContext = (v: persisted.Schema['hideFeedsPromoTab']) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.hideFeedsPromoTab, ) -const setContext = React.createContext( +const setContext = createContext( (_: persisted.Schema['hideFeedsPromoTab']) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState(persisted.get('hideFeedsPromoTab')) +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState(persisted.get('hideFeedsPromoTab')) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( (value: persisted.Schema['hideFeedsPromoTab']) => { setState(value) persisted.write('hideFeedsPromoTab', value) @@ -26,7 +33,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate('hideFeedsPromoTab', next => { setState(next) }) @@ -42,9 +49,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function useHideFeedsPromoTab() { - return React.useContext(stateContext) + return useContext(stateContext) } export function useSetHideFeedsPromoTab() { - return React.useContext(setContext) + return useContext(setContext) } diff --git a/src/state/preferences/hide-similar-accounts-recommendations.tsx b/src/state/preferences/hide-similar-accounts-recommendations.tsx index d8b5ff246..70cf83c14 100644 --- a/src/state/preferences/hide-similar-accounts-recommendations.tsx +++ b/src/state/preferences/hide-similar-accounts-recommendations.tsx @@ -1,4 +1,11 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useState, +} from 'react' import * as persisted from '#/state/persisted' @@ -8,19 +15,17 @@ type StateContext = persisted.Schema['hideSimilarAccountsRecomm'] // Same setter signature used across other preference modules type SetContext = (v: persisted.Schema['hideSimilarAccountsRecomm']) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.hideSimilarAccountsRecomm, ) -const setContext = React.createContext( +const setContext = createContext( (_: persisted.Schema['hideSimilarAccountsRecomm']) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState( - persisted.get('hideSimilarAccountsRecomm'), - ) +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState(persisted.get('hideSimilarAccountsRecomm')) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( (value: persisted.Schema['hideSimilarAccountsRecomm']) => { setState(value) persisted.write('hideSimilarAccountsRecomm', value) @@ -28,7 +33,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate('hideSimilarAccountsRecomm', next => { setState(next) }) @@ -44,9 +49,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function useHideSimilarAccountsRecomm() { - return React.useContext(stateContext) + return useContext(stateContext) } export function useSetHideSimilarAccountsRecomm() { - return React.useContext(setContext) + return useContext(setContext) } diff --git a/src/state/preferences/hide-unreplyable-posts.tsx b/src/state/preferences/hide-unreplyable-posts.tsx index 1a6221452..a5828f43e 100644 --- a/src/state/preferences/hide-unreplyable-posts.tsx +++ b/src/state/preferences/hide-unreplyable-posts.tsx @@ -1,23 +1,28 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useState, +} from 'react' import * as persisted from '#/state/persisted' type StateContext = persisted.Schema['hideUnreplyablePosts'] type SetContext = (v: persisted.Schema['hideUnreplyablePosts']) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.hideUnreplyablePosts, ) -const setContext = React.createContext( +const setContext = createContext( (_: persisted.Schema['hideUnreplyablePosts']) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState( - persisted.get('hideUnreplyablePosts'), - ) +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState(persisted.get('hideUnreplyablePosts')) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( (hideUnreplyablePosts: persisted.Schema['hideUnreplyablePosts']) => { setState(hideUnreplyablePosts) persisted.write('hideUnreplyablePosts', hideUnreplyablePosts) @@ -25,7 +30,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate('hideUnreplyablePosts', nextValue => { setState(nextValue) }) @@ -41,11 +46,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function useHideUnreplyablePosts() { - return ( - React.useContext(stateContext) ?? persisted.defaults.hideUnreplyablePosts - ) + return useContext(stateContext) ?? persisted.defaults.hideUnreplyablePosts } export function useSetHideUnreplyablePosts() { - return React.useContext(setContext) + return useContext(setContext) } diff --git a/src/state/preferences/high-quality-images.tsx b/src/state/preferences/high-quality-images.tsx index 50495f5b7..0eff6dbfe 100644 --- a/src/state/preferences/high-quality-images.tsx +++ b/src/state/preferences/high-quality-images.tsx @@ -1,21 +1,28 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useState, +} from 'react' import * as persisted from '#/state/persisted' type StateContext = persisted.Schema['highQualityImages'] type SetContext = (v: persisted.Schema['highQualityImages']) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.highQualityImages, ) -const setContext = React.createContext( +const setContext = createContext( (_: persisted.Schema['highQualityImages']) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState(persisted.get('highQualityImages')) +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState(persisted.get('highQualityImages')) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( (highQualityImages: persisted.Schema['highQualityImages']) => { setState(highQualityImages) persisted.write('highQualityImages', highQualityImages) @@ -23,7 +30,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate('highQualityImages', nextHighQualityImages => { setState(nextHighQualityImages) }) @@ -39,11 +46,11 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function useHighQualityImages() { - return React.useContext(stateContext) + return useContext(stateContext) } export function useSetHighQualityImages() { - return React.useContext(setContext) + return useContext(setContext) } // This is a little weird to have here imo but it works I guess diff --git a/src/state/preferences/image-cdn-host.tsx b/src/state/preferences/image-cdn-host.tsx index bca3ce41e..22d22440d 100644 --- a/src/state/preferences/image-cdn-host.tsx +++ b/src/state/preferences/image-cdn-host.tsx @@ -1,14 +1,21 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useState, +} from 'react' import * as persisted from '#/state/persisted' type StateContext = persisted.Schema['imageCdnHost'] type SetContext = (v: persisted.Schema['imageCdnHost']) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.imageCdnHost, ) -const setContext = React.createContext( +const setContext = createContext( (_: persisted.Schema['imageCdnHost']) => {}, ) @@ -16,10 +23,10 @@ const DEFAULT_IMAGE_CDN_ORIGIN = normalizeOrigin( persisted.defaults.imageCdnHost ?? '', ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState(persisted.get('imageCdnHost')) +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState(persisted.get('imageCdnHost')) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( (imageCdnHost: persisted.Schema['imageCdnHost']) => { setState(imageCdnHost) persisted.write('imageCdnHost', imageCdnHost) @@ -27,7 +34,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate('imageCdnHost', nextImageCdnHost => { setState(nextImageCdnHost) }) @@ -43,11 +50,11 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function useImageCdnHost() { - return React.useContext(stateContext) ?? persisted.defaults.imageCdnHost! + return useContext(stateContext) ?? persisted.defaults.imageCdnHost! } export function useSetImageCdnHost() { - return React.useContext(setContext) + return useContext(setContext) } function normalizeOrigin(input: string) { diff --git a/src/state/preferences/in-app-browser.tsx b/src/state/preferences/in-app-browser.tsx index 1ebb08964..800aee590 100644 --- a/src/state/preferences/in-app-browser.tsx +++ b/src/state/preferences/in-app-browser.tsx @@ -5,6 +5,7 @@ import { useEffect, useState, } from 'react' +import type {PropsWithChildren} from 'react' import * as persisted from '#/state/persisted' @@ -20,7 +21,7 @@ const setContext = createContext( ) setContext.displayName = 'InAppBrowserSetContext' -export function Provider({children}: React.PropsWithChildren<{}>) { +export function Provider({children}: PropsWithChildren<{}>) { const [state, setState] = useState(persisted.get('useInAppBrowser')) const setStateWrapped = useCallback( diff --git a/src/state/preferences/index.tsx b/src/state/preferences/index.tsx index d2688205e..1c907446b 100644 --- a/src/state/preferences/index.tsx +++ b/src/state/preferences/index.tsx @@ -1,3 +1,5 @@ +import type {PropsWithChildren} from 'react' + import {Provider as AltTextRequiredProvider} from './alt-text-required' import {Provider as AutoLikeOnRepostProvider} from './auto-like-on-repost' import {Provider as AutoplayProvider} from './autoplay' @@ -97,7 +99,7 @@ export { useTranslationServicePreference, } from './translation-service-preference' -export function Provider({children}: React.PropsWithChildren<{}>) { +export function Provider({children}: PropsWithChildren<{}>) { return ( diff --git a/src/state/preferences/label-defs.tsx b/src/state/preferences/label-defs.tsx index dd1859ecb..160063141 100644 --- a/src/state/preferences/label-defs.tsx +++ b/src/state/preferences/label-defs.tsx @@ -3,6 +3,7 @@ import { type AppBskyLabelerDefs, type InterpretedLabelValueDefinition, } from '@atproto/api' +import type {PropsWithChildren} from 'react' import {useLabelDefinitionsQuery} from '../queries/preferences' @@ -17,7 +18,7 @@ const stateContext = createContext({ }) stateContext.displayName = 'LabelDefsStateContext' -export function Provider({children}: React.PropsWithChildren<{}>) { +export function Provider({children}: PropsWithChildren<{}>) { const state = useLabelDefinitionsQuery() return {children} } diff --git a/src/state/preferences/languages.tsx b/src/state/preferences/languages.tsx index 713c817aa..8f69e46a3 100644 --- a/src/state/preferences/languages.tsx +++ b/src/state/preferences/languages.tsx @@ -6,6 +6,7 @@ import { useMemo, useState, } from 'react' +import type {PropsWithChildren} from 'react' import {type AppLanguage} from '#/locale/languages' import * as persisted from '#/state/persisted' @@ -36,7 +37,7 @@ const apiContext = createContext({ }) apiContext.displayName = 'LanguagePrefsApiContext' -export function Provider({children}: React.PropsWithChildren<{}>) { +export function Provider({children}: PropsWithChildren<{}>) { const [state, setState] = useState(() => persisted.get('languagePrefs')) const setStateWrapped = useCallback( diff --git a/src/state/preferences/large-alt-badge.tsx b/src/state/preferences/large-alt-badge.tsx index fd4856b04..911e23766 100644 --- a/src/state/preferences/large-alt-badge.tsx +++ b/src/state/preferences/large-alt-badge.tsx @@ -5,6 +5,7 @@ import { useEffect, useState, } from 'react' +import type {PropsWithChildren} from 'react' import * as persisted from '#/state/persisted' @@ -20,7 +21,7 @@ const setContext = createContext( ) setContext.displayName = 'LargeAltBadgeSetContext' -export function Provider({children}: React.PropsWithChildren<{}>) { +export function Provider({children}: PropsWithChildren<{}>) { const [state, setState] = useState(persisted.get('largeAltBadgeEnabled')) const setStateWrapped = useCallback( diff --git a/src/state/preferences/moderation-opts.tsx b/src/state/preferences/moderation-opts.tsx index a6e36b7d2..5f520e13c 100644 --- a/src/state/preferences/moderation-opts.tsx +++ b/src/state/preferences/moderation-opts.tsx @@ -1,4 +1,5 @@ import {createContext, useContext, useMemo} from 'react' +import {type PropsWithChildren} from 'react' import {BskyAgent, type ModerationOpts} from '@atproto/api' import {useHiddenPosts, useLabelDefinitions} from '#/state/preferences' @@ -21,7 +22,7 @@ export function useModerationOpts() { return useContext(moderationOptsContext) } -export function Provider({children}: React.PropsWithChildren<{}>) { +export function Provider({children}: PropsWithChildren<{}>) { const override = useContext(moderationOptsOverrideContext) const {currentAccount} = useSession() const prefs = usePreferencesQuery() diff --git a/src/state/preferences/no-app-labelers.tsx b/src/state/preferences/no-app-labelers.tsx index c8ca8bd0d..2cddf1955 100644 --- a/src/state/preferences/no-app-labelers.tsx +++ b/src/state/preferences/no-app-labelers.tsx @@ -1,21 +1,28 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useState, +} from 'react' import * as persisted from '#/state/persisted' type StateContext = persisted.Schema['noAppLabelers'] type SetContext = (v: persisted.Schema['noAppLabelers']) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.noAppLabelers, ) -const setContext = React.createContext( +const setContext = createContext( (_: persisted.Schema['noAppLabelers']) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState(persisted.get('noAppLabelers')) +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState(persisted.get('noAppLabelers')) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( (noAppLabelers: persisted.Schema['noAppLabelers']) => { setState(noAppLabelers) persisted.write('noAppLabelers', noAppLabelers) @@ -23,7 +30,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate('noAppLabelers', nextNoAppLabelers => { setState(nextNoAppLabelers) }) @@ -39,11 +46,11 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function useNoAppLabelers() { - return React.useContext(stateContext) + return useContext(stateContext) } export function useSetNoAppLabelers() { - return React.useContext(setContext) + return useContext(setContext) } export function getNoAppLabelers() { diff --git a/src/state/preferences/no-discover-fallback.tsx b/src/state/preferences/no-discover-fallback.tsx index 254834834..ae68e89e4 100644 --- a/src/state/preferences/no-discover-fallback.tsx +++ b/src/state/preferences/no-discover-fallback.tsx @@ -1,21 +1,28 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useState, +} from 'react' import * as persisted from '#/state/persisted' type StateContext = persisted.Schema['noDiscoverFallback'] type SetContext = (v: persisted.Schema['noDiscoverFallback']) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.noDiscoverFallback, ) -const setContext = React.createContext( +const setContext = createContext( (_: persisted.Schema['noDiscoverFallback']) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState(persisted.get('noDiscoverFallback')) +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState(persisted.get('noDiscoverFallback')) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( (noDiscoverFallback: persisted.Schema['noDiscoverFallback']) => { setState(noDiscoverFallback) persisted.write('noDiscoverFallback', noDiscoverFallback) @@ -23,7 +30,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate('noDiscoverFallback', nextNoDiscoverFallback => { setState(nextNoDiscoverFallback) }) @@ -39,9 +46,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function useNoDiscoverFallback() { - return React.useContext(stateContext) + return useContext(stateContext) } export function useSetNoDiscoverFallback() { - return React.useContext(setContext) + return useContext(setContext) } diff --git a/src/state/preferences/openrouter.tsx b/src/state/preferences/openrouter.tsx index fdd81cb08..3ea52aeac 100644 --- a/src/state/preferences/openrouter.tsx +++ b/src/state/preferences/openrouter.tsx @@ -1,4 +1,11 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useState, +} from 'react' import * as persisted from '#/state/persisted' @@ -9,37 +16,35 @@ type SetModelContext = (v: persisted.Schema['openRouterModel']) => void type PromptStateContext = persisted.Schema['openRouterPrompt'] type SetPromptContext = (v: persisted.Schema['openRouterPrompt']) => void -const apiKeyStateContext = React.createContext( +const apiKeyStateContext = createContext( persisted.defaults.openRouterApiKey, ) -const setApiKeyContext = React.createContext( +const setApiKeyContext = createContext( (_: persisted.Schema['openRouterApiKey']) => {}, ) -const modelStateContext = React.createContext( +const modelStateContext = createContext( persisted.defaults.openRouterModel, ) -const setModelContext = React.createContext( +const setModelContext = createContext( (_: persisted.Schema['openRouterModel']) => {}, ) -const promptStateContext = React.createContext( +const promptStateContext = createContext( persisted.defaults.openRouterPrompt, ) -const setPromptContext = React.createContext( +const setPromptContext = createContext( (_: persisted.Schema['openRouterPrompt']) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [apiKeyState, setApiKeyState] = React.useState( +export function Provider({children}: PropsWithChildren<{}>) { + const [apiKeyState, setApiKeyState] = useState( persisted.get('openRouterApiKey'), ) - const [modelState, setModelState] = React.useState( - persisted.get('openRouterModel'), - ) - const [promptState, setPromptState] = React.useState( + const [modelState, setModelState] = useState(persisted.get('openRouterModel')) + const [promptState, setPromptState] = useState( persisted.get('openRouterPrompt'), ) - const setApiKeyWrapped = React.useCallback( + const setApiKeyWrapped = useCallback( (openRouterApiKey: persisted.Schema['openRouterApiKey']) => { setApiKeyState(openRouterApiKey) persisted.write('openRouterApiKey', openRouterApiKey) @@ -47,7 +52,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setApiKeyState], ) - const setModelWrapped = React.useCallback( + const setModelWrapped = useCallback( (openRouterModel: persisted.Schema['openRouterModel']) => { setModelState(openRouterModel) persisted.write('openRouterModel', openRouterModel) @@ -55,7 +60,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setModelState], ) - const setPromptWrapped = React.useCallback( + const setPromptWrapped = useCallback( (openRouterPrompt: persisted.Schema['openRouterPrompt']) => { setPromptState(openRouterPrompt) persisted.write('openRouterPrompt', openRouterPrompt) @@ -63,19 +68,19 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setPromptState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate('openRouterApiKey', nextApiKey => { setApiKeyState(nextApiKey) }) }, [setApiKeyWrapped]) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate('openRouterModel', nextModel => { setModelState(nextModel) }) }, [setModelWrapped]) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate('openRouterPrompt', nextPrompt => { setPromptState(nextPrompt) }) @@ -99,27 +104,27 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function useOpenRouterApiKey() { - return React.useContext(apiKeyStateContext) + return useContext(apiKeyStateContext) } export function useSetOpenRouterApiKey() { - return React.useContext(setApiKeyContext) + return useContext(setApiKeyContext) } export function useOpenRouterModel() { - return React.useContext(modelStateContext) + return useContext(modelStateContext) } export function useSetOpenRouterModel() { - return React.useContext(setModelContext) + return useContext(setModelContext) } export function useOpenRouterPrompt() { - return React.useContext(promptStateContext) + return useContext(promptStateContext) } export function useSetOpenRouterPrompt() { - return React.useContext(setPromptContext) + return useContext(setPromptContext) } export function useOpenRouterConfigured() { diff --git a/src/state/preferences/pds-label.tsx b/src/state/preferences/pds-label.tsx index 08e7cf9d9..954564b60 100644 --- a/src/state/preferences/pds-label.tsx +++ b/src/state/preferences/pds-label.tsx @@ -1,29 +1,34 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useContext, + useEffect, + useMemo, + useState, +} from 'react' import * as persisted from '#/state/persisted' type StateContext = persisted.Schema['pdsLabel'] type SetContext = (v: persisted.Schema['pdsLabel']) => void -const stateContext = React.createContext( - persisted.defaults.pdsLabel, -) -const setContext = React.createContext( +const stateContext = createContext(persisted.defaults.pdsLabel) +const setContext = createContext( (_: persisted.Schema['pdsLabel']) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState(persisted.get('pdsLabel')) +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState(persisted.get('pdsLabel')) - const setStateWrapped = React.useCallback( - (pdsLabel: persisted.Schema['pdsLabel']) => { + const setStateWrapped = useMemo( + () => (pdsLabel: persisted.Schema['pdsLabel']) => { setState(pdsLabel) persisted.write('pdsLabel', pdsLabel) }, [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate('pdsLabel', next => { setState(next) }) @@ -39,7 +44,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function usePdsLabel() { - return React.useContext(stateContext) ?? persisted.defaults.pdsLabel! + return useContext(stateContext) ?? persisted.defaults.pdsLabel! } export function usePdsLabelEnabled() { @@ -51,14 +56,14 @@ export function usePdsLabelHideBskyPds() { } export function useSetPdsLabel() { - return React.useContext(setContext) + return useContext(setContext) } export function useSetPdsLabelEnabled() { const pdsLabel = usePdsLabel() const setPdsLabel = useSetPdsLabel() - return React.useMemo( + return useMemo( () => (enabled: boolean) => setPdsLabel({...pdsLabel, enabled}), [pdsLabel, setPdsLabel], ) @@ -68,7 +73,7 @@ export function useSetPdsLabelHideBskyPds() { const pdsLabel = usePdsLabel() const setPdsLabel = useSetPdsLabel() - return React.useMemo( + return useMemo( () => (hideBskyPds: boolean) => setPdsLabel({...pdsLabel, hideBskyPds}), [pdsLabel, setPdsLabel], ) diff --git a/src/state/preferences/plc-directory.tsx b/src/state/preferences/plc-directory.tsx index d57b3a5e3..25bca75b7 100644 --- a/src/state/preferences/plc-directory.tsx +++ b/src/state/preferences/plc-directory.tsx @@ -1,14 +1,21 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useState, +} from 'react' import * as persisted from '#/state/persisted' type StateContext = persisted.Schema['plcDirectory'] type SetContext = (v: persisted.Schema['plcDirectory']) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.plcDirectory, ) -const setContext = React.createContext( +const setContext = createContext( (_: persisted.Schema['plcDirectory']) => {}, ) @@ -20,10 +27,10 @@ function normalizeOrigin(input: string) { } } -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState(persisted.get('plcDirectory')) +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState(persisted.get('plcDirectory')) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( (plcDirectory: persisted.Schema['plcDirectory']) => { setState(plcDirectory) persisted.write('plcDirectory', plcDirectory) @@ -31,7 +38,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate('plcDirectory', nextPlcDirectory => { setState(nextPlcDirectory) }) @@ -49,13 +56,13 @@ export function Provider({children}: React.PropsWithChildren<{}>) { export function usePlcDirectory() { return ( normalizeOrigin( - React.useContext(stateContext) ?? persisted.defaults.plcDirectory!, + useContext(stateContext) ?? persisted.defaults.plcDirectory!, ) ?? persisted.defaults.plcDirectory! ) } export function useSetPlcDirectory() { - return React.useContext(setContext) + return useContext(setContext) } export function readPlcDirectory() { diff --git a/src/state/preferences/post-name-replacement.tsx b/src/state/preferences/post-name-replacement.tsx index b1b970e0c..cd77d540d 100644 --- a/src/state/preferences/post-name-replacement.tsx +++ b/src/state/preferences/post-name-replacement.tsx @@ -1,4 +1,11 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useState, +} from 'react' import * as persisted from '#/state/persisted' @@ -15,10 +22,10 @@ type SetContext = ( | ((curr: PostReplacementState) => PostReplacementState), ) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.postReplacement as PostReplacementState, ) -const setContext = React.createContext( +const setContext = createContext( ( _: | PostReplacementState @@ -26,8 +33,8 @@ const setContext = React.createContext( ) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, _setState] = React.useState(() => { +export function Provider({children}: PropsWithChildren<{}>) { + const [state, _setState] = useState(() => { const persistedState = persisted.get('postReplacement') return { enabled: @@ -41,7 +48,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } }) - const setState = React.useCallback( + const setState = useCallback( ( val: | PostReplacementState @@ -56,7 +63,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate('postReplacement', next => { setState({ postName: next.postName ?? 'skeet', @@ -74,9 +81,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function usePostReplacement() { - return React.useContext(stateContext) + return useContext(stateContext) } export function useSetPostReplacement() { - return React.useContext(setContext) + return useContext(setContext) } diff --git a/src/state/preferences/repost-carousel-enabled.tsx b/src/state/preferences/repost-carousel-enabled.tsx index f83639e99..e241d03ad 100644 --- a/src/state/preferences/repost-carousel-enabled.tsx +++ b/src/state/preferences/repost-carousel-enabled.tsx @@ -1,21 +1,28 @@ -import React from 'react' +import { + createContext, + type ReactNode, + useCallback, + useContext, + useEffect, + useState, +} from 'react' import * as persisted from '#/state/persisted' type StateContext = boolean type SetContext = (v: boolean) => void -const stateContext = React.createContext( +const stateContext = createContext( Boolean(persisted.defaults.repostCarouselEnabled), ) -const setContext = React.createContext((_: boolean) => {}) +const setContext = createContext((_: boolean) => {}) -export function Provider({children}: {children: React.ReactNode}) { - const [state, setState] = React.useState( +export function Provider({children}: {children: ReactNode}) { + const [state, setState] = useState( Boolean(persisted.get('repostCarouselEnabled')), ) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( (value: persisted.Schema['repostCarouselEnabled']) => { setState(Boolean(value)) persisted.write('repostCarouselEnabled', value) @@ -23,7 +30,7 @@ export function Provider({children}: {children: React.ReactNode}) { [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate('repostCarouselEnabled', nextValue => { setState(Boolean(nextValue)) }) @@ -38,5 +45,5 @@ export function Provider({children}: {children: React.ReactNode}) { ) } -export const useRepostCarouselEnabled = () => React.useContext(stateContext) -export const useSetRepostCarouselEnabled = () => React.useContext(setContext) +export const useRepostCarouselEnabled = () => useContext(stateContext) +export const useSetRepostCarouselEnabled = () => useContext(setContext) diff --git a/src/state/preferences/show-follows-you-badge.tsx b/src/state/preferences/show-follows-you-badge.tsx index e1cea6c7c..66ffc9528 100644 --- a/src/state/preferences/show-follows-you-badge.tsx +++ b/src/state/preferences/show-follows-you-badge.tsx @@ -1,21 +1,28 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useState, +} from 'react' import * as persisted from '#/state/persisted' type StateContext = persisted.Schema['showFollowsYouBadge'] type SetContext = (v: persisted.Schema['showFollowsYouBadge']) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.showFollowsYouBadge, ) -const setContext = React.createContext( +const setContext = createContext( (_: persisted.Schema['showFollowsYouBadge']) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState(persisted.get('showFollowsYouBadge')) +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState(persisted.get('showFollowsYouBadge')) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( (showFollowsYouBadge: persisted.Schema['showFollowsYouBadge']) => { setState(showFollowsYouBadge) persisted.write('showFollowsYouBadge', showFollowsYouBadge) @@ -23,7 +30,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate( 'showFollowsYouBadge', nextShowFollowsYouBadge => { @@ -42,9 +49,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function useShowFollowsYouBadge() { - return React.useContext(stateContext) + return useContext(stateContext) } export function useSetShowFollowsYouBadge() { - return React.useContext(setContext) + return useContext(setContext) } diff --git a/src/state/preferences/show-link-in-handle.tsx b/src/state/preferences/show-link-in-handle.tsx index 74cbd130f..4d8c8710a 100644 --- a/src/state/preferences/show-link-in-handle.tsx +++ b/src/state/preferences/show-link-in-handle.tsx @@ -1,21 +1,28 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useState, +} from 'react' import * as persisted from '#/state/persisted' type StateContext = persisted.Schema['showLinkInHandle'] type SetContext = (v: persisted.Schema['showLinkInHandle']) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.showLinkInHandle, ) -const setContext = React.createContext( +const setContext = createContext( (_: persisted.Schema['showLinkInHandle']) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState(persisted.get('showLinkInHandle')) +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState(persisted.get('showLinkInHandle')) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( (showLinkInHandle: persisted.Schema['showLinkInHandle']) => { setState(showLinkInHandle) persisted.write('showLinkInHandle', showLinkInHandle) @@ -23,7 +30,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate('showLinkInHandle', nextShowLinkInHandle => { setState(nextShowLinkInHandle) }) @@ -39,9 +46,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function useShowLinkInHandle() { - return React.useContext(stateContext) + return useContext(stateContext) } export function useSetShowLinkInHandle() { - return React.useContext(setContext) + return useContext(setContext) } diff --git a/src/state/preferences/subtitles.tsx b/src/state/preferences/subtitles.tsx index 16428c236..aa3f47d29 100644 --- a/src/state/preferences/subtitles.tsx +++ b/src/state/preferences/subtitles.tsx @@ -5,6 +5,7 @@ import { useEffect, useState, } from 'react' +import type {PropsWithChildren} from 'react' import * as persisted from '#/state/persisted' @@ -18,7 +19,7 @@ stateContext.displayName = 'SubtitlesStateContext' const setContext = createContext((_: boolean) => {}) setContext.displayName = 'SubtitlesSetContext' -export function Provider({children}: {children: React.ReactNode}) { +export function Provider({children}: PropsWithChildren<{}>) { const [state, setState] = useState(Boolean(persisted.get('subtitlesEnabled'))) const setStateWrapped = useCallback( diff --git a/src/state/preferences/translation-service-preference.tsx b/src/state/preferences/translation-service-preference.tsx index cfa0d9be7..16523e647 100644 --- a/src/state/preferences/translation-service-preference.tsx +++ b/src/state/preferences/translation-service-preference.tsx @@ -1,4 +1,11 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useState, +} from 'react' import * as persisted from '#/state/persisted' @@ -9,28 +16,28 @@ type SetInstanceContext = ( v: persisted.Schema['libreTranslateInstance'], ) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.translationServicePreference, ) -const setContext = React.createContext( +const setContext = createContext( (_: persisted.Schema['translationServicePreference']) => {}, ) -const instanceStateContext = React.createContext( +const instanceStateContext = createContext( persisted.defaults.libreTranslateInstance, ) -const setInstanceContext = React.createContext( +const setInstanceContext = createContext( (_: persisted.Schema['libreTranslateInstance']) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState( +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState( persisted.get('translationServicePreference'), ) - const [instanceState, setInstanceState] = React.useState( + const [instanceState, setInstanceState] = useState( persisted.get('libreTranslateInstance'), ) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( ( translationServicePreference: persisted.Schema['translationServicePreference'], ) => { @@ -43,7 +50,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setState], ) - const setInstanceStateWrapped = React.useCallback( + const setInstanceStateWrapped = useCallback( (libreTranslateInstance: persisted.Schema['libreTranslateInstance']) => { setInstanceState(libreTranslateInstance) persisted.write('libreTranslateInstance', libreTranslateInstance) @@ -51,7 +58,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setInstanceState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate( 'translationServicePreference', nextTranslationServicePreference => { @@ -60,7 +67,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { ) }, [setStateWrapped]) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate('libreTranslateInstance', nextInstance => { setInstanceState(nextInstance) }) @@ -80,20 +87,20 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function useTranslationServicePreference() { - return React.useContext(stateContext) + return useContext(stateContext) } export function useSetTranslationServicePreference() { - return React.useContext(setContext) + return useContext(setContext) } export function useLibreTranslateInstance() { return ( - React.useContext(instanceStateContext) ?? + useContext(instanceStateContext) ?? persisted.defaults.libreTranslateInstance! ) } export function useSetLibreTranslateInstance() { - return React.useContext(setInstanceContext) + return useContext(setInstanceContext) } diff --git a/src/state/preferences/trending.tsx b/src/state/preferences/trending.tsx index d3051f8f7..0546423df 100644 --- a/src/state/preferences/trending.tsx +++ b/src/state/preferences/trending.tsx @@ -6,6 +6,7 @@ import { useMemo, useState, } from 'react' +import type {PropsWithChildren} from 'react' import * as persisted from '#/state/persisted' @@ -58,7 +59,7 @@ function usePersistedBooleanValue(key: T) { return [value, set] as const } -export function Provider({children}: React.PropsWithChildren<{}>) { +export function Provider({children}: PropsWithChildren<{}>) { const [trendingDisabled, setTrendingDisabled] = usePersistedBooleanValue('trendingDisabled') const [trendingVideoDisabled, setTrendingVideoDisabled] = diff --git a/src/state/preferences/use-handle-in-links.tsx b/src/state/preferences/use-handle-in-links.tsx index 9116b1edc..df1d4dd28 100644 --- a/src/state/preferences/use-handle-in-links.tsx +++ b/src/state/preferences/use-handle-in-links.tsx @@ -1,4 +1,11 @@ -import React from 'react' +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useState, +} from 'react' import {reloadAppAsync} from 'expo' import * as persisted from '#/state/persisted' @@ -7,17 +14,17 @@ import {IS_WEB} from '#/env' type StateContext = persisted.Schema['useHandleInLinks'] type SetContext = (v: persisted.Schema['useHandleInLinks']) => void -const stateContext = React.createContext( +const stateContext = createContext( persisted.defaults.useHandleInLinks, ) -const setContext = React.createContext( +const setContext = createContext( (_: persisted.Schema['useHandleInLinks']) => {}, ) -export function Provider({children}: React.PropsWithChildren<{}>) { - const [state, setState] = React.useState(persisted.get('useHandleInLinks')) +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState(persisted.get('useHandleInLinks')) - const setStateWrapped = React.useCallback( + const setStateWrapped = useCallback( (useHandleInLinks: persisted.Schema['useHandleInLinks']) => { setState(useHandleInLinks) persisted.write('useHandleInLinks', useHandleInLinks) @@ -25,7 +32,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setState], ) - React.useEffect(() => { + useEffect(() => { return persisted.onUpdate('useHandleInLinks', nextUseHandleInLinks => { setState(nextUseHandleInLinks) }) @@ -41,13 +48,13 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } export function useHandleInLinks() { - return React.useContext(stateContext) + return useContext(stateContext) } export function useSetHandleInLinks() { - const set = React.useContext(setContext) + const set = useContext(setContext) - return React.useCallback( + return useCallback( (useHandleInLinks: persisted.Schema['useHandleInLinks']) => { set(useHandleInLinks) diff --git a/src/state/preferences/used-starter-packs.tsx b/src/state/preferences/used-starter-packs.tsx index 7b584db94..98a76bc8c 100644 --- a/src/state/preferences/used-starter-packs.tsx +++ b/src/state/preferences/used-starter-packs.tsx @@ -1,4 +1,5 @@ import {createContext, useContext, useEffect, useState} from 'react' +import type {ReactNode} from 'react' import * as persisted from '#/state/persisted' @@ -10,7 +11,7 @@ stateContext.displayName = 'UsedStarterPacksStateContext' const setContext = createContext((_: boolean) => {}) setContext.displayName = 'UsedStarterPacksSetContext' -export function Provider({children}: {children: React.ReactNode}) { +export function Provider({children}: {children: ReactNode}) { const [state, setState] = useState(() => persisted.get('hasCheckedForStarterPack'), ) diff --git a/src/state/session/index.tsx b/src/state/session/index.tsx index f4f762402..1bfc70f71 100644 --- a/src/state/session/index.tsx +++ b/src/state/session/index.tsx @@ -8,7 +8,7 @@ import { useState, useSyncExternalStore, } from 'react' -import {type Agent, type AtpAgent, type AtpSessionEvent} from '@atproto/api' +import {type AtpAgent, type AtpSessionEvent} from '@atproto/api' import * as persisted from '#/state/persisted' import {useCloseAllActiveElements} from '#/state/util' diff --git a/src/state/session/oauth-native-client.ts b/src/state/session/oauth-native-client.ts index baa5ae7a2..e26e1277e 100644 --- a/src/state/session/oauth-native-client.ts +++ b/src/state/session/oauth-native-client.ts @@ -1,4 +1,5 @@ import {ExpoOAuthClient} from '@atproto/oauth-client-expo' + import {createIdentityResolver} from './identity-resolver' const OAUTH_BASE_URL: string = diff --git a/src/view/com/composer/Composer.tsx b/src/view/com/composer/Composer.tsx index 106f94885..ae0d0c23e 100644 --- a/src/view/com/composer/Composer.tsx +++ b/src/view/com/composer/Composer.tsx @@ -785,7 +785,7 @@ export const ComposePost = ({ } }, [onPressCancel, closeAllDialogs, closeAllModals]) - const missingAltError = useMemo(() => { + const missingAltError = (() => { if (!requireAltTextEnabled) { return } @@ -807,7 +807,7 @@ export const ComposePost = ({ } } } - }, [thread, requireAltTextEnabled, l]) + })() const canPost = !missingAltError && diff --git a/src/view/com/pager/Pager.web.tsx b/src/view/com/pager/Pager.web.tsx index ebe5432a3..acc7f998a 100644 --- a/src/view/com/pager/Pager.web.tsx +++ b/src/view/com/pager/Pager.web.tsx @@ -1,11 +1,4 @@ -import { - Children, - type JSX, - useCallback, - useImperativeHandle, - useRef, - useState, -} from 'react' +import {Children, type JSX, useImperativeHandle, useRef, useState} from 'react' import {View} from 'react-native' import {flushSync} from 'react-dom' @@ -47,38 +40,35 @@ export function Pager({ }, })) - const onTabBarSelect = useCallback( - (index: number) => { - const scrollY = window.scrollY - // We want to determine if the tabbar is already "sticking" at the top (in which - // case we should preserve and restore scroll), or if it is somewhere below in the - // viewport (in which case a scroll jump would be jarring). We determine this by - // measuring where the "anchor" element is (which we place just above the tabbar). - let anchorTop = anchorRef.current - ? (anchorRef.current as Element).getBoundingClientRect().top - : -scrollY // If there's no anchor, treat the top of the page as one. - const isSticking = anchorTop <= 5 // This would be 0 if browser scrollTo() was reliable. + const onTabBarSelect = (index: number) => { + const scrollY = window.scrollY + // We want to determine if the tabbar is already "sticking" at the top (in which + // case we should preserve and restore scroll), or if it is somewhere below in the + // viewport (in which case a scroll jump would be jarring). We determine this by + // measuring where the "anchor" element is (which we place just above the tabbar). + let anchorTop = anchorRef.current + ? (anchorRef.current as Element).getBoundingClientRect().top + : -scrollY // If there's no anchor, treat the top of the page as one. + const isSticking = anchorTop <= 5 // This would be 0 if browser scrollTo() was reliable. - if (isSticking) { - scrollYs.current[selectedPage] = window.scrollY + if (isSticking) { + scrollYs.current[selectedPage] = window.scrollY + } else { + scrollYs.current[selectedPage] = null + } + flushSync(() => { + setSelectedPage(index) + onPageSelected?.(index) + }) + if (isSticking) { + const restoredScrollY = scrollYs.current[index] + if (restoredScrollY != null) { + window.scrollTo(0, restoredScrollY) } else { - scrollYs.current[selectedPage] = null + window.scrollTo(0, scrollY + anchorTop) } - flushSync(() => { - setSelectedPage(index) - onPageSelected?.(index) - }) - if (isSticking) { - const restoredScrollY = scrollYs.current[index] - if (restoredScrollY != null) { - window.scrollTo(0, restoredScrollY) - } else { - window.scrollTo(0, scrollY + anchorTop) - } - } - }, - [selectedPage, setSelectedPage, onPageSelected], - ) + } + } return ( diff --git a/src/view/com/posts/PostFeedItemCarousel.tsx b/src/view/com/posts/PostFeedItemCarousel.tsx index 0cf2cd0a7..01b6034a0 100644 --- a/src/view/com/posts/PostFeedItemCarousel.tsx +++ b/src/view/com/posts/PostFeedItemCarousel.tsx @@ -1,4 +1,4 @@ -import React from 'react' +import {useCallback, useRef, useState} from 'react' import {Dimensions, ScrollView, View} from 'react-native' import {msg} from '@lingui/core/macro' import {useLingui} from '@lingui/react' @@ -22,12 +22,12 @@ const CARD_INTERVAL = CARD_WIDTH + a.gap_md.gap export function PostFeedItemCarousel({items}: {items: FeedPostSlice[]}) { const t = useTheme() const {_} = useLingui() - const ref = React.useRef(null) - const [scrollX, setScrollX] = React.useState(0) + const ref = useRef(null) + const [scrollX, setScrollX] = useState(0) const enableSquareButtons = useEnableSquareButtons() - const scrollTo = React.useCallback( + const scrollTo = useCallback( (item: number) => { setScrollX(item) @@ -40,12 +40,12 @@ export function PostFeedItemCarousel({items}: {items: FeedPostSlice[]}) { [ref], ) - const scrollLeft = React.useCallback(() => { + const scrollLeft = useCallback(() => { const newPos = scrollX > 0 ? scrollX - 1 : items.length - 1 scrollTo(newPos) }, [scrollTo, scrollX, items.length]) - const scrollRight = React.useCallback(() => { + const scrollRight = useCallback(() => { const newPos = scrollX < items.length - 1 ? scrollX + 1 : 0 scrollTo(newPos) }, [scrollTo, scrollX, items.length])