* Remove the hackcheck for upgrades * Rename the PostEmbeds folder to match the codebase style * Updates to latest lex refactor * Update to use new bsky agent * Update to use api package's richtext library * Switch to upsertProfile * Add TextEncoder/TextDecoder polyfill * Add Intl.Segmenter polyfill * Update composer to calculate lengths by grapheme * Fix detox * Fix login in e2e * Create account e2e passing * Implement an e2e mocking framework * Don't use private methods on mobx models as mobx can't track them * Add tooling for e2e-specific builds and add e2e media-picker mock * Add some tests and fix some bugs around profile editing * Add shell tests * Add home screen tests * Add thread screen tests * Add tests for other user profile screens * Add search screen tests * Implement profile imagery change tools and tests * Update to new embed behaviors * Add post tests * Fix to profile-screen test * Fix session resumption * Update web composer to new api * 1.11.0 * Fix pagination cursor parameters * Add quote posts to notifications * Fix embed layouts * Remove youtube inline player and improve tap handling on link cards * Reset minimal shell mode on all screen loads and feed swipes (close #299) * Update podfile.lock * Improve post notfound UI (close #366) * Bump atproto packages
51 lines
1.4 KiB
TypeScript
51 lines
1.4 KiB
TypeScript
import {makeAutoObservable, runInAction} from 'mobx'
|
|
import {searchProfiles, searchPosts} from 'lib/api/search'
|
|
import {AppBskyActorDefs} from '@atproto/api'
|
|
import {RootStoreModel} from '../root-store'
|
|
|
|
export class SearchUIModel {
|
|
isPostsLoading = false
|
|
isProfilesLoading = false
|
|
query: string = ''
|
|
postUris: string[] = []
|
|
profiles: AppBskyActorDefs.ProfileView[] = []
|
|
|
|
constructor(public rootStore: RootStoreModel) {
|
|
makeAutoObservable(this)
|
|
}
|
|
|
|
async fetch(q: string) {
|
|
this.postUris = []
|
|
this.profiles = []
|
|
this.query = q
|
|
if (!q.trim()) {
|
|
return
|
|
}
|
|
|
|
this.isPostsLoading = true
|
|
this.isProfilesLoading = true
|
|
|
|
const [postsSearch, profilesSearch] = await Promise.all([
|
|
searchPosts(q).catch(_e => []),
|
|
searchProfiles(q).catch(_e => []),
|
|
])
|
|
runInAction(() => {
|
|
this.postUris = postsSearch?.map(p => `at://${p.user.did}/${p.tid}`) || []
|
|
this.isPostsLoading = false
|
|
})
|
|
|
|
let profiles: AppBskyActorDefs.ProfileView[] = []
|
|
if (profilesSearch?.length) {
|
|
do {
|
|
const res = await this.rootStore.agent.getProfiles({
|
|
actors: profilesSearch.splice(0, 25).map(p => p.did),
|
|
})
|
|
profiles = profiles.concat(res.data.profiles)
|
|
} while (profilesSearch.length)
|
|
}
|
|
runInAction(() => {
|
|
this.profiles = profiles
|
|
this.isProfilesLoading = false
|
|
})
|
|
}
|
|
}
|