De-closure my-lists

This commit is contained in:
Paul Frazee
2023-11-28 17:00:57 -08:00
parent c894f0ff10
commit ea3ed8193c
+20 -13
View File
@@ -1,25 +1,38 @@
import {AppBskyGraphDefs} from '@atproto/api' 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 {accumulate} from '#/lib/async/accumulate'
import {useSession, getAgent} from '#/state/session' import {useSession, getAgent} from '#/state/session'
import {STALE} from '#/state/queries' import {STALE} from '#/state/queries'
export type MyListsFilter = 'all' | 'curate' | 'mod' 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) { export function useMyListsQuery(filter: MyListsFilter) {
const {currentAccount} = useSession() const {currentAccount} = useSession()
return useQuery<AppBskyGraphDefs.ListView[]>({ return useQuery<AppBskyGraphDefs.ListView[]>({
staleTime: STALE.MINUTES.ONE, staleTime: STALE.MINUTES.ONE,
queryKey: RQKEY(filter), queryKey: RQKEY(filter, currentAccount?.did),
async queryFn() { queryFn,
enabled: !!currentAccount,
})
}
async function queryFn({queryKey}: QueryFunctionContext) {
const [_, filter, sessionDid] = queryKey as ReturnType<typeof RQKEY>
let lists: AppBskyGraphDefs.ListView[] = [] let lists: AppBskyGraphDefs.ListView[] = []
const promises = [ const promises = [
accumulate(cursor => accumulate(cursor =>
getAgent() getAgent()
.app.bsky.graph.getLists({ .app.bsky.graph.getLists({
actor: currentAccount!.did, actor: sessionDid!,
cursor, cursor,
limit: 50, limit: 50,
}) })
@@ -66,10 +79,7 @@ export function useMyListsQuery(filter: MyListsFilter) {
) { ) {
continue continue
} }
if ( if (filter === 'mod' && list.purpose !== 'app.bsky.graph.defs#modlist') {
filter === 'mod' &&
list.purpose !== 'app.bsky.graph.defs#modlist'
) {
continue continue
} }
if (!lists.find(l => l.uri === list.uri)) { if (!lists.find(l => l.uri === list.uri)) {
@@ -78,14 +88,11 @@ export function useMyListsQuery(filter: MyListsFilter) {
} }
} }
return lists return lists
},
enabled: !!currentAccount,
})
} }
export function invalidate(qc: QueryClient, filter?: MyListsFilter) { export function invalidate(qc: QueryClient, filter?: MyListsFilter) {
if (filter) { if (filter) {
qc.invalidateQueries({queryKey: RQKEY(filter)}) qc.invalidateQueries({queryKey: ['my-lists', filter]})
} else { } else {
qc.invalidateQueries({queryKey: ['my-lists']}) qc.invalidateQueries({queryKey: ['my-lists']})
} }