From 339e37302d0768d8045ffc260631bcd45ee007b2 Mon Sep 17 00:00:00 2001 From: Muhammad Adeel Tajamul <77053848+muhammadadeeltajamul@users.noreply.github.com> Date: Wed, 10 Aug 2022 10:25:47 +0500 Subject: [PATCH] fix: added no results bar to topics tab and search info to learners tab (#239) Co-authored-by: adeel.tajamul --- src/components/Search.jsx | 18 +++++++++++-- src/components/SearchInfo.jsx | 2 +- src/discussions/learners/LearnersView.jsx | 16 +++++++++--- src/discussions/posts/NoResults.jsx | 9 ++++--- src/discussions/topics/TopicsView.jsx | 31 ++++++++++++++--------- 5 files changed, 54 insertions(+), 22 deletions(-) diff --git a/src/components/Search.jsx b/src/components/Search.jsx index b4430727..7d63aa7d 100644 --- a/src/components/Search.jsx +++ b/src/components/Search.jsx @@ -1,4 +1,4 @@ -import React, { useContext, useEffect } from 'react'; +import React, { useContext, useEffect, useMemo } from 'react'; import camelCase from 'lodash/camelCase'; import { useDispatch, useSelector } from 'react-redux'; @@ -18,9 +18,23 @@ function Search({ intl }) { const { page } = useContext(DiscussionContext); const postSearch = useSelector(({ threads }) => threads.filters.search); const topicSearch = useSelector(({ topics }) => topics.filter); + const learnerSearch = useSelector(({ learners }) => learners.usernameSearch); const isPostSearch = ['posts', 'my-posts'].includes(page); + const isTopicSearch = 'topics'.includes(page); let searchValue = ''; + const currentValue = useMemo(() => { + let value = ''; + if (isPostSearch) { + value = postSearch; + } else if (isTopicSearch) { + value = topicSearch; + } else { + value = learnerSearch; + } + return value; + }, [isPostSearch, isTopicSearch, learnerSearch]); + const onClear = () => { dispatch(setSearchQuery('')); dispatch(setTopicFilter('')); @@ -48,7 +62,7 @@ function Search({ intl }) { onClear={onClear} onChange={onChange} onSubmit={onSubmit} - value={isPostSearch ? postSearch : topicSearch} + value={currentValue} > +
) )} + { usernameSearch !== '' && learners.length === 0 && loadingStatus === RequestStatus.SUCCESSFUL && }
); diff --git a/src/discussions/posts/NoResults.jsx b/src/discussions/posts/NoResults.jsx index 463f86af..405bab8b 100644 --- a/src/discussions/posts/NoResults.jsx +++ b/src/discussions/posts/NoResults.jsx @@ -6,18 +6,21 @@ import { selectAreThreadsFiltered } from '../data/selectors'; import messages from '../messages'; function NoResults({ intl }) { - const isFiltered = useSelector(selectAreThreadsFiltered); + const postsFiltered = useSelector(selectAreThreadsFiltered); + const topicsFilter = useSelector(({ topics }) => topics.filter); const filters = useSelector((state) => state.threads.filters); + const learnersFilter = useSelector(({ learners }) => learners.usernameSearch); + const isFiltered = postsFiltered || (topicsFilter !== '') || (learnersFilter !== null); let helpMessage = messages.removeFilters; if (!isFiltered) { return null; - } if (filters.search) { + } if (filters.search || topicsFilter || learnersFilter) { helpMessage = messages.removeKeywords; } return ( -
+

{intl.formatMessage(messages.noResultsFound)}

{intl.formatMessage(helpMessage)}
diff --git a/src/discussions/topics/TopicsView.jsx b/src/discussions/topics/TopicsView.jsx index 44a8b24e..54cdcebe 100644 --- a/src/discussions/topics/TopicsView.jsx +++ b/src/discussions/topics/TopicsView.jsx @@ -4,10 +4,11 @@ import { useDispatch, useSelector } from 'react-redux'; import { useParams } from 'react-router'; import SearchInfo from '../../components/SearchInfo'; -import { DiscussionProvider } from '../../data/constants'; +import { DiscussionProvider, RequestStatus } from '../../data/constants'; import { selectSequences } from '../../data/selectors'; import { DiscussionContext } from '../common/context'; import { selectDiscussionProvider } from '../data/selectors'; +import NoResults from '../posts/NoResults'; import { selectCategories, selectNonCoursewareTopics, selectTopicFilter } from './data/selectors'; import { setFilter, setTopicsCount } from './data/slices'; import { fetchCourseTopics } from './data/thunks'; @@ -71,6 +72,7 @@ function TopicsView() { const topicFilter = useSelector(selectTopicFilter); const topicsSelector = useSelector(({ topics }) => topics); const filteredTopicsCount = useSelector(({ topics }) => topics.results.count); + const loadingStatus = useSelector(({ topics }) => topics.status); const { courseId } = useContext(DiscussionContext); const dispatch = useDispatch(); @@ -87,18 +89,23 @@ function TopicsView() { }, [topicFilter]); return ( -
- { - topicFilter && dispatch(setFilter(''))} /> - } -
- - {provider === DiscussionProvider.OPEN_EDX && } - {provider === DiscussionProvider.LEGACY && } +
+
+ { + topicFilter && dispatch(setFilter(''))} /> + } +
+ + {provider === DiscussionProvider.OPEN_EDX && } + {provider === DiscussionProvider.LEGACY && } +
+ { + filteredTopicsCount === 0 && loadingStatus === RequestStatus.SUCCESSFUL && + }
); }