diff --git a/src/generic/FormSwitchGroup.jsx b/src/generic/FormSwitchGroup.jsx
index 1713d6689..30bf322a6 100644
--- a/src/generic/FormSwitchGroup.jsx
+++ b/src/generic/FormSwitchGroup.jsx
@@ -13,6 +13,7 @@ export default function FormSwitchGroup({
onChange,
onBlur,
checked,
+ disabled,
}) {
const helpTextId = `${id}HelpText`;
@@ -36,6 +37,7 @@ export default function FormSwitchGroup({
onChange={onChange}
onBlur={onBlur}
checked={checked}
+ disabled={disabled}
/>
({
enableReportedContentEmailNotifications: false,
allowDivisionByUnit: false,
blackoutDates: [],
+ cohortsEnabled: false,
});
describe('OpenedXConfigForm', () => {
let axiosMock;
@@ -141,14 +142,17 @@ describe('OpenedXConfigForm', () => {
...legacyApiResponse.plugin_configuration,
reported_content_email_notifications_flag: true,
divided_course_wide_discussions: [],
+ available_division_schemes: [],
},
});
createComponent();
const { divideDiscussionIds } = defaultAppConfig(['13f106c6-6735-4e84-b097-0456cff55960', 'course']);
// DivisionByGroupFields
+
+ expect(container.querySelector('#alert')).toBeInTheDocument();
expect(container.querySelector('#divideByCohorts')).toBeInTheDocument();
- expect(container.querySelector('#divideByCohorts')).not.toBeChecked();
+ expect(container.querySelector('#divideByCohorts')).toBeDisabled();
expect(container.querySelector('#divideCourseTopicsByCohorts')).not.toBeInTheDocument();
divideDiscussionIds.forEach(id => expect(
@@ -179,6 +183,7 @@ describe('OpenedXConfigForm', () => {
reported_content_email_notifications_flag: true,
always_divide_inline_discussions: true,
divided_course_wide_discussions: [],
+ available_division_schemes: ['cohorts'],
},
});
createComponent();
@@ -186,14 +191,10 @@ describe('OpenedXConfigForm', () => {
// DivisionByGroupFields
expect(container.querySelector('#divideByCohorts')).toBeInTheDocument();
- expect(container.querySelector('#divideByCohorts')).toBeChecked();
+ expect(container.querySelector('#divideByCohorts')).not.toBeChecked();
expect(
container.querySelector('#divideCourseTopicsByCohorts'),
- ).toBeInTheDocument();
- expect(
- container.querySelector('#divideCourseTopicsByCohorts'),
- ).not.toBeChecked();
-
+ ).not.toBeInTheDocument();
divideDiscussionIds.forEach(id => expect(
container.querySelector(`#checkbox-${id}`),
).not.toBeInTheDocument());
@@ -229,13 +230,10 @@ describe('OpenedXConfigForm', () => {
// DivisionByGroupFields
expect(container.querySelector('#divideByCohorts')).toBeInTheDocument();
- expect(container.querySelector('#divideByCohorts')).toBeChecked();
- expect(container.querySelector('#divideCourseTopicsByCohorts')).toBeInTheDocument();
- expect(container.querySelector('#divideCourseTopicsByCohorts')).toBeChecked();
-
+ expect(container.querySelector('#divideByCohorts')).not.toBeChecked();
+ expect(container.querySelector('#divideCourseTopicsByCohorts')).not.toBeInTheDocument();
divideDiscussionIds.forEach(id => {
- expect(container.querySelector(`#checkbox-${id}`)).toBeInTheDocument();
- expect(container.querySelector(`#checkbox-${id}`)).toBeChecked();
+ expect(container.querySelector(`#checkbox-${id}`)).not.toBeInTheDocument();
});
});
diff --git a/src/pages-and-resources/discussions/app-config-form/apps/shared/DivisionByGroupFields.jsx b/src/pages-and-resources/discussions/app-config-form/apps/shared/DivisionByGroupFields.jsx
index fdbf57bdd..a222b5b45 100644
--- a/src/pages-and-resources/discussions/app-config-form/apps/shared/DivisionByGroupFields.jsx
+++ b/src/pages-and-resources/discussions/app-config-form/apps/shared/DivisionByGroupFields.jsx
@@ -1,8 +1,12 @@
import React, { useEffect, useContext } from 'react';
import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
-import { Form, TransitionReplace } from '@edx/paragon';
+import {
+ Form, TransitionReplace, Hyperlink, Alert,
+} from '@edx/paragon';
+import { AppContext } from '@edx/frontend-platform/react';
import { FieldArray, useFormikContext } from 'formik';
import _ from 'lodash';
+import { useParams } from 'react-router-dom';
import FormSwitchGroup from '../../../../../generic/FormSwitchGroup';
import messages from '../../messages';
import AppConfigFormDivider from './AppConfigFormDivider';
@@ -21,8 +25,13 @@ const DivisionByGroupFields = ({ intl }) => {
discussionTopics,
divideByCohorts,
divideCourseTopicsByCohorts,
+ cohortsEnabled,
} = appConfig;
+ const { courseId } = useParams();
+ const { config } = useContext(AppContext);
+ const learningCourseURL = `${config.LMS_BASE_URL}/courses/${courseId}/instructor`;
+
useEffect(() => {
if (divideByCohorts) {
if (!divideCourseTopicsByCohorts && _.size(discussionTopics) !== _.size(divideDiscussionIds)) {
@@ -56,20 +65,30 @@ const DivisionByGroupFields = ({ intl }) => {
return (
<>
-
+
{intl.formatMessage(messages.divisionByGroup)}
+ {!cohortsEnabled
+ && (
+
+ {intl.formatMessage(messages.cohortsEnabled)}
+
+ {intl.formatMessage(messages.instructorDashboard)}
+
+
+ )}
- {divideByCohorts ? (
+ {(divideByCohorts && cohortsEnabled) ? (
0;
return {
@@ -69,6 +70,7 @@ function normalizePluginConfig(data) {
allowDivisionByUnit: false,
divideByCohorts: enableDivideByCohorts,
divideCourseTopicsByCohorts: enableDivideCourseTopicsByCohorts,
+ cohortsEnabled: data.available_division_schemes?.includes('cohort') || false,
};
}
diff --git a/src/pages-and-resources/discussions/data/redux.test.js b/src/pages-and-resources/discussions/data/redux.test.js
index a0b017f21..c63c23c04 100644
--- a/src/pages-and-resources/discussions/data/redux.test.js
+++ b/src/pages-and-resources/discussions/data/redux.test.js
@@ -252,6 +252,7 @@ describe('Data layer integration tests', () => {
alwaysDivideInlineDiscussions: false,
allowDivisionByUnit: false,
divideCourseTopicsByCohorts: false,
+ cohortsEnabled: false,
});
});
});
@@ -455,6 +456,7 @@ describe('Data layer integration tests', () => {
allowDivisionsByUnit: true,
alwaysDivideInlineDiscussions: true,
divideCourseTopicsByCohorts: true,
+ divisionScheme: DivisionSchemes.COHORT,
divideDiscussionIds,
discussionTopics: [
{ name: 'Edx', id: '13f106c6-6735-4e84-b097-0456cff55960' },
@@ -463,7 +465,6 @@ describe('Data layer integration tests', () => {
},
pagesAndResourcesPath,
), store.dispatch);
-
expect(window.location.pathname).toEqual(pagesAndResourcesPath);
expect(store.getState().discussions).toEqual(
expect.objectContaining({
@@ -490,6 +491,7 @@ describe('Data layer integration tests', () => {
// happens, but NOT what we want to have happen!
divideByCohorts: true,
divisionScheme: DivisionSchemes.COHORT,
+ cohortsEnabled: false,
allowDivisionByUnit: false,
divideCourseTopicsByCohorts: true,
});