dispatch(setFilter(''))} />
+ }
{provider === DiscussionProvider.OPEN_EDX && }
diff --git a/src/discussions/topics/data/slices.js b/src/discussions/topics/data/slices.js
index 97707f88..4456a0c0 100644
--- a/src/discussions/topics/data/slices.js
+++ b/src/discussions/topics/data/slices.js
@@ -19,6 +19,9 @@ const topicsSlice = createSlice({
topics: {},
filter: '',
sortBy: TopicOrdering.BY_COURSE_STRUCTURE,
+ results: {
+ count: 0,
+ },
},
reducers: {
fetchCourseTopicsRequest: (state) => {
@@ -44,6 +47,9 @@ const topicsSlice = createSlice({
setSortBy: (state, { payload }) => {
state.sortBy = payload;
},
+ setTopicsCount: (state, { payload }) => {
+ state.results.count = payload;
+ },
},
});
@@ -53,6 +59,7 @@ export const {
fetchCourseTopicsFailed,
setFilter,
setSortBy,
+ setTopicsCount,
} = topicsSlice.actions;
export const topicsReducer = topicsSlice.reducer;
diff --git a/src/discussions/topics/topic-group/LegacyTopicGroup.jsx b/src/discussions/topics/topic-group/LegacyTopicGroup.jsx
index ca2a5067..bab0774d 100644
--- a/src/discussions/topics/topic-group/LegacyTopicGroup.jsx
+++ b/src/discussions/topics/topic-group/LegacyTopicGroup.jsx
@@ -11,7 +11,6 @@ function LegacyTopicGroup({
category,
}) {
const topics = useSelector(selectTopicsInCategory(category));
-
return (
);
diff --git a/src/discussions/topics/topic-group/TopicGroupBase.jsx b/src/discussions/topics/topic-group/TopicGroupBase.jsx
index 61eda60a..9a52cb4e 100644
--- a/src/discussions/topics/topic-group/TopicGroupBase.jsx
+++ b/src/discussions/topics/topic-group/TopicGroupBase.jsx
@@ -26,8 +26,8 @@ function TopicGroupBase({
const topicElements = topics.filter(
topic => (
filter
- ? topic.name.toLowerCase()
- .includes(filter)
+ ? (topic.name.toLowerCase()
+ .includes(filter) || matchesFilter)
: true
),
)
diff --git a/src/discussions/topics/utils.js b/src/discussions/topics/utils.js
new file mode 100644
index 00000000..6499cb6e
--- /dev/null
+++ b/src/discussions/topics/utils.js
@@ -0,0 +1,34 @@
+import { DiscussionProvider } from '../../data/constants';
+
+export default function countFilteredTopics(topicsSelector, provider) {
+ let count = 0;
+ const query = topicsSelector?.filter?.trim().toLowerCase();
+ // Counting non-courseware topics
+ const nonCoursewareTopicsList = topicsSelector.nonCoursewareIds?.map(
+ id => topicsSelector.topics[id],
+ ).filter(item => (query
+ ? item.name.toLowerCase().includes(query)
+ : true
+ ));
+ count += nonCoursewareTopicsList.length;
+ // Counting legacy topics
+ if (provider === DiscussionProvider.LEGACY) {
+ const categories = topicsSelector?.categoryIds;
+ const filteredTopics = categories?.map(categoryId => {
+ const topics = topicsSelector.topicsInCategory[categoryId]?.map(
+ id => topicsSelector.topics[id],
+ ) || [];
+ const matchesFilter = query ? categoryId?.toLowerCase().includes(query) : true;
+ return topics.filter(
+ topic => (
+ query
+ ? (topic.name.toLowerCase()
+ .includes(query) || matchesFilter)
+ : true
+ ),
+ );
+ });
+ count += [].concat(...filteredTopics).length;
+ }
+ return count;
+}