From ea3ed8193cd97e2661500f54bbbf90d22c2f28e0 Mon Sep 17 00:00:00 2001 From: Paul Frazee Date: Tue, 28 Nov 2023 17:00:57 -0800 Subject: [PATCH] De-closure my-lists --- src/state/queries/my-lists.ts | 147 ++++++++++++++++++---------------- 1 file changed, 77 insertions(+), 70 deletions(-) diff --git a/src/state/queries/my-lists.ts b/src/state/queries/my-lists.ts index 3265cb21e3..a77956e465 100644 --- a/src/state/queries/my-lists.ts +++ b/src/state/queries/my-lists.ts @@ -1,91 +1,98 @@ import {AppBskyGraphDefs} from '@atproto/api' -import {useQuery, QueryClient} from '@tanstack/react-query' +import { + useQuery, + QueryClient, + QueryFunctionContext, +} from '@tanstack/react-query' import {accumulate} from '#/lib/async/accumulate' import {useSession, getAgent} from '#/state/session' import {STALE} from '#/state/queries' export type MyListsFilter = 'all' | 'curate' | 'mod' -export const RQKEY = (filter: MyListsFilter) => ['my-lists', filter] +export const RQKEY = ( + filter: MyListsFilter, + sessionDid: string | undefined, +) => ['my-lists', filter, sessionDid] export function useMyListsQuery(filter: MyListsFilter) { const {currentAccount} = useSession() return useQuery({ staleTime: STALE.MINUTES.ONE, - queryKey: RQKEY(filter), - async queryFn() { - let lists: AppBskyGraphDefs.ListView[] = [] - const promises = [ - accumulate(cursor => - getAgent() - .app.bsky.graph.getLists({ - actor: currentAccount!.did, - cursor, - limit: 50, - }) - .then(res => ({ - cursor: res.data.cursor, - items: res.data.lists, - })), - ), - ] - if (filter === 'all' || filter === 'mod') { - promises.push( - accumulate(cursor => - getAgent() - .app.bsky.graph.getListMutes({ - cursor, - limit: 50, - }) - .then(res => ({ - cursor: res.data.cursor, - items: res.data.lists, - })), - ), - ) - promises.push( - accumulate(cursor => - getAgent() - .app.bsky.graph.getListBlocks({ - cursor, - limit: 50, - }) - .then(res => ({ - cursor: res.data.cursor, - items: res.data.lists, - })), - ), - ) - } - const resultset = await Promise.all(promises) - for (const res of resultset) { - for (let list of res) { - if ( - filter === 'curate' && - list.purpose !== 'app.bsky.graph.defs#curatelist' - ) { - continue - } - if ( - filter === 'mod' && - list.purpose !== 'app.bsky.graph.defs#modlist' - ) { - continue - } - if (!lists.find(l => l.uri === list.uri)) { - lists.push(list) - } - } - } - return lists - }, + queryKey: RQKEY(filter, currentAccount?.did), + queryFn, enabled: !!currentAccount, }) } +async function queryFn({queryKey}: QueryFunctionContext) { + const [_, filter, sessionDid] = queryKey as ReturnType + let lists: AppBskyGraphDefs.ListView[] = [] + const promises = [ + accumulate(cursor => + getAgent() + .app.bsky.graph.getLists({ + actor: sessionDid!, + cursor, + limit: 50, + }) + .then(res => ({ + cursor: res.data.cursor, + items: res.data.lists, + })), + ), + ] + if (filter === 'all' || filter === 'mod') { + promises.push( + accumulate(cursor => + getAgent() + .app.bsky.graph.getListMutes({ + cursor, + limit: 50, + }) + .then(res => ({ + cursor: res.data.cursor, + items: res.data.lists, + })), + ), + ) + promises.push( + accumulate(cursor => + getAgent() + .app.bsky.graph.getListBlocks({ + cursor, + limit: 50, + }) + .then(res => ({ + cursor: res.data.cursor, + items: res.data.lists, + })), + ), + ) + } + const resultset = await Promise.all(promises) + for (const res of resultset) { + for (let list of res) { + if ( + filter === 'curate' && + list.purpose !== 'app.bsky.graph.defs#curatelist' + ) { + continue + } + if (filter === 'mod' && list.purpose !== 'app.bsky.graph.defs#modlist') { + continue + } + if (!lists.find(l => l.uri === list.uri)) { + lists.push(list) + } + } + } + return lists +} + export function invalidate(qc: QueryClient, filter?: MyListsFilter) { if (filter) { - qc.invalidateQueries({queryKey: RQKEY(filter)}) + qc.invalidateQueries({queryKey: ['my-lists', filter]}) } else { qc.invalidateQueries({queryKey: ['my-lists']}) }