Hey is a decentralized and permissionless social media app built with Lens Protocol 馃尶
1import getAccount from "@hey/helpers/getAccount";
2import getAvatar from "@hey/helpers/getAvatar";
3import { AccountsOrderBy, useAccountsLazyQuery } from "@hey/indexer";
4import { useEffect, useState } from "react";
5
6const SUGGESTION_LIST_LENGTH_LIMIT = 5;
7
8export type MentionAccount = {
9 address: string;
10 username: string;
11 name: string;
12 picture: string;
13 subscribed: boolean;
14};
15
16const useMentionQuery = (query: string): MentionAccount[] => {
17 const [results, setResults] = useState<MentionAccount[]>([]);
18 const [searchAccounts] = useAccountsLazyQuery();
19
20 useEffect(() => {
21 if (!query) {
22 setResults([]);
23 return;
24 }
25
26 searchAccounts({
27 variables: {
28 request: {
29 filter: { searchBy: { localNameQuery: query } },
30 orderBy: AccountsOrderBy.BestMatch
31 }
32 }
33 }).then(({ data }) => {
34 const search = data?.accounts;
35 const accountsSearchResult = search;
36 const accounts = accountsSearchResult?.items;
37 const accountsResults = (accounts ?? [])
38 .filter(
39 (account) =>
40 !account.operations?.isBlockedByMe &&
41 !account.operations?.hasBlockedMe
42 )
43 .map(
44 (account): MentionAccount => ({
45 address: account.address,
46 name: getAccount(account).name,
47 picture: getAvatar(account),
48 subscribed: account.hasSubscribed,
49 username: getAccount(account).username
50 })
51 );
52
53 setResults(accountsResults.slice(0, SUGGESTION_LIST_LENGTH_LIMIT));
54 });
55 }, [query, searchAccounts]);
56
57 return results;
58};
59
60export default useMentionQuery;