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, });