diff options
Diffstat (limited to 'src/state')
69 files changed, 267 insertions, 214 deletions
diff --git a/src/state/cache/post-shadow.ts b/src/state/cache/post-shadow.ts index 7cf72fae4..f9d8b1995 100644 --- a/src/state/cache/post-shadow.ts +++ b/src/state/cache/post-shadow.ts @@ -1,13 +1,15 @@ -import {useEffect, useState, useMemo} from 'react' -import EventEmitter from 'eventemitter3' import {AppBskyFeedDefs} from '@atproto/api' +import EventEmitter from 'eventemitter3' +import {queryClient} from 'lib/react-query' +import {useEffect, useMemo, useState} from 'react' + import {batchedUpdates} from '#/lib/batchedUpdates' -import {Shadow, castAsShadow} from './types' + import {findAllPostsInQueryData as findAllPostsInNotifsQueryData} from '../queries/notifications/feed' import {findAllPostsInQueryData as findAllPostsInFeedQueryData} from '../queries/post-feed' import {findAllPostsInQueryData as findAllPostsInThreadQueryData} from '../queries/post-thread' import {findAllPostsInQueryData as findAllPostsInSearchQueryData} from '../queries/search-posts' -import {queryClient} from 'lib/react-query' +import {castAsShadow, Shadow} from './types' export type {Shadow} from './types' export interface PostShadow { diff --git a/src/state/cache/profile-shadow.ts b/src/state/cache/profile-shadow.ts index 34fe5995d..f688a7b4f 100644 --- a/src/state/cache/profile-shadow.ts +++ b/src/state/cache/profile-shadow.ts @@ -1,7 +1,11 @@ -import {useEffect, useState, useMemo} from 'react' -import EventEmitter from 'eventemitter3' import {AppBskyActorDefs} from '@atproto/api' +import EventEmitter from 'eventemitter3' +import {queryClient} from 'lib/react-query' +import {useEffect, useMemo, useState} from 'react' + import {batchedUpdates} from '#/lib/batchedUpdates' + +import {findAllProfilesInQueryData as findAllProfilesInActorSearchQueryData} from '../queries/actor-search' import {findAllProfilesInQueryData as findAllProfilesInListMembersQueryData} from '../queries/list-members' import {findAllProfilesInQueryData as findAllProfilesInMyBlockedAccountsQueryData} from '../queries/my-blocked-accounts' import {findAllProfilesInQueryData as findAllProfilesInMyMutedAccountsQueryData} from '../queries/my-muted-accounts' @@ -11,9 +15,7 @@ import {findAllProfilesInQueryData as findAllProfilesInProfileQueryData} from '. import {findAllProfilesInQueryData as findAllProfilesInProfileFollowersQueryData} from '../queries/profile-followers' import {findAllProfilesInQueryData as findAllProfilesInProfileFollowsQueryData} from '../queries/profile-follows' import {findAllProfilesInQueryData as findAllProfilesInSuggestedFollowsQueryData} from '../queries/suggested-follows' -import {findAllProfilesInQueryData as findAllProfilesInActorSearchQueryData} from '../queries/actor-search' -import {Shadow, castAsShadow} from './types' -import {queryClient} from 'lib/react-query' +import {castAsShadow, Shadow} from './types' export type {Shadow} from './types' export interface ProfileShadow { diff --git a/src/state/dialogs/index.tsx b/src/state/dialogs/index.tsx index 951105a50..279e02a49 100644 --- a/src/state/dialogs/index.tsx +++ b/src/state/dialogs/index.tsx @@ -1,5 +1,6 @@ import React from 'react' import {SharedValue, useSharedValue} from 'react-native-reanimated' + import {DialogControlRefProps} from '#/components/Dialog' import {Provider as GlobalDialogsProvider} from '#/components/dialogs/Context' diff --git a/src/state/invites.tsx b/src/state/invites.tsx index 6a0d1b590..9dbbefe2f 100644 --- a/src/state/invites.tsx +++ b/src/state/invites.tsx @@ -1,4 +1,5 @@ import React from 'react' + import * as persisted from '#/state/persisted' type StateContext = persisted.Schema['invites'] diff --git a/src/state/lightbox.tsx b/src/state/lightbox.tsx index e3bddaee0..4a4f2807d 100644 --- a/src/state/lightbox.tsx +++ b/src/state/lightbox.tsx @@ -1,5 +1,6 @@ -import React from 'react' import {AppBskyActorDefs} from '@atproto/api' +import React from 'react' + import {useNonReactiveCallback} from '#/lib/hooks/useNonReactiveCallback' interface Lightbox { diff --git a/src/state/modals/index.tsx b/src/state/modals/index.tsx index 691add005..b9af87493 100644 --- a/src/state/modals/index.tsx +++ b/src/state/modals/index.tsx @@ -1,12 +1,13 @@ -import React from 'react' import {AppBskyActorDefs, AppBskyGraphDefs, ModerationUI} from '@atproto/api' +import React from 'react' import {StyleProp, ViewStyle} from 'react-native' import {Image as RNImage} from 'react-native-image-crop-picker' -import {ImageModel} from '#/state/models/media/image' -import {GalleryModel} from '#/state/models/media/gallery' import {useNonReactiveCallback} from '#/lib/hooks/useNonReactiveCallback' import {EmbedPlayerSource} from '#/lib/strings/embed-player' +import {GalleryModel} from '#/state/models/media/gallery' +import {ImageModel} from '#/state/models/media/image' + import {ThreadgateSetting} from '../queries/threadgate' export interface ConfirmModal { diff --git a/src/state/models/media/gallery.ts b/src/state/models/media/gallery.ts index 9c8c13010..52fb623b0 100644 --- a/src/state/models/media/gallery.ts +++ b/src/state/models/media/gallery.ts @@ -1,8 +1,9 @@ +import {getImageDim} from 'lib/media/manip' +import {openPicker} from 'lib/media/picker' import {makeAutoObservable, runInAction} from 'mobx' -import {ImageModel} from './image' import {Image as RNImage} from 'react-native-image-crop-picker' -import {openPicker} from 'lib/media/picker' -import {getImageDim} from 'lib/media/manip' + +import {ImageModel} from './image' interface InitialImageUri { uri: string diff --git a/src/state/models/media/image.e2e.ts b/src/state/models/media/image.e2e.ts index ccabd5047..d2c65bdf7 100644 --- a/src/state/models/media/image.e2e.ts +++ b/src/state/models/media/image.e2e.ts @@ -1,9 +1,9 @@ -import {Image as RNImage} from 'react-native-image-crop-picker' -import {makeAutoObservable} from 'mobx' -import {POST_IMG_MAX} from 'lib/constants' import {ActionCrop} from 'expo-image-manipulator' -import {Position} from 'react-avatar-editor' +import {POST_IMG_MAX} from 'lib/constants' import {Dimensions} from 'lib/media/types' +import {makeAutoObservable} from 'mobx' +import {Position} from 'react-avatar-editor' +import {Image as RNImage} from 'react-native-image-crop-picker' export interface ImageManipulationAttributes { aspectRatio?: '4:3' | '1:1' | '3:4' | 'None' diff --git a/src/state/models/media/image.ts b/src/state/models/media/image.ts index 5c547c148..31f2bba66 100644 --- a/src/state/models/media/image.ts +++ b/src/state/models/media/image.ts @@ -1,13 +1,14 @@ -import {Image as RNImage} from 'react-native-image-crop-picker' -import {makeAutoObservable, runInAction} from 'mobx' -import {POST_IMG_MAX} from 'lib/constants' import * as ImageManipulator from 'expo-image-manipulator' -import {getDataUriSize} from 'lib/media/util' -import {openCropper} from 'lib/media/picker' import {ActionCrop, FlipType, SaveFormat} from 'expo-image-manipulator' -import {Position} from 'react-avatar-editor' +import {POST_IMG_MAX} from 'lib/constants' +import {openCropper} from 'lib/media/picker' import {Dimensions} from 'lib/media/types' +import {getDataUriSize} from 'lib/media/util' +import {makeAutoObservable, runInAction} from 'mobx' import {isIOS} from 'platform/detection' +import {Position} from 'react-avatar-editor' +import {Image as RNImage} from 'react-native-image-crop-picker' + import {logger} from '#/logger' export interface ImageManipulationAttributes { diff --git a/src/state/muted-threads.tsx b/src/state/muted-threads.tsx index 84a717eb7..eeb33e948 100644 --- a/src/state/muted-threads.tsx +++ b/src/state/muted-threads.tsx @@ -1,6 +1,7 @@ import React from 'react' -import * as persisted from '#/state/persisted' + import {track} from '#/lib/analytics/analytics' +import * as persisted from '#/state/persisted' type StateContext = persisted.Schema['mutedThreads'] type ToggleContext = (uri: string) => boolean diff --git a/src/state/persisted/__tests__/index.test.ts b/src/state/persisted/__tests__/index.test.ts index 90c5e0e4e..6832d274a 100644 --- a/src/state/persisted/__tests__/index.test.ts +++ b/src/state/persisted/__tests__/index.test.ts @@ -1,10 +1,10 @@ -import {jest, expect, test, afterEach} from '@jest/globals' +import {afterEach, expect, jest, test} from '@jest/globals' import AsyncStorage from '@react-native-async-storage/async-storage' -import {defaults} from '#/state/persisted/schema' +import * as persisted from '#/state/persisted' import {migrate} from '#/state/persisted/legacy' +import {defaults} from '#/state/persisted/schema' import * as store from '#/state/persisted/store' -import * as persisted from '#/state/persisted' const write = jest.mocked(store.write) const read = jest.mocked(store.read) diff --git a/src/state/persisted/__tests__/migrate.test.ts b/src/state/persisted/__tests__/migrate.test.ts index 97767e273..61250bd88 100644 --- a/src/state/persisted/__tests__/migrate.test.ts +++ b/src/state/persisted/__tests__/migrate.test.ts @@ -1,11 +1,11 @@ -import {jest, expect, test, afterEach} from '@jest/globals' +import {afterEach, expect, jest, test} from '@jest/globals' import AsyncStorage from '@react-native-async-storage/async-storage' -import {defaults, schema} from '#/state/persisted/schema' -import {transform, migrate} from '#/state/persisted/legacy' -import * as store from '#/state/persisted/store' import {logger} from '#/logger' import * as fixtures from '#/state/persisted/__tests__/fixtures' +import {migrate, transform} from '#/state/persisted/legacy' +import {defaults, schema} from '#/state/persisted/schema' +import * as store from '#/state/persisted/store' const write = jest.mocked(store.write) const read = jest.mocked(store.read) diff --git a/src/state/persisted/__tests__/schema.test.ts b/src/state/persisted/__tests__/schema.test.ts index c78a2c27c..8bea28ec0 100644 --- a/src/state/persisted/__tests__/schema.test.ts +++ b/src/state/persisted/__tests__/schema.test.ts @@ -1,8 +1,8 @@ import {expect, test} from '@jest/globals' +import * as fixtures from '#/state/persisted/__tests__/fixtures' import {transform} from '#/state/persisted/legacy' import {defaults, schema} from '#/state/persisted/schema' -import * as fixtures from '#/state/persisted/__tests__/fixtures' test('defaults', () => { expect(() => schema.parse(defaults)).not.toThrow() diff --git a/src/state/persisted/index.ts b/src/state/persisted/index.ts index f57172d2f..4e0aafd82 100644 --- a/src/state/persisted/index.ts +++ b/src/state/persisted/index.ts @@ -1,11 +1,12 @@ import EventEmitter from 'eventemitter3' + +import BroadcastChannel from '#/lib/broadcast' import {logger} from '#/logger' -import {defaults, Schema} from '#/state/persisted/schema' import {migrate} from '#/state/persisted/legacy' +import {defaults, Schema} from '#/state/persisted/schema' import * as store from '#/state/persisted/store' -import BroadcastChannel from '#/lib/broadcast' -export type {Schema, PersistedAccount} from '#/state/persisted/schema' +export type {PersistedAccount, Schema} from '#/state/persisted/schema' export {defaults} from '#/state/persisted/schema' const broadcast = new BroadcastChannel('BSKY_BROADCAST_CHANNEL') diff --git a/src/state/persisted/legacy.ts b/src/state/persisted/legacy.ts index fd94a96a2..9918ac462 100644 --- a/src/state/persisted/legacy.ts +++ b/src/state/persisted/legacy.ts @@ -2,7 +2,7 @@ import AsyncStorage from '@react-native-async-storage/async-storage' import {logger} from '#/logger' import {defaults, Schema, schema} from '#/state/persisted/schema' -import {write, read} from '#/state/persisted/store' +import {read, write} from '#/state/persisted/store' /** * The shape of the serialized data from our legacy Mobx store. diff --git a/src/state/persisted/schema.ts b/src/state/persisted/schema.ts index 0aefaa474..14328748e 100644 --- a/src/state/persisted/schema.ts +++ b/src/state/persisted/schema.ts @@ -1,4 +1,5 @@ import {z} from 'zod' + import {deviceLocales} from '#/platform/detection' const externalEmbedOptions = ['show', 'hide'] as const diff --git a/src/state/persisted/store.ts b/src/state/persisted/store.ts index bb7fbed89..0971b5d71 100644 --- a/src/state/persisted/store.ts +++ b/src/state/persisted/store.ts @@ -1,7 +1,7 @@ import AsyncStorage from '@react-native-async-storage/async-storage' -import {Schema, schema} from '#/state/persisted/schema' import {logger} from '#/logger' +import {Schema, schema} from '#/state/persisted/schema' const BSKY_STORAGE = 'BSKY_STORAGE' diff --git a/src/state/preferences/alt-text-required.tsx b/src/state/preferences/alt-text-required.tsx index 81de9e006..642e790fb 100644 --- a/src/state/preferences/alt-text-required.tsx +++ b/src/state/preferences/alt-text-required.tsx @@ -1,4 +1,5 @@ import React from 'react' + import * as persisted from '#/state/persisted' type StateContext = persisted.Schema['requireAltTextEnabled'] diff --git a/src/state/preferences/external-embeds-prefs.tsx b/src/state/preferences/external-embeds-prefs.tsx index 0f6385fe8..1c6429adc 100644 --- a/src/state/preferences/external-embeds-prefs.tsx +++ b/src/state/preferences/external-embeds-prefs.tsx @@ -1,6 +1,7 @@ +import {EmbedPlayerSource} from 'lib/strings/embed-player' import React from 'react' + import * as persisted from '#/state/persisted' -import {EmbedPlayerSource} from 'lib/strings/embed-player' type StateContext = persisted.Schema['externalEmbeds'] type SetContext = (source: EmbedPlayerSource, value: 'show' | 'hide') => void diff --git a/src/state/preferences/feed-tuners.tsx b/src/state/preferences/feed-tuners.tsx index c4954d20a..48131707f 100644 --- a/src/state/preferences/feed-tuners.tsx +++ b/src/state/preferences/feed-tuners.tsx @@ -1,9 +1,11 @@ import {useMemo} from 'react' + import {FeedTuner} from '#/lib/api/feed-manip' + import {FeedDescriptor} from '../queries/post-feed' -import {useLanguagePrefs} from './languages' import {usePreferencesQuery} from '../queries/preferences' import {useSession} from '../session' +import {useLanguagePrefs} from './languages' export function useFeedTuners(feedDesc: FeedDescriptor) { const langPrefs = useLanguagePrefs() diff --git a/src/state/preferences/hidden-posts.tsx b/src/state/preferences/hidden-posts.tsx index 11119ce75..2c6a373e1 100644 --- a/src/state/preferences/hidden-posts.tsx +++ b/src/state/preferences/hidden-posts.tsx @@ -1,4 +1,5 @@ import React from 'react' + import * as persisted from '#/state/persisted' type SetStateCb = ( diff --git a/src/state/preferences/in-app-browser.tsx b/src/state/preferences/in-app-browser.tsx index 2398f1f81..c0eb541bb 100644 --- a/src/state/preferences/in-app-browser.tsx +++ b/src/state/preferences/in-app-browser.tsx @@ -1,15 +1,17 @@ -import React from 'react' -import * as persisted from '#/state/persisted' -import {Linking} from 'react-native' import * as WebBrowser from 'expo-web-browser' -import {isNative} from '#/platform/detection' -import {useModalControls} from '../modals' import {usePalette} from 'lib/hooks/usePalette' import { + createBskyAppAbsoluteUrl, isBskyRSSUrl, isRelativeUrl, - createBskyAppAbsoluteUrl, } from 'lib/strings/url-helpers' +import React from 'react' +import {Linking} from 'react-native' + +import {isNative} from '#/platform/detection' +import * as persisted from '#/state/persisted' + +import {useModalControls} from '../modals' type StateContext = persisted.Schema['useInAppBrowser'] type SetContext = (v: persisted.Schema['useInAppBrowser']) => void diff --git a/src/state/preferences/index.tsx b/src/state/preferences/index.tsx index a442b763a..6c045326d 100644 --- a/src/state/preferences/index.tsx +++ b/src/state/preferences/index.tsx @@ -1,11 +1,11 @@ import React from 'react' -import {Provider as LanguagesProvider} from './languages' + import {Provider as AltTextRequiredProvider} from '../preferences/alt-text-required' import {Provider as HiddenPostsProvider} from '../preferences/hidden-posts' import {Provider as ExternalEmbedsProvider} from './external-embeds-prefs' import {Provider as InAppBrowserProvider} from './in-app-browser' +import {Provider as LanguagesProvider} from './languages' -export {useLanguagePrefs, useLanguagePrefsApi} from './languages' export { useRequireAltTextEnabled, useSetRequireAltTextEnabled, @@ -15,6 +15,7 @@ export { useSetExternalEmbedPref, } from './external-embeds-prefs' export * from './hidden-posts' +export {useLanguagePrefs, useLanguagePrefsApi} from './languages' export function Provider({children}: React.PropsWithChildren<{}>) { return ( diff --git a/src/state/preferences/languages.tsx b/src/state/preferences/languages.tsx index df774c05e..2905a465e 100644 --- a/src/state/preferences/languages.tsx +++ b/src/state/preferences/languages.tsx @@ -1,6 +1,7 @@ import React from 'react' -import * as persisted from '#/state/persisted' + import {AppLanguage} from '#/locale/languages' +import * as persisted from '#/state/persisted' type SetStateCb = ( s: persisted.Schema['languagePrefs'], diff --git a/src/state/queries/actor-autocomplete.ts b/src/state/queries/actor-autocomplete.ts index 3159ad7aa..9fffe3bd7 100644 --- a/src/state/queries/actor-autocomplete.ts +++ b/src/state/queries/actor-autocomplete.ts @@ -1,17 +1,18 @@ -import React from 'react' -import {AppBskyActorDefs, ModerationOpts, moderateProfile} from '@atproto/api' +import {AppBskyActorDefs, moderateProfile, ModerationOpts} from '@atproto/api' import {useQuery, useQueryClient} from '@tanstack/react-query' +import React from 'react' +import {isInvalidHandle} from '#/lib/strings/handles' import {logger} from '#/logger' -import {getAgent} from '#/state/session' -import {useMyFollowsQuery} from '#/state/queries/my-follows' import {STALE} from '#/state/queries' +import {useMyFollowsQuery} from '#/state/queries/my-follows' +import {getAgent} from '#/state/session' + import { DEFAULT_LOGGED_OUT_PREFERENCES, getModerationOpts, useModerationOpts, } from './preferences' -import {isInvalidHandle} from '#/lib/strings/handles' const DEFAULT_MOD_OPTS = getModerationOpts({ userDid: '', diff --git a/src/state/queries/actor-search.ts b/src/state/queries/actor-search.ts index f72511548..9f85ad613 100644 --- a/src/state/queries/actor-search.ts +++ b/src/state/queries/actor-search.ts @@ -1,8 +1,8 @@ import {AppBskyActorDefs} from '@atproto/api' import {QueryClient, useQuery} from '@tanstack/react-query' -import {getAgent} from '#/state/session' import {STALE} from '#/state/queries' +import {getAgent} from '#/state/session' export const RQKEY = (prefix: string) => ['actor-search', prefix] diff --git a/src/state/queries/app-passwords.ts b/src/state/queries/app-passwords.ts index 014244f01..91c01c1f3 100644 --- a/src/state/queries/app-passwords.ts +++ b/src/state/queries/app-passwords.ts @@ -1,7 +1,8 @@ import {ComAtprotoServerCreateAppPassword} from '@atproto/api' -import {useQuery, useQueryClient, useMutation} from '@tanstack/react-query' +import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query' import {STALE} from '#/state/queries' + import {getAgent} from '../session' export const RQKEY = () => ['app-passwords'] diff --git a/src/state/queries/feed.ts b/src/state/queries/feed.ts index 1fa92c291..53ce885a5 100644 --- a/src/state/queries/feed.ts +++ b/src/state/queries/feed.ts @@ -1,24 +1,24 @@ import { - useQuery, - useInfiniteQuery, - InfiniteData, - QueryKey, - useMutation, -} from '@tanstack/react-query' -import { - AtUri, - RichText, AppBskyFeedDefs, AppBskyGraphDefs, AppBskyUnspeccedGetPopularFeedGenerators, + AtUri, + RichText, } from '@atproto/api' +import { + InfiniteData, + QueryKey, + useInfiniteQuery, + useMutation, + useQuery, +} from '@tanstack/react-query' -import {router} from '#/routes' import {sanitizeDisplayName} from '#/lib/strings/display-names' import {sanitizeHandle} from '#/lib/strings/handles' -import {getAgent} from '#/state/session' -import {usePreferencesQuery} from '#/state/queries/preferences' +import {router} from '#/routes' import {STALE} from '#/state/queries' +import {usePreferencesQuery} from '#/state/queries/preferences' +import {getAgent} from '#/state/session' export type FeedSourceFeedInfo = { type: 'feed' diff --git a/src/state/queries/handle.ts b/src/state/queries/handle.ts index d7c411699..77d757d83 100644 --- a/src/state/queries/handle.ts +++ b/src/state/queries/handle.ts @@ -1,8 +1,8 @@ +import {useMutation, useQueryClient} from '@tanstack/react-query' import React from 'react' -import {useQueryClient, useMutation} from '@tanstack/react-query' -import {getAgent} from '#/state/session' import {STALE} from '#/state/queries' +import {getAgent} from '#/state/session' const fetchHandleQueryKey = (handleOrDid: string) => ['handle', handleOrDid] const fetchDidQueryKey = (handleOrDid: string) => ['did', handleOrDid] diff --git a/src/state/queries/invites.ts b/src/state/queries/invites.ts index 9ae9c707f..9ea49ebca 100644 --- a/src/state/queries/invites.ts +++ b/src/state/queries/invites.ts @@ -1,9 +1,9 @@ import {ComAtprotoServerDefs} from '@atproto/api' import {useQuery} from '@tanstack/react-query' -import {getAgent} from '#/state/session' -import {STALE} from '#/state/queries' import {cleanError} from '#/lib/strings/errors' +import {STALE} from '#/state/queries' +import {getAgent} from '#/state/session' function isInviteAvailable(invite: ComAtprotoServerDefs.InviteCode): boolean { return invite.available - invite.uses.length > 0 && !invite.disabled diff --git a/src/state/queries/list-members.ts b/src/state/queries/list-members.ts index d84089c90..8bce0e418 100644 --- a/src/state/queries/list-members.ts +++ b/src/state/queries/list-members.ts @@ -1,13 +1,13 @@ import {AppBskyActorDefs, AppBskyGraphGetList} from '@atproto/api' import { - useInfiniteQuery, InfiniteData, QueryClient, QueryKey, + useInfiniteQuery, } from '@tanstack/react-query' -import {getAgent} from '#/state/session' import {STALE} from '#/state/queries' +import {getAgent} from '#/state/session' const PAGE_SIZE = 30 type RQPageParam = string | undefined diff --git a/src/state/queries/list-memberships.ts b/src/state/queries/list-memberships.ts index 6cae3fa2e..9df50c403 100644 --- a/src/state/queries/list-memberships.ts +++ b/src/state/queries/list-memberships.ts @@ -17,9 +17,9 @@ import {AtUri} from '@atproto/api' import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query' -import {useSession, getAgent} from '#/state/session' -import {RQKEY as LIST_MEMBERS_RQKEY} from '#/state/queries/list-members' import {STALE} from '#/state/queries' +import {RQKEY as LIST_MEMBERS_RQKEY} from '#/state/queries/list-members' +import {getAgent, useSession} from '#/state/session' // sanity limit is SANITY_PAGE_LIMIT*PAGE_SIZE total records const SANITY_PAGE_LIMIT = 1000 diff --git a/src/state/queries/list.ts b/src/state/queries/list.ts index 845658a27..1bdf96e17 100644 --- a/src/state/queries/list.ts +++ b/src/state/queries/list.ts @@ -1,20 +1,22 @@ import { - AtUri, + AppBskyGraphDefs, AppBskyGraphGetList, AppBskyGraphList, - AppBskyGraphDefs, + AtUri, Facet, } from '@atproto/api' -import {Image as RNImage} from 'react-native-image-crop-picker' -import {useQuery, useMutation, useQueryClient} from '@tanstack/react-query' +import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query' import chunk from 'lodash.chunk' -import {useSession, getAgent} from '../session' -import {invalidate as invalidateMyLists} from './my-lists' -import {RQKEY as PROFILE_LISTS_RQKEY} from './profile-lists' +import {Image as RNImage} from 'react-native-image-crop-picker' + import {uploadBlob} from '#/lib/api' import {until} from '#/lib/async/until' import {STALE} from '#/state/queries' +import {getAgent, useSession} from '../session' +import {invalidate as invalidateMyLists} from './my-lists' +import {RQKEY as PROFILE_LISTS_RQKEY} from './profile-lists' + export const RQKEY = (uri: string) => ['list', uri] export function useListQuery(uri?: string) { diff --git a/src/state/queries/my-blocked-accounts.ts b/src/state/queries/my-blocked-accounts.ts index badaaec34..6e981f1e2 100644 --- a/src/state/queries/my-blocked-accounts.ts +++ b/src/state/queries/my-blocked-accounts.ts @@ -1,9 +1,9 @@ import {AppBskyActorDefs, AppBskyGraphGetBlocks} from '@atproto/api' import { - useInfiniteQuery, InfiniteData, QueryClient, QueryKey, + useInfiniteQuery, } from '@tanstack/react-query' import {getAgent} from '#/state/session' diff --git a/src/state/queries/my-follows.ts b/src/state/queries/my-follows.ts index f95c3f5a7..e66b642e2 100644 --- a/src/state/queries/my-follows.ts +++ b/src/state/queries/my-follows.ts @@ -1,8 +1,10 @@ import {AppBskyActorDefs} from '@atproto/api' import {useQuery} from '@tanstack/react-query' -import {useSession, getAgent} from '../session' + import {STALE} from '#/state/queries' +import {getAgent, useSession} from '../session' + // sanity limit is SANITY_PAGE_LIMIT*PAGE_SIZE total records const SANITY_PAGE_LIMIT = 1000 const PAGE_SIZE = 100 diff --git a/src/state/queries/my-lists.ts b/src/state/queries/my-lists.ts index d53e13032..5cf3dfca0 100644 --- a/src/state/queries/my-lists.ts +++ b/src/state/queries/my-lists.ts @@ -1,9 +1,9 @@ import {AppBskyGraphDefs} from '@atproto/api' -import {useQuery, QueryClient} from '@tanstack/react-query' +import {QueryClient, useQuery} from '@tanstack/react-query' import {accumulate} from '#/lib/async/accumulate' -import {useSession, getAgent} from '#/state/session' import {STALE} from '#/state/queries' +import {getAgent, useSession} from '#/state/session' export type MyListsFilter = | 'all' diff --git a/src/state/queries/my-muted-accounts.ts b/src/state/queries/my-muted-accounts.ts index 8929e04d3..a397887d8 100644 --- a/src/state/queries/my-muted-accounts.ts +++ b/src/state/queries/my-muted-accounts.ts @@ -1,9 +1,9 @@ import {AppBskyActorDefs, AppBskyGraphGetMutes} from '@atproto/api' import { - useInfiniteQuery, InfiniteData, QueryClient, QueryKey, + useInfiniteQuery, } from '@tanstack/react-query' import {getAgent} from '#/state/session' diff --git a/src/state/queries/notifications/feed.ts b/src/state/queries/notifications/feed.ts index 405d054d4..dbc23fcbd 100644 --- a/src/state/queries/notifications/feed.ts +++ b/src/state/queries/notifications/feed.ts @@ -16,24 +16,26 @@ * 3. Don't call this query's `refetch()` if you're trying to sync latest; call `checkUnread()` instead. */ -import {useEffect, useRef} from 'react' import {AppBskyFeedDefs} from '@atproto/api' import { - useInfiniteQuery, InfiniteData, + QueryClient, QueryKey, + useInfiniteQuery, useQueryClient, - QueryClient, } from '@tanstack/react-query' -import {useModerationOpts} from '../preferences' -import {useUnreadNotificationsApi} from './unread' -import {fetchPage} from './util' -import {FeedPage} from './types' +import {useEffect, useRef} from 'react' + import {useMutedThreads} from '#/state/muted-threads' + import {STALE} from '..' +import {useModerationOpts} from '../preferences' import {embedViewRecordToPostView, getEmbeddedPost} from '../util' +import {FeedPage} from './types' +import {useUnreadNotificationsApi} from './unread' +import {fetchPage} from './util' -export type {NotificationType, FeedNotification, FeedPage} from './types' +export type {FeedNotification, FeedPage, NotificationType} from './types' const PAGE_SIZE = 30 diff --git a/src/state/queries/notifications/types.ts b/src/state/queries/notifications/types.ts index 812236cf0..db1cf878f 100644 --- a/src/state/queries/notifications/types.ts +++ b/src/state/queries/notifications/types.ts @@ -1,6 +1,6 @@ import { - AppBskyNotificationListNotifications, AppBskyFeedDefs, + AppBskyNotificationListNotifications, } from '@atproto/api' export type NotificationType = diff --git a/src/state/queries/notifications/unread.tsx b/src/state/queries/notifications/unread.tsx index e7a0631ec..2f55872eb 100644 --- a/src/state/queries/notifications/unread.tsx +++ b/src/state/queries/notifications/unread.tsx @@ -2,20 +2,22 @@ * A kind of companion API to ./feed.ts. See that file for more info. */ -import React from 'react' -import * as Notifications from 'expo-notifications' import {useQueryClient} from '@tanstack/react-query' +import * as Notifications from 'expo-notifications' +import React from 'react' +import {AppState} from 'react-native' + import BroadcastChannel from '#/lib/broadcast' -import {useSession, getAgent} from '#/state/session' -import {useModerationOpts} from '../preferences' -import {fetchPage} from './util' -import {CachedFeedPage, FeedPage} from './types' +import {logger} from '#/logger' import {isNative} from '#/platform/detection' import {useMutedThreads} from '#/state/muted-threads' -import {RQKEY as RQKEY_NOTIFS} from './feed' -import {logger} from '#/logger' +import {getAgent, useSession} from '#/state/session' + +import {useModerationOpts} from '../preferences' import {truncateAndInvalidate} from '../util' -import {AppState} from 'react-native' +import {RQKEY as RQKEY_NOTIFS} from './feed' +import {CachedFeedPage, FeedPage} from './types' +import {fetchPage} from './util' const UPDATE_INTERVAL = 30 * 1e3 // 30sec diff --git a/src/state/queries/notifications/util.ts b/src/state/queries/notifications/util.ts index 626d3e911..f019c8966 100644 --- a/src/state/queries/notifications/util.ts +++ b/src/state/queries/notifications/util.ts @@ -1,19 +1,21 @@ import { - AppBskyNotificationListNotifications, - ModerationOpts, - moderateProfile, + AppBskyEmbedRecord, AppBskyFeedDefs, + AppBskyFeedLike, AppBskyFeedPost, AppBskyFeedRepost, - AppBskyFeedLike, - AppBskyEmbedRecord, + AppBskyNotificationListNotifications, + moderateProfile, + ModerationOpts, } from '@atproto/api' -import {moderatePost_wrapped as moderatePost} from '#/lib/moderatePost_wrapped' -import chunk from 'lodash.chunk' import {QueryClient} from '@tanstack/react-query' +import chunk from 'lodash.chunk' + +import {moderatePost_wrapped as moderatePost} from '#/lib/moderatePost_wrapped' + import {getAgent} from '../../session' import {precacheProfile} from '../profile' -import {NotificationType, FeedNotification, FeedPage} from './types' +import {FeedNotification, FeedPage, NotificationType} from './types' const GROUPABLE_REASONS = ['like', 'repost', 'follow'] const MS_1HR = 1e3 * 60 * 60 diff --git a/src/state/queries/post-feed.ts b/src/state/queries/post-feed.ts index c295ffcb0..db6debc5a 100644 --- a/src/state/queries/post-feed.ts +++ b/src/state/queries/post-feed.ts @@ -1,5 +1,3 @@ -import React, {useCallback, useEffect, useRef} from 'react' -import {AppState} from 'react-native' import { AppBskyFeedDefs, AppBskyFeedPost, @@ -7,34 +5,38 @@ import { PostModeration, } from '@atproto/api' import { - useInfiniteQuery, InfiniteData, - QueryKey, QueryClient, + QueryKey, + useInfiniteQuery, useQueryClient, } from '@tanstack/react-query' -import {moderatePost_wrapped as moderatePost} from '#/lib/moderatePost_wrapped' -import {useFeedTuners} from '../preferences/feed-tuners' -import {FeedTuner, FeedTunerFn, NoopFeedTuner} from 'lib/api/feed-manip' -import {FeedAPI, ReasonFeedSource} from 'lib/api/feed/types' -import {FollowingFeedAPI} from 'lib/api/feed/following' import {AuthorFeedAPI} from 'lib/api/feed/author' -import {LikesFeedAPI} from 'lib/api/feed/likes' import {CustomFeedAPI} from 'lib/api/feed/custom' +import {FollowingFeedAPI} from 'lib/api/feed/following' +import {LikesFeedAPI} from 'lib/api/feed/likes' import {ListFeedAPI} from 'lib/api/feed/list' import {MergeFeedAPI} from 'lib/api/feed/merge' +import {FeedAPI, ReasonFeedSource} from 'lib/api/feed/types' +import {FeedTuner, FeedTunerFn, NoopFeedTuner} from 'lib/api/feed-manip' +import {BSKY_FEED_OWNER_DIDS} from 'lib/constants' +import {queryClient} from 'lib/react-query' +import React, {useCallback, useEffect, useRef} from 'react' +import {AppState} from 'react-native' + import {HomeFeedAPI} from '#/lib/api/feed/home' +import {moderatePost_wrapped as moderatePost} from '#/lib/moderatePost_wrapped' import {logger} from '#/logger' import {STALE} from '#/state/queries' -import {precacheFeedPostProfiles} from './profile' -import {getAgent} from '#/state/session' import {DEFAULT_LOGGED_OUT_PREFERENCES} from '#/state/queries/preferences/const' import {getModerationOpts} from '#/state/queries/preferences/moderation' +import {getAgent} from '#/state/session' import {KnownError} from '#/view/com/posts/FeedErrorMessage' -import {embedViewRecordToPostView, getEmbeddedPost} from './util' + +import {useFeedTuners} from '../preferences/feed-tuners' import {useModerationOpts} from './preferences' -import {queryClient} from 'lib/react-query' -import {BSKY_FEED_OWNER_DIDS} from 'lib/constants' +import {precacheFeedPostProfiles} from './profile' +import {embedViewRecordToPostView, getEmbeddedPost} from './util' type ActorDid = string type AuthorFilter = diff --git a/src/state/queries/post-liked-by.ts b/src/state/queries/post-liked-by.ts index 2cde07f28..b48b0e92e 100644 --- a/src/state/queries/post-liked-by.ts +++ b/src/state/queries/post-liked-by.ts @@ -1,9 +1,9 @@ import {AppBskyActorDefs, AppBskyFeedGetLikes} from '@atproto/api' import { - useInfiniteQuery, InfiniteData, QueryClient, QueryKey, + useInfiniteQuery, } from '@tanstack/react-query' import {getAgent} from '#/state/session' diff --git a/src/state/queries/post-reposted-by.ts b/src/state/queries/post-reposted-by.ts index db5fa6514..c33d1b2bb 100644 --- a/src/state/queries/post-reposted-by.ts +++ b/src/state/queries/post-reposted-by.ts @@ -1,9 +1,9 @@ import {AppBskyActorDefs, AppBskyFeedGetRepostedBy} from '@atproto/api' import { - useInfiniteQuery, InfiniteData, QueryClient, QueryKey, + useInfiniteQuery, } from '@tanstack/react-query' import {getAgent} from '#/state/session' diff --git a/src/state/queries/post-thread.ts b/src/state/queries/post-thread.ts index 26d40599c..e46b770da 100644 --- a/src/state/queries/post-thread.ts +++ b/src/state/queries/post-thread.ts @@ -1,15 +1,16 @@ import { + AppBskyEmbedRecord, AppBskyFeedDefs, - AppBskyFeedPost, AppBskyFeedGetPostThread, - AppBskyEmbedRecord, + AppBskyFeedPost, } from '@atproto/api' -import {useQuery, useQueryClient, QueryClient} from '@tanstack/react-query' +import {QueryClient, useQuery, useQueryClient} from '@tanstack/react-query' -import {getAgent} from '#/state/session' import {UsePreferencesQueryResponse} from '#/state/queries/preferences/types' -import {findAllPostsInQueryData as findAllPostsInFeedQueryData} from './post-feed' +import {getAgent} from '#/state/session' + import {findAllPostsInQueryData as findAllPostsInNotifsQueryData} from './notifications/feed' +import {findAllPostsInQueryData as findAllPostsInFeedQueryData} from './post-feed' import {precacheThreadPostProfiles} from './profile' import {getEmbeddedPost} from './util' diff --git a/src/state/queries/post.ts b/src/state/queries/post.ts index eb59f7da4..1179eb22b 100644 --- a/src/state/queries/post.ts +++ b/src/state/queries/post.ts @@ -1,11 +1,12 @@ -import {useCallback} from 'react' import {AppBskyFeedDefs, AtUri} from '@atproto/api' -import {useQuery, useMutation, useQueryClient} from '@tanstack/react-query' -import {Shadow} from '#/state/cache/types' -import {getAgent} from '#/state/session' -import {updatePostShadow} from '#/state/cache/post-shadow' +import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query' +import {useCallback} from 'react' + import {track} from '#/lib/analytics/analytics' import {useToggleMutationQueue} from '#/lib/hooks/useToggleMutationQueue' +import {updatePostShadow} from '#/state/cache/post-shadow' +import {Shadow} from '#/state/cache/types' +import {getAgent} from '#/state/session' export const RQKEY = (postUri: string) => ['post', postUri] diff --git a/src/state/queries/preferences/const.ts b/src/state/queries/preferences/const.ts index 53c9e482a..97e54a8ce 100644 --- a/src/state/queries/preferences/const.ts +++ b/src/state/queries/preferences/const.ts @@ -1,8 +1,8 @@ +import {DEFAULT_LOGGED_OUT_LABEL_PREFERENCES} from '#/state/queries/preferences/moderation' import { - UsePreferencesQueryResponse, ThreadViewPreferences, + UsePreferencesQueryResponse, } from '#/state/queries/preferences/types' -import {DEFAULT_LOGGED_OUT_LABEL_PREFERENCES} from '#/state/queries/preferences/moderation' export const DEFAULT_HOME_FEED_PREFS: UsePreferencesQueryResponse['feedViewPrefs'] = { diff --git a/src/state/queries/preferences/index.ts b/src/state/queries/preferences/index.ts index 37ef10ae0..88b315f95 100644 --- a/src/state/queries/preferences/index.ts +++ b/src/state/queries/preferences/index.ts @@ -1,33 +1,33 @@ -import {useMemo} from 'react' -import {useQuery, useMutation, useQueryClient} from '@tanstack/react-query' import { - LabelPreference, - BskyFeedViewPreference, AppBskyActorDefs, + BskyFeedViewPreference, + LabelPreference, } from '@atproto/api' +import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query' +import {useMemo} from 'react' import {track} from '#/lib/analytics/analytics' import {getAge} from '#/lib/strings/time' -import {useSession, getAgent} from '#/state/session' +import {useHiddenPosts} from '#/state/preferences/hidden-posts' +import {STALE} from '#/state/queries' +import { + DEFAULT_HOME_FEED_PREFS, + DEFAULT_LOGGED_OUT_PREFERENCES, + DEFAULT_THREAD_VIEW_PREFS, +} from '#/state/queries/preferences/const' import {DEFAULT_LABEL_PREFERENCES} from '#/state/queries/preferences/moderation' +import {getModerationOpts} from '#/state/queries/preferences/moderation' import { ConfigurableLabelGroup, - UsePreferencesQueryResponse, ThreadViewPreferences, + UsePreferencesQueryResponse, } from '#/state/queries/preferences/types' import {temp__migrateLabelPref} from '#/state/queries/preferences/util' -import { - DEFAULT_HOME_FEED_PREFS, - DEFAULT_THREAD_VIEW_PREFS, - DEFAULT_LOGGED_OUT_PREFERENCES, -} from '#/state/queries/preferences/const' -import {getModerationOpts} from '#/state/queries/preferences/moderation' -import {STALE} from '#/state/queries' -import {useHiddenPosts} from '#/state/preferences/hidden-posts' +import {getAgent, useSession} from '#/state/session' -export * from '#/state/queries/preferences/types' -export * from '#/state/queries/preferences/moderation' export * from '#/state/queries/preferences/const' +export * from '#/state/queries/preferences/moderation' +export * from '#/state/queries/preferences/types' export const preferencesQueryKey = ['getPreferences'] diff --git a/src/state/queries/preferences/moderation.ts b/src/state/queries/preferences/moderation.ts index cdae52937..bf5139be5 100644 --- a/src/state/queries/preferences/moderation.ts +++ b/src/state/queries/preferences/moderation.ts @@ -1,12 +1,12 @@ import { - LabelPreference, ComAtprotoLabelDefs, + LabelPreference, ModerationOpts, } from '@atproto/api' import { - LabelGroup, ConfigurableLabelGroup, + LabelGroup, UsePreferencesQueryResponse, } from '#/state/queries/preferences/types' diff --git a/src/state/queries/preferences/types.ts b/src/state/queries/preferences/types.ts index 45c9eed7d..3c65c31e0 100644 --- a/src/state/queries/preferences/types.ts +++ b/src/state/queries/preferences/types.ts @@ -1,8 +1,8 @@ import { + BskyFeedViewPreference, BskyPreferences, - LabelPreference, BskyThreadViewPreference, - BskyFeedViewPreference, + LabelPreference, } from '@atproto/api' export const configurableAdultLabelGroups = [ diff --git a/src/state/queries/profile-extra-info.ts b/src/state/queries/profile-extra-info.ts index 8fc32c33e..e5bdff58a 100644 --- a/src/state/queries/profile-extra-info.ts +++ b/src/state/queries/profile-extra-info.ts @@ -1,7 +1,7 @@ import {useQuery} from '@tanstack/react-query' -import {getAgent} from '#/state/session' import {STALE} from '#/state/queries' +import {getAgent} from '#/state/session' // TODO refactor invalidate on mutate? export const RQKEY = (did: string) => ['profile-extra-info', did] diff --git a/src/state/queries/profile-feedgens.ts b/src/state/queries/profile-feedgens.ts index 7d33eb9c8..5b01259ec 100644 --- a/src/state/queries/profile-feedgens.ts +++ b/src/state/queries/profile-feedgens.ts @@ -1,5 +1,5 @@ import {AppBskyFeedGetActorFeeds} from '@atproto/api' -import {useInfiniteQuery, InfiniteData, QueryKey} from '@tanstack/react-query' +import {InfiniteData, QueryKey, useInfiniteQuery} from '@tanstack/react-query' import {getAgent} from '#/state/session' diff --git a/src/state/queries/profile-followers.ts b/src/state/queries/profile-followers.ts index fdefc8253..28cc82d7a 100644 --- a/src/state/queries/profile-followers.ts +++ b/src/state/queries/profile-followers.ts @@ -1,9 +1,9 @@ import {AppBskyActorDefs, AppBskyGraphGetFollowers} from '@atproto/api' import { - useInfiniteQuery, InfiniteData, QueryClient, QueryKey, + useInfiniteQuery, } from '@tanstack/react-query' import {getAgent} from '#/state/session' diff --git a/src/state/queries/profile-follows.ts b/src/state/queries/profile-follows.ts index 428c8aebd..697074d07 100644 --- a/src/state/queries/profile-follows.ts +++ b/src/state/queries/profile-follows.ts @@ -1,13 +1,13 @@ import {AppBskyActorDefs, AppBskyGraphGetFollows} from '@atproto/api' import { - useInfiniteQuery, InfiniteData, QueryClient, QueryKey, + useInfiniteQuery, } from '@tanstack/react-query' -import {getAgent} from '#/state/session' import {STALE} from '#/state/queries' +import {getAgent} from '#/state/session' const PAGE_SIZE = 30 type RQPageParam = string | undefined diff --git a/src/state/queries/profile-lists.ts b/src/state/queries/profile-lists.ts index 505d33b9f..d20f8a031 100644 --- a/src/state/queries/profile-lists.ts +++ b/src/state/queries/profile-lists.ts @@ -1,5 +1,6 @@ import {AppBskyGraphGetLists} from '@atproto/api' -import {useInfiniteQuery, InfiniteData, QueryKey} from '@tanstack/react-query' +import {InfiniteData, QueryKey, useInfiniteQuery} from '@tanstack/react-query' + import {getAgent} from '#/state/session' const PAGE_SIZE = 30 diff --git a/src/state/queries/profile.ts b/src/state/queries/profile.ts index e81ea0f3f..5c4c071c6 100644 --- a/src/state/queries/profile.ts +++ b/src/state/queries/profile.ts @@ -1,31 +1,33 @@ -import {useCallback} from 'react' import { - AtUri, AppBskyActorDefs, - AppBskyActorProfile, AppBskyActorGetProfile, - AppBskyFeedDefs, + AppBskyActorProfile, AppBskyEmbedRecord, AppBskyEmbedRecordWithMedia, + AppBskyFeedDefs, + AtUri, } from '@atproto/api' import { + QueryClient, + useMutation, useQuery, useQueryClient, - useMutation, - QueryClient, } from '@tanstack/react-query' +import {useCallback} from 'react' import {Image as RNImage} from 'react-native-image-crop-picker' -import {useSession, getAgent} from '../session' -import {updateProfileShadow} from '../cache/profile-shadow' + +import {track} from '#/lib/analytics/analytics' import {uploadBlob} from '#/lib/api' import {until} from '#/lib/async/until' +import {useToggleMutationQueue} from '#/lib/hooks/useToggleMutationQueue' import {Shadow} from '#/state/cache/types' +import {STALE} from '#/state/queries' import {resetProfilePostsQueries} from '#/state/queries/post-feed' -import {useToggleMutationQueue} from '#/lib/hooks/useToggleMutationQueue' -import {RQKEY as RQKEY_MY_MUTED} from './my-muted-accounts' + +import {updateProfileShadow} from '../cache/profile-shadow' +import {getAgent, useSession} from '../session' import {RQKEY as RQKEY_MY_BLOCKED} from './my-blocked-accounts' -import {STALE} from '#/state/queries' -import {track} from '#/lib/analytics/analytics' +import {RQKEY as RQKEY_MY_MUTED} from './my-muted-accounts' import {ThreadNode} from './post-thread' export const RQKEY = (did: string) => ['profile', did] diff --git a/src/state/queries/resolve-uri.ts b/src/state/queries/resolve-uri.ts index 95fc867dd..dd6769baa 100644 --- a/src/state/queries/resolve-uri.ts +++ b/src/state/queries/resolve-uri.ts @@ -1,9 +1,10 @@ +import {AppBskyActorDefs, AtUri} from '@atproto/api' import {useQuery, useQueryClient, UseQueryResult} from '@tanstack/react-query' -import {AtUri, AppBskyActorDefs} from '@atproto/api' -import {profileBasicQueryKey as RQKEY_PROFILE_BASIC} from './profile' -import {getAgent} from '#/state/session' import {STALE} from '#/state/queries' +import {getAgent} from '#/state/session' + +import {profileBasicQueryKey as RQKEY_PROFILE_BASIC} from './profile' export const RQKEY = (didOrHandle: string) => ['resolved-did', didOrHandle] diff --git a/src/state/queries/search-posts.ts b/src/state/queries/search-posts.ts index e0b317ca9..58dba5968 100644 --- a/src/state/queries/search-posts.ts +++ b/src/state/queries/search-posts.ts @@ -1,12 +1,13 @@ import {AppBskyFeedDefs, AppBskyFeedSearchPosts} from '@atproto/api' import { - useInfiniteQuery, InfiniteData, - QueryKey, QueryClient, + QueryKey, + useInfiniteQuery, } from '@tanstack/react-query' import {getAgent} from '#/state/session' + import {embedViewRecordToPostView, getEmbeddedPost} from './util' const searchPostsQueryKey = ({query}: {query: string}) => [ diff --git a/src/state/queries/suggested-feeds.ts b/src/state/queries/suggested-feeds.ts index 7e6b534ad..f8f40384d 100644 --- a/src/state/queries/suggested-feeds.ts +++ b/src/state/queries/suggested-feeds.ts @@ -1,8 +1,8 @@ -import {useInfiniteQuery, InfiniteData, QueryKey} from '@tanstack/react-query' import {AppBskyFeedGetSuggestedFeeds} from '@atproto/api' +import {InfiniteData, QueryKey, useInfiniteQuery} from '@tanstack/react-query' -import {getAgent} from '#/state/session' import {STALE} from '#/state/queries' +import {getAgent} from '#/state/session' export const suggestedFeedsQueryKey = ['suggestedFeeds'] diff --git a/src/state/queries/suggested-follows.ts b/src/state/queries/suggested-follows.ts index 932226b75..ba9de82d1 100644 --- a/src/state/queries/suggested-follows.ts +++ b/src/state/queries/suggested-follows.ts @@ -1,4 +1,3 @@ -import React from 'react' import { AppBskyActorDefs, AppBskyActorGetSuggestions, @@ -6,17 +5,18 @@ import { moderateProfile, } from '@atproto/api' import { - useInfiniteQuery, - useQueryClient, - useQuery, InfiniteData, QueryClient, QueryKey, + useInfiniteQuery, + useQuery, + useQueryClient, } from '@tanstack/react-query' +import React from 'react' -import {useSession, getAgent} from '#/state/session' -import {useModerationOpts} from '#/state/queries/preferences' import {STALE} from '#/state/queries' +import {useModerationOpts} from '#/state/queries/preferences' +import {getAgent, useSession} from '#/state/session' const suggestedFollowsQueryKey = ['suggested-follows'] const suggestedFollowsByActorQueryKey = (did: string) => [ diff --git a/src/state/queries/util.ts b/src/state/queries/util.ts index 54752b332..24f28ca52 100644 --- a/src/state/queries/util.ts +++ b/src/state/queries/util.ts @@ -1,10 +1,10 @@ -import {QueryClient, QueryKey, InfiniteData} from '@tanstack/react-query' import { AppBskyEmbedRecord, AppBskyEmbedRecordWithMedia, AppBskyFeedDefs, AppBskyFeedPost, } from '@atproto/api' +import {InfiniteData, QueryClient, QueryKey} from '@tanstack/react-query' export function truncateAndInvalidate<T = any>( queryClient: QueryClient, diff --git a/src/state/session/index.tsx b/src/state/session/index.tsx index 46628318c..9918e2e75 100644 --- a/src/state/session/index.tsx +++ b/src/state/session/index.tsx @@ -1,17 +1,18 @@ -import React from 'react' -import {BskyAgent, AtpPersistSessionHandler} from '@atproto/api' +import {AtpPersistSessionHandler, BskyAgent} from '@atproto/api' import {useQueryClient} from '@tanstack/react-query' import {jwtDecode} from 'jwt-decode' +import React from 'react' +import {track} from '#/lib/analytics/analytics' import {networkRetry} from '#/lib/async/retry' +import {hasProp} from '#/lib/type-guards' import {logger} from '#/logger' import * as persisted from '#/state/persisted' import {PUBLIC_BSKY_AGENT} from '#/state/queries' -import {emitSessionDropped} from '../events' import {useLoggedOutViewControls} from '#/state/shell/logged-out' import {useCloseAllActiveElements} from '#/state/util' -import {track} from '#/lib/analytics/analytics' -import {hasProp} from '#/lib/type-guards' + +import {emitSessionDropped} from '../events' let __globalAgent: BskyAgent = PUBLIC_BSKY_AGENT diff --git a/src/state/shell/color-mode.tsx b/src/state/shell/color-mode.tsx index f3339d240..f16e2be53 100644 --- a/src/state/shell/color-mode.tsx +++ b/src/state/shell/color-mode.tsx @@ -1,4 +1,5 @@ import React from 'react' + import * as persisted from '#/state/persisted' type StateContext = { diff --git a/src/state/shell/composer.tsx b/src/state/shell/composer.tsx index c9dbfbeac..1fb08baa2 100644 --- a/src/state/shell/composer.tsx +++ b/src/state/shell/composer.tsx @@ -1,9 +1,10 @@ -import React from 'react' import { AppBskyEmbedRecord, AppBskyRichtextFacet, PostModeration, } from '@atproto/api' +import React from 'react' + import {useNonReactiveCallback} from '#/lib/hooks/useNonReactiveCallback' export interface ComposerOptsPostRef { diff --git a/src/state/shell/index.tsx b/src/state/shell/index.tsx index 07909c000..7e41967f5 100644 --- a/src/state/shell/index.tsx +++ b/src/state/shell/index.tsx @@ -1,22 +1,23 @@ import React from 'react' -import {Provider as ShellLayoutProvder} from './shell-layout' + +import {Provider as ColorModeProvider} from './color-mode' +import {Provider as ComposerProvider} from './composer' import {Provider as DrawerOpenProvider} from './drawer-open' import {Provider as DrawerSwipableProvider} from './drawer-swipe-disabled' import {Provider as MinimalModeProvider} from './minimal-mode' -import {Provider as ColorModeProvider} from './color-mode' import {Provider as OnboardingProvider} from './onboarding' -import {Provider as ComposerProvider} from './composer' +import {Provider as ShellLayoutProvder} from './shell-layout' import {Provider as TickEveryMinuteProvider} from './tick-every-minute' +export {useSetThemePrefs, useThemePrefs} from './color-mode' +export {useComposerControls, useComposerState} from './composer' export {useIsDrawerOpen, useSetDrawerOpen} from './drawer-open' export { useIsDrawerSwipeDisabled, useSetDrawerSwipeDisabled, } from './drawer-swipe-disabled' export {useMinimalShellMode, useSetMinimalShellMode} from './minimal-mode' -export {useThemePrefs, useSetThemePrefs} from './color-mode' -export {useOnboardingState, useOnboardingDispatch} from './onboarding' -export {useComposerState, useComposerControls} from './composer' +export {useOnboardingDispatch, useOnboardingState} from './onboarding' export {useTickEveryMinute} from './tick-every-minute' export function Provider({children}: React.PropsWithChildren<{}>) { diff --git a/src/state/shell/onboarding.tsx b/src/state/shell/onboarding.tsx index 6a18b461f..cd26e42c0 100644 --- a/src/state/shell/onboarding.tsx +++ b/src/state/shell/onboarding.tsx @@ -1,6 +1,7 @@ import React from 'react' -import * as persisted from '#/state/persisted' + import {track} from '#/lib/analytics/analytics' +import * as persisted from '#/state/persisted' export const OnboardingScreenSteps = { Welcome: 'Welcome', diff --git a/src/state/shell/reminders.ts b/src/state/shell/reminders.ts index ee924eb00..6f68b9b79 100644 --- a/src/state/shell/reminders.ts +++ b/src/state/shell/reminders.ts @@ -1,7 +1,9 @@ -import * as persisted from '#/state/persisted' import {toHashCode} from 'lib/strings/helpers' -import {isOnboardingActive} from './onboarding' + +import * as persisted from '#/state/persisted' + import {SessionAccount} from '../session' +import {isOnboardingActive} from './onboarding' export function shouldRequestEmailConfirmation(account: SessionAccount) { if (!account) { diff --git a/src/state/shell/selected-feed.tsx b/src/state/shell/selected-feed.tsx index a05d8661b..8a6e82636 100644 --- a/src/state/shell/selected-feed.tsx +++ b/src/state/shell/selected-feed.tsx @@ -1,6 +1,7 @@ import React from 'react' -import * as persisted from '#/state/persisted' + import {isWeb} from '#/platform/detection' +import * as persisted from '#/state/persisted' type StateContext = string type SetContext = (v: string) => void diff --git a/src/state/util.ts b/src/state/util.ts index f65d14a84..af6d9026b 100644 --- a/src/state/util.ts +++ b/src/state/util.ts @@ -1,9 +1,11 @@ import {useCallback} from 'react' + +import {useDialogStateControlContext} from '#/state/dialogs' + import {useLightboxControls} from './lightbox' import {useModalControls} from './modals' import {useComposerControls} from './shell/composer' import {useSetDrawerOpen} from './shell/drawer-open' -import {useDialogStateControlContext} from '#/state/dialogs' /** * returns true if something was closed |