Changeset View
Changeset View
Standalone View
Standalone View
lib/hooks/search-sidebars.js
Show All 14 Lines | |||||
}; | }; | ||||
function useSearchSidebars( | function useSearchSidebars( | ||||
threadInfo: ThreadInfo, | threadInfo: ThreadInfo, | ||||
): { | ): { | ||||
+listData: $ReadOnlyArray<SidebarInfo>, | +listData: $ReadOnlyArray<SidebarInfo>, | ||||
+searchState: SidebarSearchState, | +searchState: SidebarSearchState, | ||||
+setSearchState: SetState<SidebarSearchState>, | +setSearchState: SetState<SidebarSearchState>, | ||||
+searchIndex: SearchIndex, | +onChangeSearchInputText: (text: string) => mixed, | ||||
} { | } { | ||||
const [searchState, setSearchState] = React.useState({ | const [searchState, setSearchState] = React.useState({ | ||||
text: '', | text: '', | ||||
results: new Set<string>(), | results: new Set<string>(), | ||||
}); | }); | ||||
const userInfos = useSelector(state => state.userStore.userInfos); | const userInfos = useSelector(state => state.userStore.userInfos); | ||||
Show All 20 Lines | for (const sidebarInfo of sidebarInfos) { | ||||
index.addEntry( | index.addEntry( | ||||
threadInfoFromSidebarInfo.id, | threadInfoFromSidebarInfo.id, | ||||
threadSearchText(threadInfoFromSidebarInfo, userInfos, viewerID), | threadSearchText(threadInfoFromSidebarInfo, userInfos, viewerID), | ||||
); | ); | ||||
} | } | ||||
return index; | return index; | ||||
}, [sidebarInfos, userInfos, viewerID]); | }, [sidebarInfos, userInfos, viewerID]); | ||||
const onChangeSearchInputText = React.useCallback( | |||||
(text: string) => { | |||||
setSearchState({ | |||||
text, | |||||
results: new Set(searchIndex.getSearchResults(text)), | |||||
}); | |||||
}, | |||||
[searchIndex, setSearchState], | |||||
); | |||||
React.useEffect(() => { | React.useEffect(() => { | ||||
setSearchState(curState => ({ | setSearchState(curState => ({ | ||||
...curState, | ...curState, | ||||
results: new Set(searchIndex.getSearchResults(curState.text)), | results: new Set(searchIndex.getSearchResults(curState.text)), | ||||
})); | })); | ||||
}, [searchIndex, setSearchState]); | }, [searchIndex, setSearchState]); | ||||
return React.useMemo( | return React.useMemo( | ||||
() => ({ listData, searchState, setSearchState, searchIndex }), | () => ({ | ||||
[listData, setSearchState, searchState, searchIndex], | listData, | ||||
searchState, | |||||
setSearchState, | |||||
onChangeSearchInputText, | |||||
}), | |||||
[listData, setSearchState, searchState, onChangeSearchInputText], | |||||
); | ); | ||||
} | } | ||||
export { useSearchSidebars }; | export { useSearchSidebars }; |