Composer update (react-query refactor) (#1899)
* Move composer state to a context * Rework composer to use RQ --------- Co-authored-by: Eric Bailey <git@esb.lol>
This commit is contained in:
parent
c687172de9
commit
0a26e78dcb
32 changed files with 269 additions and 239 deletions
|
@ -1,7 +1,8 @@
|
|||
import {AppBskyActorDefs} from '@atproto/api'
|
||||
import {AppBskyActorDefs, BskyAgent} from '@atproto/api'
|
||||
import {useQuery} from '@tanstack/react-query'
|
||||
import {useSession} from '../session'
|
||||
import {useMyFollowsQuery} from './my-follows'
|
||||
import AwaitLock from 'await-lock'
|
||||
|
||||
export const RQKEY = (prefix: string) => ['actor-autocomplete', prefix]
|
||||
|
||||
|
@ -21,6 +22,57 @@ export function useActorAutocompleteQuery(prefix: string) {
|
|||
})
|
||||
}
|
||||
|
||||
export class ActorAutocomplete {
|
||||
// state
|
||||
isLoading = false
|
||||
isActive = false
|
||||
prefix = ''
|
||||
lock = new AwaitLock()
|
||||
|
||||
// data
|
||||
suggestions: AppBskyActorDefs.ProfileViewBasic[] = []
|
||||
|
||||
constructor(
|
||||
public agent: BskyAgent,
|
||||
public follows?: AppBskyActorDefs.ProfileViewBasic[] | undefined,
|
||||
) {}
|
||||
|
||||
setFollows(follows: AppBskyActorDefs.ProfileViewBasic[]) {
|
||||
this.follows = follows
|
||||
}
|
||||
|
||||
async query(prefix: string) {
|
||||
const origPrefix = prefix.trim().toLocaleLowerCase()
|
||||
this.prefix = origPrefix
|
||||
await this.lock.acquireAsync()
|
||||
try {
|
||||
if (this.prefix) {
|
||||
if (this.prefix !== origPrefix) {
|
||||
return // another prefix was set before we got our chance
|
||||
}
|
||||
|
||||
// start with follow results
|
||||
this.suggestions = computeSuggestions(this.prefix, this.follows)
|
||||
|
||||
// ask backend
|
||||
const res = await this.agent.searchActorsTypeahead({
|
||||
term: this.prefix,
|
||||
limit: 8,
|
||||
})
|
||||
this.suggestions = computeSuggestions(
|
||||
this.prefix,
|
||||
this.follows,
|
||||
res.data.actors,
|
||||
)
|
||||
} else {
|
||||
this.suggestions = computeSuggestions(this.prefix, this.follows)
|
||||
}
|
||||
} finally {
|
||||
this.lock.release()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function computeSuggestions(
|
||||
prefix: string,
|
||||
follows: AppBskyActorDefs.ProfileViewBasic[] = [],
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue