about summary refs log tree commit diff
path: root/src/state/queries/my-follows.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/state/queries/my-follows.ts')
-rw-r--r--src/state/queries/my-follows.ts45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/state/queries/my-follows.ts b/src/state/queries/my-follows.ts
new file mode 100644
index 000000000..f95c3f5a7
--- /dev/null
+++ b/src/state/queries/my-follows.ts
@@ -0,0 +1,45 @@
+import {AppBskyActorDefs} from '@atproto/api'
+import {useQuery} from '@tanstack/react-query'
+import {useSession, getAgent} from '../session'
+import {STALE} from '#/state/queries'
+
+// sanity limit is SANITY_PAGE_LIMIT*PAGE_SIZE total records
+const SANITY_PAGE_LIMIT = 1000
+const PAGE_SIZE = 100
+// ...which comes 10,000k follows
+
+export const RQKEY = () => ['my-follows']
+
+export function useMyFollowsQuery() {
+  const {currentAccount} = useSession()
+  return useQuery<AppBskyActorDefs.ProfileViewBasic[]>({
+    staleTime: STALE.MINUTES.ONE,
+    queryKey: RQKEY(),
+    async queryFn() {
+      if (!currentAccount) {
+        return []
+      }
+      let cursor
+      let arr: AppBskyActorDefs.ProfileViewBasic[] = []
+      for (let i = 0; i < SANITY_PAGE_LIMIT; i++) {
+        const res = await getAgent().getFollows({
+          actor: currentAccount.did,
+          cursor,
+          limit: PAGE_SIZE,
+        })
+        // TODO
+        // res.data.follows = res.data.follows.filter(
+        //   profile =>
+        //     !moderateProfile(profile, this.rootStore.preferences.moderationOpts)
+        //       .account.filter,
+        // )
+        arr = arr.concat(res.data.follows)
+        if (!res.data.cursor) {
+          break
+        }
+        cursor = res.data.cursor
+      }
+      return arr
+    },
+  })
+}