about summary refs log tree commit diff
path: root/src/state/models/discovery/user-autocomplete.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/state/models/discovery/user-autocomplete.ts')
-rw-r--r--src/state/models/discovery/user-autocomplete.ts143
1 files changed, 0 insertions, 143 deletions
diff --git a/src/state/models/discovery/user-autocomplete.ts b/src/state/models/discovery/user-autocomplete.ts
deleted file mode 100644
index f28869e83..000000000
--- a/src/state/models/discovery/user-autocomplete.ts
+++ /dev/null
@@ -1,143 +0,0 @@
-import {makeAutoObservable, runInAction} from 'mobx'
-import {AppBskyActorDefs} from '@atproto/api'
-import AwaitLock from 'await-lock'
-import {RootStoreModel} from '../root-store'
-import {isInvalidHandle} from 'lib/strings/handles'
-
-type ProfileViewBasic = AppBskyActorDefs.ProfileViewBasic
-
-export class UserAutocompleteModel {
-  // state
-  isLoading = false
-  isActive = false
-  prefix = ''
-  lock = new AwaitLock()
-
-  // data
-  knownHandles: Set<string> = new Set()
-  _suggestions: ProfileViewBasic[] = []
-
-  constructor(public rootStore: RootStoreModel) {
-    makeAutoObservable(
-      this,
-      {
-        rootStore: false,
-        knownHandles: false,
-      },
-      {autoBind: true},
-    )
-  }
-
-  get follows(): ProfileViewBasic[] {
-    return Object.values(this.rootStore.me.follows.byDid).map(item => ({
-      did: item.did,
-      handle: item.handle,
-      displayName: item.displayName,
-      avatar: item.avatar,
-    }))
-  }
-
-  get suggestions(): ProfileViewBasic[] {
-    if (!this.isActive) {
-      return []
-    }
-    return this._suggestions
-  }
-
-  // public api
-  // =
-
-  async setup() {
-    this.isLoading = true
-    await this.rootStore.me.follows.syncIfNeeded()
-    runInAction(() => {
-      for (const did in this.rootStore.me.follows.byDid) {
-        const info = this.rootStore.me.follows.byDid[did]
-        if (!isInvalidHandle(info.handle)) {
-          this.knownHandles.add(info.handle)
-        }
-      }
-      this.isLoading = false
-    })
-  }
-
-  setActive(v: boolean) {
-    this.isActive = v
-  }
-
-  async setPrefix(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
-        }
-
-        // reset to follow results
-        this._computeSuggestions([])
-
-        // ask backend
-        const res = await this.rootStore.agent.searchActorsTypeahead({
-          term: this.prefix,
-          limit: 8,
-        })
-        this._computeSuggestions(res.data.actors)
-
-        // update known handles
-        runInAction(() => {
-          for (const u of res.data.actors) {
-            this.knownHandles.add(u.handle)
-          }
-        })
-      } else {
-        runInAction(() => {
-          this._computeSuggestions([])
-        })
-      }
-    } finally {
-      this.lock.release()
-    }
-  }
-
-  // internal
-  // =
-
-  _computeSuggestions(searchRes: AppBskyActorDefs.ProfileViewBasic[] = []) {
-    if (this.prefix) {
-      const items: ProfileViewBasic[] = []
-      for (const item of this.follows) {
-        if (prefixMatch(this.prefix, item)) {
-          items.push(item)
-        }
-        if (items.length >= 8) {
-          break
-        }
-      }
-      for (const item of searchRes) {
-        if (!items.find(item2 => item2.handle === item.handle)) {
-          items.push({
-            did: item.did,
-            handle: item.handle,
-            displayName: item.displayName,
-            avatar: item.avatar,
-          })
-        }
-      }
-      this._suggestions = items
-    } else {
-      this._suggestions = this.follows
-    }
-  }
-}
-
-function prefixMatch(prefix: string, info: ProfileViewBasic): boolean {
-  if (info.handle.includes(prefix)) {
-    return true
-  }
-  if (info.displayName?.toLocaleLowerCase().includes(prefix)) {
-    return true
-  }
-  return false
-}