MCPcopy Create free account
hub / github.com/CommE2E/comm / useFilteredChildThreads

Function useFilteredChildThreads

lib/hooks/child-threads.js:27–132  ·  view source on GitHub ↗
(
  threadID: string,
  filter?: ThreadFilter,
)

Source from the content-addressed store, hash-verified

25};
26
27function useFilteredChildThreads(
28 threadID: string,
29 filter?: ThreadFilter,
30): $ReadOnlyArray<ChatThreadItem> {
31 const defaultPredicate = React.useCallback(() => true, []);
32 const { predicate = defaultPredicate, searchText = '' } = filter ?? {};
33 const childThreads = useSelector(state => childThreadInfos(state)[threadID]);
34 const subchannelIDs = React.useMemo(() => {
35 if (!childThreads) {
36 return new Set<string>();
37 }
38 return new Set<string>(
39 childThreads.filter(predicate).map(threadInfo => threadInfo.id),
40 );
41 }, [childThreads, predicate]);
42
43 const filterSubchannels = React.useCallback(
44 (thread: ?(RawThreadInfo | ThreadInfo)) => {
45 const candidateThreadID = thread?.id;
46 if (!candidateThreadID) {
47 return false;
48 }
49 return subchannelIDs.has(candidateThreadID);
50 },
51 [subchannelIDs],
52 );
53 const allSubchannelsList = useFilteredChatListData(filterSubchannels);
54
55 const searchIndex = useGlobalThreadSearchIndex();
56
57 const searchResultIDs = React.useMemo(
58 () => searchIndex.getSearchResults(searchText),
59 [searchIndex, searchText],
60 );
61
62 const searchTextExists = !!searchText.length;
63
64 const subchannelsThreadInfos = React.useMemo(
65 () => allSubchannelsList.map(item => item.threadInfo),
66 [allSubchannelsList],
67 );
68 const subchannelsInChatList = useThreadsInChatList(subchannelsThreadInfos);
69 const subchannelIDsInChatList = React.useMemo(
70 () => new Set(subchannelsInChatList.map(thread => thread.id)),
71 [subchannelsInChatList],
72 );
73
74 const subchannelIDsNotInChatList = React.useMemo(
75 () =>
76 new Set(
77 allSubchannelsList
78 .filter(item => !subchannelIDsInChatList.has(item.threadInfo.id))
79 .map(item => item.threadInfo.id),
80 ),
81 [allSubchannelsList, subchannelIDsInChatList],
82 );
83
84 React.useEffect(() => {

Callers 2

SidebarsModalContentFunction · 0.90
SubchannelsModalContentFunction · 0.90

Calls 13

useSelectorFunction · 0.90
useFilteredChatListDataFunction · 0.90
useThreadsInChatListFunction · 0.90
useDispatchActionPromiseFunction · 0.90
dispatchActionPromiseFunction · 0.85
watchIDMethod · 0.80
removeIDMethod · 0.80
hasMethod · 0.65
forEachMethod · 0.65
getSearchResultsMethod · 0.45

Tested by

no test coverage detected