Skip to content

Commit d7fcc86

Browse files
fix: fixed api calling issues for admin (#691)
* fix: fixed api calling issues for admin * test: fixed test case * refactor: fixed review issue --------- Co-authored-by: Awais Ansari <[email protected]>
1 parent c0873df commit d7fcc86

File tree

5 files changed

+32
-13
lines changed

5 files changed

+32
-13
lines changed

src/discussions/data/hooks.js

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import { getAuthenticatedUser } from '@edx/frontend-platform/auth';
1313
import { useIntl } from '@edx/frontend-platform/i18n';
1414
import { AppContext } from '@edx/frontend-platform/react';
1515

16+
import selectCourseTabs from '../../components/NavigationBar/data/selectors';
17+
import { LOADED } from '../../components/NavigationBar/data/slice';
1618
import fetchTab from '../../components/NavigationBar/data/thunks';
1719
import { RequestStatus, Routes } from '../../data/constants';
1820
import { selectTopicsUnderCategory } from '../../data/selectors';
@@ -32,6 +34,7 @@ import {
3234
selectIsCourseAdmin,
3335
selectIsCourseStaff,
3436
selectIsPostingEnabled,
37+
selectIsUserLearner,
3538
selectPostThreadCount,
3639
selectUserHasModerationPrivileges,
3740
selectUserIsGroupTa,
@@ -72,22 +75,34 @@ export const useSidebarVisible = () => {
7275
return !hideSidebar;
7376
};
7477

75-
export function useCourseDiscussionData(courseId, isEnrolled) {
78+
export function useCourseDiscussionData(courseId) {
79+
const dispatch = useDispatch();
80+
81+
useEffect(() => {
82+
async function fetchBaseData() {
83+
await dispatch(fetchCourseConfig(courseId));
84+
await dispatch(fetchTab(courseId));
85+
}
86+
87+
fetchBaseData();
88+
}, [courseId]);
89+
}
90+
91+
export function useCourseBlockData(courseId) {
7692
const dispatch = useDispatch();
7793
const { authenticatedUser } = useContext(AppContext);
94+
const { isEnrolled, courseStatus } = useSelector(selectCourseTabs);
95+
const isUserLearner = useSelector(selectIsUserLearner);
7896

7997
useEffect(() => {
8098
async function fetchBaseData() {
81-
if (isEnrolled) {
82-
await dispatch(fetchCourseConfig(courseId));
99+
if (courseStatus === LOADED && (!isUserLearner || isEnrolled)) {
83100
await dispatch(fetchCourseBlocks(courseId, authenticatedUser.username));
84-
} else {
85-
await dispatch(fetchTab(courseId));
86101
}
87102
}
88103

89104
fetchBaseData();
90-
}, [courseId, isEnrolled]);
105+
}, [courseId, isEnrolled, courseStatus, isUserLearner]);
91106
}
92107

93108
export function useRedirectToThread(courseId, enableInContextSidebar) {

src/discussions/data/selectors.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { createSelector } from '@reduxjs/toolkit';
22

33
import selectCourseTabs from '../../components/NavigationBar/data/selectors';
4-
import { LOADED } from '../../components/NavigationBar/data/slice';
54
import { PostsStatusFilter, ThreadType } from '../../data/constants';
5+
import { isCourseStatusValid } from '../utils';
66

77
export const selectAnonymousPostingConfig = state => ({
88
allowAnonymous: state.config.allowAnonymous,
@@ -86,7 +86,7 @@ export const selectIsUserLearner = createSelector(
8686
&& !userIsStaff
8787
&& !userIsCourseAdmin
8888
&& !userIsCourseStaff
89-
&& courseStatus === LOADED
89+
&& isCourseStatusValid(courseStatus)
9090
) || false
9191
),
9292
);

src/discussions/discussions-home/DiscussionsHome.jsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,19 @@ import { LearningHeader as Header } from '@edx/frontend-component-header';
1212

1313
import { Spinner } from '../../components';
1414
import selectCourseTabs from '../../components/NavigationBar/data/selectors';
15-
import { LOADED } from '../../components/NavigationBar/data/slice';
1615
import { ALL_ROUTES, DiscussionProvider, Routes as ROUTES } from '../../data/constants';
1716
import DiscussionContext from '../common/context';
1817
import ContentUnavailable from '../content-unavailable/ContentUnavailable';
1918
import {
20-
useCourseDiscussionData, useIsOnDesktop, useRedirectToThread, useSidebarVisible,
19+
useCourseBlockData, useCourseDiscussionData, useIsOnDesktop, useRedirectToThread, useSidebarVisible,
2120
} from '../data/hooks';
2221
import { selectDiscussionProvider, selectEnableInContext, selectIsUserLearner } from '../data/selectors';
2322
import { EmptyLearners, EmptyTopics } from '../empty-posts';
2423
import EmptyPosts from '../empty-posts/EmptyPosts';
2524
import { EmptyTopic as InContextEmptyTopics } from '../in-context-topics/components';
2625
import messages from '../messages';
2726
import { selectPostEditorVisible } from '../posts/data/selectors';
27+
import { isCourseStatusValid } from '../utils';
2828
import useFeedbackWrapper from './FeedbackWrapper';
2929

3030
const Footer = lazy(() => import('@edx/frontend-component-footer'));
@@ -58,8 +58,9 @@ const DiscussionsHome = () => {
5858
courseId, postId, topicId, category, learnerUsername,
5959
} = params;
6060

61-
useCourseDiscussionData(courseId, isEnrolled);
61+
useCourseDiscussionData(courseId);
6262
useRedirectToThread(courseId, enableInContextSidebar);
63+
useCourseBlockData(courseId);
6364
useFeedbackWrapper();
6465
/* Display the content area if we are currently viewing/editing a post or creating one.
6566
If the window is larger than a particular size, show the sidebar for navigating between posts/topics.
@@ -120,7 +121,7 @@ const DiscussionsHome = () => {
120121
</Routes>
121122
</Suspense>
122123
)}
123-
{(courseStatus === LOADED) && (
124+
{isCourseStatusValid(courseStatus) && (
124125
!isEnrolled && isUserLearner ? (
125126
<Suspense fallback={(<Spinner />)}>
126127
<Routes>

src/discussions/discussions-home/DiscussionsHome.test.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ describe('DiscussionsHome', () => {
230230

231231
it('should display post editor form when click on add a post button in legacy topics view', async () => {
232232
axiosMock.onGet(getDiscussionsConfigUrl(courseId)).reply(200, {
233-
enable_in_context: false,
233+
enable_in_context: false, hasModerationPrivileges: true,
234234
});
235235
await executeThunk(fetchCourseConfig(courseId), store.dispatch, store.getState);
236236
await renderComponent(`/${courseId}/topics`);

src/discussions/utils.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414

1515
import { getConfig } from '@edx/frontend-platform';
1616

17+
import { DENIED, LOADED } from '../components/NavigationBar/data/slice';
1718
import {
1819
ContentActions, Routes, ThreadType,
1920
} from '../data/constants';
@@ -313,3 +314,5 @@ export function getAuthorLabel(intl, authorLabel) {
313314

314315
return authorLabelMappings[authorLabel] || {};
315316
}
317+
318+
export const isCourseStatusValid = (courseStatus) => [DENIED, LOADED].includes(courseStatus);

0 commit comments

Comments
 (0)