diff --git a/packages/pl-fe/src/actions/accounts.ts b/packages/pl-fe/src/actions/accounts.ts index af20e9a7a..04f064a14 100644 --- a/packages/pl-fe/src/actions/accounts.ts +++ b/packages/pl-fe/src/actions/accounts.ts @@ -208,13 +208,6 @@ const updateNotificationSettings = (params: UpdateNotificationSettingsParams) => (dispatch: AppDispatch, getState: () => RootState) => getClient(getState).settings.updateNotificationSettings(params).then((data) => ({ params, data })); -const accountSearch = (q: string, signal?: AbortSignal) => - (dispatch: AppDispatch, getState: () => RootState) => - getClient(getState()).accounts.searchAccounts(q, { resolve: false, limit: 4, following: true }, { signal }).then((accounts) => { - dispatch(importEntities({ accounts })); - return accounts; - }); - const accountLookup = (acct: string, signal?: AbortSignal) => (dispatch: AppDispatch, getState: () => RootState) => getClient(getState()).accounts.lookupAccount(acct, { signal }).then((account) => { @@ -245,7 +238,6 @@ export { pinAccount, unpinAccount, updateNotificationSettings, - accountSearch, accountLookup, biteAccount, type AccountsAction, diff --git a/packages/pl-fe/src/components/autosuggest-account-input.tsx b/packages/pl-fe/src/components/autosuggest-account-input.tsx index fadff8f28..d6bf61388 100644 --- a/packages/pl-fe/src/components/autosuggest-account-input.tsx +++ b/packages/pl-fe/src/components/autosuggest-account-input.tsx @@ -1,13 +1,17 @@ -import throttle from 'lodash/throttle'; -import React, { useState, useRef, useCallback, useEffect } from 'react'; +import React from 'react'; -import { accountSearch } from 'pl-fe/actions/accounts'; import AutosuggestInput, { AutoSuggestion } from 'pl-fe/components/autosuggest-input'; -import { useAppDispatch } from 'pl-fe/hooks/use-app-dispatch'; +import { useDebounce } from 'pl-fe/hooks/use-debounce'; +import { useAccountSearch } from 'pl-fe/queries/search/use-search-accounts'; import type { Menu } from 'pl-fe/components/dropdown-menu'; import type { InputThemes } from 'pl-fe/components/ui/input'; +const SEARCH_PARAMS = { + limit: 5, + resolve: false, +}; + const noOp = () => { }; interface IAutosuggestAccountInput { @@ -30,31 +34,11 @@ const AutosuggestAccountInput: React.FC = ({ value = '', ...rest }) => { - const dispatch = useAppDispatch(); - const [accountIds, setAccountIds] = useState>([]); - const controller = useRef(new AbortController()); - - const refreshCancelToken = () => { - controller.current.abort(); - controller.current = new AbortController(); - }; - - const clearResults = () => { - setAccountIds([]); - }; - - const handleAccountSearch = useCallback(throttle((q) => { - dispatch(accountSearch(q, controller.current.signal)) - .then((accounts: { id: string }[]) => { - const accountIds = accounts.map(account => account.id); - setAccountIds(accountIds); - }) - .catch(noOp); - }, 900, { leading: true, trailing: true }), []); + // should ignore debounce on clearing input + const debouncedValue = useDebounce(value, 900); + const { data: accountIds = [] } = useAccountSearch(debouncedValue, SEARCH_PARAMS); const handleChange: React.ChangeEventHandler = e => { - refreshCancelToken(); - handleAccountSearch(e.target.value); onChange(e); }; @@ -64,18 +48,6 @@ const AutosuggestAccountInput: React.FC = ({ } }; - useEffect(() => { - if (rest.autoFocus) { - handleAccountSearch(''); - } - }, []); - - useEffect(() => { - if (value === '') { - clearResults(); - } - }, [value]); - return (