add follows autocomplete source
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
import {useEffect} from 'react'
|
||||
|
||||
import {useProfileFollowsQuery} from '#/state/queries/profile-follows'
|
||||
import {useSession} from '#/state/session'
|
||||
import {type LocalSource} from '#/components/Autocomplete/types'
|
||||
|
||||
/*
|
||||
* The profile-follows query key ignores `limit`, so this must use the default
|
||||
* page size or it would collide with existing default-limit callers (DM
|
||||
* flows, SearchablePeopleList). Two default pages ≈ 60 profiles.
|
||||
*/
|
||||
const MAX_PAGES = 2
|
||||
|
||||
/**
|
||||
* The current account's follows as an autocomplete LocalSource, for instant
|
||||
* local mention matches while the remote typeahead request is in flight.
|
||||
* Empty when logged out.
|
||||
*/
|
||||
export function useFollowsSource(): LocalSource {
|
||||
const {currentAccount} = useSession()
|
||||
const {data, hasNextPage, isFetching, isError, fetchNextPage} =
|
||||
useProfileFollowsQuery(currentAccount?.did)
|
||||
|
||||
const pages = data?.pages ?? []
|
||||
|
||||
useEffect(() => {
|
||||
if (
|
||||
pages.length > 0 &&
|
||||
pages.length < MAX_PAGES &&
|
||||
hasNextPage &&
|
||||
!isFetching &&
|
||||
!isError
|
||||
) {
|
||||
void fetchNextPage()
|
||||
}
|
||||
}, [pages.length, hasNextPage, isFetching, isError, fetchNextPage])
|
||||
|
||||
return {
|
||||
key: 'follows',
|
||||
items: pages.slice(0, MAX_PAGES).flatMap(page =>
|
||||
page.follows.map(profile => ({
|
||||
key: profile.did,
|
||||
type: 'profile' as const,
|
||||
value: '@' + profile.handle,
|
||||
profile,
|
||||
})),
|
||||
),
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user