diff --git a/src/discussions/discussions-home/DiscussionContent.jsx b/src/discussions/discussions-home/DiscussionContent.jsx index e1e42a8d..66b43201 100644 --- a/src/discussions/discussions-home/DiscussionContent.jsx +++ b/src/discussions/discussions-home/DiscussionContent.jsx @@ -7,6 +7,7 @@ import { Routes } from '../../data/constants'; import { CommentsView } from '../comments'; import { useContainerSizeForParent } from '../data/hooks'; import { LearnersContentView } from '../learners'; +import LearnerPageHeader from '../learners/LearnerPageHeader'; import { PostEditor } from '../posts'; export default function DiscussionContent() { @@ -16,6 +17,9 @@ export default function DiscussionContent() { return (
+ + +
{postEditorVisible ? ( diff --git a/src/discussions/learners/LearnerPageHeader.jsx b/src/discussions/learners/LearnerPageHeader.jsx new file mode 100644 index 00000000..7582e8d8 --- /dev/null +++ b/src/discussions/learners/LearnerPageHeader.jsx @@ -0,0 +1,70 @@ +import React, { useContext } from 'react'; + +import classNames from 'classnames'; +import { useSelector } from 'react-redux'; +import { generatePath, NavLink } from 'react-router-dom'; + +import { injectIntl, intlShape } from '@edx/frontend-platform/i18n'; +import { Avatar, ButtonGroup, Icon } from '@edx/paragon'; +import { Report } from '@edx/paragon/icons'; + +import { Routes } from '../../data/constants'; +import { DiscussionContext } from '../common/context'; +import { selectLearner, selectLearnerAvatar, selectLearnerProfile } from './data/selectors'; +import messages from './messages'; + +function LearnerPageHeader({ intl }) { + const { courseId, learnerUsername } = useContext(DiscussionContext); + const params = { courseId, learnerUsername }; + const learner = useSelector(selectLearner(learnerUsername)); + const profile = useSelector(selectLearnerProfile(learnerUsername)); + const avatar = useSelector(selectLearnerAvatar(learnerUsername)); + + const activeTabClass = (active) => classNames('btn', { 'btn-primary': active, 'btn-outline-primary': !active }); + + return ( +
+
+ + + {profile.username} + +
+
+ + + {intl.formatMessage(messages.postsTab)} {learner.threads} + { + learner.activeFlags ? ( + + + + ) : null + } + + + {intl.formatMessage(messages.responsesTab)} {learner.responses} + + + {intl.formatMessage(messages.commentsTab)} {learner.replies} + + +
+
+ ); +} + +LearnerPageHeader.propTypes = { + intl: intlShape.isRequired, +}; + +export default injectIntl(LearnerPageHeader); diff --git a/src/discussions/learners/LearnersContentView.jsx b/src/discussions/learners/LearnersContentView.jsx index 5a9971df..db650d77 100644 --- a/src/discussions/learners/LearnersContentView.jsx +++ b/src/discussions/learners/LearnersContentView.jsx @@ -1,81 +1,25 @@ import React, { useContext } from 'react'; -import classNames from 'classnames'; import { useSelector } from 'react-redux'; import { - generatePath, NavLink, Redirect, Route, Switch, + generatePath, Redirect, Route, Switch, } from 'react-router-dom'; -import { injectIntl, intlShape } from '@edx/frontend-platform/i18n'; -import { - Avatar, ButtonGroup, Card, Icon, IconButton, Spinner, -} from '@edx/paragon'; -import { MoreHoriz, Report } from '@edx/paragon/icons'; +import { Spinner } from '@edx/paragon'; import { LearnerTabs, RequestStatus, Routes } from '../../data/constants'; import { DiscussionContext } from '../common/context'; -import { - learnersLoadingStatus, selectLearner, selectLearnerAvatar, selectLearnerProfile, -} from './data/selectors'; +import { learnersLoadingStatus } from './data/selectors'; import CommentsTabContent from './learner/CommentsTabContent'; import PostsTabContent from './learner/PostsTabContent'; -import messages from './messages'; -function LearnersContentView({ intl }) { +function LearnersContentView() { const { courseId, learnerUsername } = useContext(DiscussionContext); const params = { courseId, learnerUsername }; const apiStatus = useSelector(learnersLoadingStatus()); - const learner = useSelector(selectLearner(learnerUsername)); - const profile = useSelector(selectLearnerProfile(learnerUsername)); - const avatar = useSelector(selectLearnerAvatar(learnerUsername)); - - const activeTabClass = (active) => classNames('btn', { 'btn-primary': active, 'btn-outline-primary': !active }); return (
- - -
- - - {profile.username} - -
- -
-
-
- - - - {intl.formatMessage(messages.postsTab)} {learner.threads} - { - learner.activeFlags ? ( - - - - ) : null - } - - - {intl.formatMessage(messages.responsesTab)} {learner.responses} - - - {intl.formatMessage(messages.commentsTab)} {learner.replies} - - - -
- @@ -104,7 +48,6 @@ function LearnersContentView({ intl }) { } LearnersContentView.propTypes = { - intl: intlShape.isRequired, }; -export default injectIntl(LearnersContentView); +export default LearnersContentView; diff --git a/src/discussions/learners/LearnersContentView.test.jsx b/src/discussions/learners/LearnersContentView.test.jsx index 8dbe8533..8326a902 100644 --- a/src/discussions/learners/LearnersContentView.test.jsx +++ b/src/discussions/learners/LearnersContentView.test.jsx @@ -16,10 +16,10 @@ import { initializeStore } from '../../store'; import { executeThunk } from '../../test-utils'; import { commentsApiUrl } from '../comments/data/api'; import { DiscussionContext } from '../common/context'; +import DiscussionContent from '../discussions-home/DiscussionContent'; import { threadsApiUrl } from '../posts/data/api'; import { coursesApiUrl, userProfileApiUrl } from './data/api'; import { fetchLearners } from './data/thunks'; -import LearnersContentView from './LearnersContentView'; import '../comments/data/__factories__'; import '../posts/data/__factories__'; @@ -37,7 +37,7 @@ function renderComponent(username = testUsername) { - + diff --git a/src/discussions/learners/LearnersView.jsx b/src/discussions/learners/LearnersView.jsx index 5c1b94a1..4a954c9b 100644 --- a/src/discussions/learners/LearnersView.jsx +++ b/src/discussions/learners/LearnersView.jsx @@ -46,8 +46,8 @@ function LearnersView() { } }; return ( -
-
+
+
{courseConfigLoadingStatus === RequestStatus.SUCCESSFUL && !learnersTabEnabled && (
-
);