diff --git a/lib/hooks/search-sidebars.js b/lib/hooks/search-sidebars.js index 3a91edebe..1f97415cf 100644 --- a/lib/hooks/search-sidebars.js +++ b/lib/hooks/search-sidebars.js @@ -1,88 +1,81 @@ // @flow import * as React from 'react'; import { sidebarInfoSelector } from '../selectors/thread-selectors'; import SearchIndex from '../shared/search-index'; import { threadSearchText } from '../shared/thread-utils'; import type { SetState } from '../types/hook-types'; import type { SidebarInfo, ThreadInfo } from '../types/thread-types'; import { useSelector } from '../utils/redux-utils'; type SidebarSearchState = { +text: string, +results: $ReadOnlySet, }; function useSearchSidebars( threadInfo: ThreadInfo, ): { +listData: $ReadOnlyArray, +searchState: SidebarSearchState, +setSearchState: SetState, +onChangeSearchInputText: (text: string) => mixed, } { const [searchState, setSearchState] = React.useState({ text: '', results: new Set(), }); const userInfos = useSelector(state => state.userStore.userInfos); const sidebarInfos = useSelector( state => sidebarInfoSelector(state)[threadInfo.id] ?? [], ); const listData = React.useMemo(() => { if (!searchState.text) { return sidebarInfos; } return sidebarInfos.filter(sidebarInfo => searchState.results.has(sidebarInfo.threadInfo.id), ); }, [sidebarInfos, searchState]); const viewerID = useSelector( state => state.currentUserInfo && state.currentUserInfo.id, ); const searchIndex = React.useMemo(() => { const index = new SearchIndex(); for (const sidebarInfo of sidebarInfos) { const threadInfoFromSidebarInfo = sidebarInfo.threadInfo; index.addEntry( threadInfoFromSidebarInfo.id, threadSearchText(threadInfoFromSidebarInfo, userInfos, viewerID), ); } return index; }, [sidebarInfos, userInfos, viewerID]); const onChangeSearchInputText = React.useCallback( (text: string) => { setSearchState({ text, results: new Set(searchIndex.getSearchResults(text)), }); }, [searchIndex, setSearchState], ); - React.useEffect(() => { - setSearchState(curState => ({ - ...curState, - results: new Set(searchIndex.getSearchResults(curState.text)), - })); - }, [searchIndex, setSearchState]); - return React.useMemo( () => ({ listData, searchState, setSearchState, onChangeSearchInputText, }), [listData, setSearchState, searchState, onChangeSearchInputText], ); } export { useSearchSidebars };