Hey is a decentralized and permissionless social media app built with Lens Protocol 馃尶
at main 60 lines 1.7 kB view raw
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;