Skip to content

Commit

Permalink
Follow conventions for query, use isDirty flag in session store to av…
Browse files Browse the repository at this point in the history
…oid unneccessary writes
  • Loading branch information
estrattonbailey committed Nov 10, 2023
1 parent 742f53d commit b0c9cce
Show file tree
Hide file tree
Showing 7 changed files with 24 additions and 16 deletions.
File renamed without changes.
4 changes: 2 additions & 2 deletions src/data/useGetProfile.ts → src/state/queries/profile.ts
Original file line number Diff line number Diff line change
@@ -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 () => {
Expand Down
20 changes: 14 additions & 6 deletions src/state/session/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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,
Expand All @@ -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,
Expand All @@ -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(
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -301,6 +303,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) {

const removeAccount = React.useCallback<ApiContext['removeAccount']>(
account => {
isDirty.current = true
setState(s => {
return {
...s,
Expand All @@ -317,6 +320,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
ApiContext['updateCurrentAccount']
>(
account => {
isDirty.current = true
setState(s => {
const currentAccount = s.currentAccount

Expand Down Expand Up @@ -363,17 +367,21 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
)

const clearCurrentAccount = React.useCallback(() => {
isDirty.current = true
setState(s => ({
...s,
currentAccount: undefined,
}))
}, [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(() => {
Expand Down
4 changes: 2 additions & 2 deletions src/view/com/auth/login/ChooseAccountForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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)
Expand Down
4 changes: 2 additions & 2 deletions src/view/com/modals/SwitchAccount.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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%']

Expand All @@ -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()

Expand Down
4 changes: 2 additions & 2 deletions src/view/screens/Settings.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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()

Expand Down
4 changes: 2 additions & 2 deletions src/view/shell/desktop/LeftNav.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand All @@ -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

Expand Down

0 comments on commit b0c9cce

Please sign in to comment.