Follow conventions for query, use isDirty flag in session store to avoid unneccessary writes
parent
742f53d1ec
commit
b0c9cce5c3
|
@ -1,8 +1,8 @@
|
|||
import {useQuery} from '@tanstack/react-query'
|
||||
|
||||
import {PUBLIC_BSKY_AGENT} from '#/data'
|
||||
import {PUBLIC_BSKY_AGENT} from '#/state/queries'
|
||||
|
||||
export function useGetProfile({did}: {did: string}) {
|
||||
export function useProfileQuery({did}: {did: string}) {
|
||||
return useQuery({
|
||||
queryKey: ['getProfile', did],
|
||||
queryFn: async () => {
|
|
@ -4,7 +4,7 @@ import {BskyAgent, AtpPersistSessionHandler} from '@atproto/api'
|
|||
import {networkRetry} from '#/lib/async/retry'
|
||||
import {logger} from '#/logger'
|
||||
import * as persisted from '#/state/persisted'
|
||||
import {PUBLIC_BSKY_AGENT} from '#/data'
|
||||
import {PUBLIC_BSKY_AGENT} from '#/state/queries'
|
||||
|
||||
export type SessionAccount = persisted.PersistedAccount
|
||||
|
||||
|
@ -102,6 +102,7 @@ function createPersistSessionHandler(
|
|||
}
|
||||
|
||||
export function Provider({children}: React.PropsWithChildren<{}>) {
|
||||
const isDirty = React.useRef(false)
|
||||
const [state, setState] = React.useState<StateContext>({
|
||||
agent: PUBLIC_BSKY_AGENT,
|
||||
hasSession: false,
|
||||
|
@ -113,6 +114,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
|
|||
|
||||
const upsertAccount = React.useCallback(
|
||||
(account: persisted.PersistedAccount, expired = false) => {
|
||||
isDirty.current = true
|
||||
setState(s => {
|
||||
return {
|
||||
...s,
|
||||
|
@ -124,7 +126,6 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
|
|||
[setState],
|
||||
)
|
||||
|
||||
// TODO have not connected this yet
|
||||
const createAccount = React.useCallback<ApiContext['createAccount']>(
|
||||
async ({service, email, password, handle, inviteCode}: any) => {
|
||||
logger.debug(
|
||||
|
@ -231,6 +232,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
|
|||
|
||||
const logout = React.useCallback<ApiContext['logout']>(async () => {
|
||||
logger.debug(`session: logout`, {}, logger.DebugContext.session)
|
||||
isDirty.current = true
|
||||
setState(s => {
|
||||
return {
|
||||
...s,
|
||||
|
@ -301,6 +303,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
|
|||
|
||||
const removeAccount = React.useCallback<ApiContext['removeAccount']>(
|
||||
account => {
|
||||
isDirty.current = true
|
||||
setState(s => {
|
||||
return {
|
||||
...s,
|
||||
|
@ -317,6 +320,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
|
|||
ApiContext['updateCurrentAccount']
|
||||
>(
|
||||
account => {
|
||||
isDirty.current = true
|
||||
setState(s => {
|
||||
const currentAccount = s.currentAccount
|
||||
|
||||
|
@ -363,6 +367,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
|
|||
)
|
||||
|
||||
const clearCurrentAccount = React.useCallback(() => {
|
||||
isDirty.current = true
|
||||
setState(s => ({
|
||||
...s,
|
||||
currentAccount: undefined,
|
||||
|
@ -370,10 +375,13 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
|
|||
}, [setState])
|
||||
|
||||
React.useEffect(() => {
|
||||
persisted.write('session', {
|
||||
accounts: state.accounts,
|
||||
currentAccount: state.currentAccount,
|
||||
})
|
||||
if (isDirty.current) {
|
||||
persisted.write('session', {
|
||||
accounts: state.accounts,
|
||||
currentAccount: state.currentAccount,
|
||||
})
|
||||
isDirty.current = false
|
||||
}
|
||||
}, [state])
|
||||
|
||||
React.useEffect(() => {
|
||||
|
|
|
@ -11,7 +11,7 @@ import {Trans, msg} from '@lingui/macro'
|
|||
import {useLingui} from '@lingui/react'
|
||||
import {styles} from './styles'
|
||||
import {useSession, useSessionApi, SessionAccount} from '#/state/session'
|
||||
import {useGetProfile} from '#/data/useGetProfile'
|
||||
import {useProfileQuery} from '#/state/queries/profile'
|
||||
|
||||
function AccountItem({
|
||||
account,
|
||||
|
@ -22,7 +22,7 @@ function AccountItem({
|
|||
}) {
|
||||
const pal = usePalette('default')
|
||||
const {_} = useLingui()
|
||||
const {isError, data} = useGetProfile({did: account.did})
|
||||
const {isError, data} = useProfileQuery({did: account.did})
|
||||
|
||||
const onPress = React.useCallback(() => {
|
||||
onSelect(account)
|
||||
|
|
|
@ -19,7 +19,7 @@ import {Haptics} from 'lib/haptics'
|
|||
import {Trans, msg} from '@lingui/macro'
|
||||
import {useLingui} from '@lingui/react'
|
||||
import {useSession, useSessionApi, SessionAccount} from '#/state/session'
|
||||
import {useGetProfile} from '#/data/useGetProfile'
|
||||
import {useProfileQuery} from '#/state/queries/profile'
|
||||
|
||||
export const snapPoints = ['40%', '90%']
|
||||
|
||||
|
@ -29,7 +29,7 @@ function SwitchAccountCard({account}: {account: SessionAccount}) {
|
|||
const {track} = useAnalytics()
|
||||
const {isSwitchingAccounts, currentAccount} = useSession()
|
||||
const {logout} = useSessionApi()
|
||||
const {isError, data: profile} = useGetProfile({did: account.did})
|
||||
const {isError, data: profile} = useProfileQuery({did: account.did})
|
||||
const isCurrentAccount = account.did === currentAccount?.did
|
||||
const {onPressSwitchAccount} = useAccountSwitcher()
|
||||
|
||||
|
|
|
@ -58,7 +58,7 @@ import {
|
|||
useSetRequireAltTextEnabled,
|
||||
} from '#/state/preferences'
|
||||
import {useSession, useSessionApi, SessionAccount} from '#/state/session'
|
||||
import {useGetProfile} from '#/data/useGetProfile'
|
||||
import {useProfileQuery} from '#/state/queries/profile'
|
||||
|
||||
// TEMPORARY (APP-700)
|
||||
// remove after backend testing finishes
|
||||
|
@ -72,7 +72,7 @@ function SettingsAccountCard({account}: {account: SessionAccount}) {
|
|||
const pal = usePalette('default')
|
||||
const {isSwitchingAccounts, currentAccount} = useSession()
|
||||
const {logout} = useSessionApi()
|
||||
const {isError, data} = useGetProfile({did: account.did})
|
||||
const {isError, data} = useProfileQuery({did: account.did})
|
||||
const isCurrentAccount = account.did === currentAccount?.did
|
||||
const {onPressSwitchAccount} = useAccountSwitcher()
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ import {router} from '../../../routes'
|
|||
import {makeProfileLink} from 'lib/routes/links'
|
||||
import {useLingui} from '@lingui/react'
|
||||
import {Trans, msg} from '@lingui/macro'
|
||||
import {useGetProfile} from '#/data/useGetProfile'
|
||||
import {useProfileQuery} from '#/state/queries/profile'
|
||||
import {useSession} from '#/state/session'
|
||||
|
||||
const ProfileCard = observer(function ProfileCardImpl() {
|
||||
|
@ -50,7 +50,7 @@ const ProfileCard = observer(function ProfileCardImpl() {
|
|||
isLoading,
|
||||
isError,
|
||||
data: profile,
|
||||
} = useGetProfile({did: currentAccount!.did})
|
||||
} = useProfileQuery({did: currentAccount!.did})
|
||||
const {isDesktop} = useWebMediaQueries()
|
||||
const size = 48
|
||||
|
||||
|
|
Loading…
Reference in New Issue