-
{name}
+
{name}
{formatMessage(messages.titleId, { id })}
diff --git a/src/group-configurations/group-configuration-container/UsageList.jsx b/src/group-configurations/group-configuration-container/UsageList.jsx
index a8eba8caa5..0c15ce32e9 100644
--- a/src/group-configurations/group-configuration-container/UsageList.jsx
+++ b/src/group-configurations/group-configuration-container/UsageList.jsx
@@ -1,5 +1,4 @@
import PropTypes from 'prop-types';
-import { useParams } from 'react-router';
import { useIntl } from '@edx/frontend-platform/i18n';
import { Hyperlink, Stack } from '@edx/paragon';
@@ -8,7 +7,6 @@ import messages from './messages';
const UsageList = ({ className, itemList, isExperiment }) => {
const { formatMessage } = useIntl();
- const { courseId } = useParams();
const usageDescription = isExperiment
? messages.experimentAccessTo
: messages.accessTo;
@@ -22,8 +20,8 @@ const UsageList = ({ className, itemList, isExperiment }) => {
{itemList.map(({ url, label }) => (
{label}
diff --git a/src/group-configurations/group-configuration-container/index.jsx b/src/group-configurations/group-configuration-container/index.jsx
index e73161d5a5..bb9a441340 100644
--- a/src/group-configurations/group-configuration-container/index.jsx
+++ b/src/group-configurations/group-configuration-container/index.jsx
@@ -8,22 +8,36 @@ import {
Hyperlink,
Icon,
IconButtonWithTooltip,
-} from '@edx/paragon';
+ useToggle,
+} from '@openedx/paragon';
import {
DeleteOutline as DeleteOutlineIcon,
EditOutline as EditOutlineIcon,
-} from '@edx/paragon/icons';
+} from '@openedx/paragon/icons';
+import DeleteModal from '../../generic/delete-modal/DeleteModal';
+import ContentGroupContainer from '../content-groups-section/ContentGroupContainer';
import ExperimentGroupStack from './ExperimentGroupStack';
import TitleButton from './TitleButton';
import UsageList from './UsageList';
import messages from './messages';
-const GroupConfigurationContainer = ({ group, isExperiment, readOnly }) => {
+const GroupConfigurationContainer = ({
+ group,
+ groupNames,
+ parentGroupId,
+ isExperiment,
+ readOnly,
+ groupConfigurationsActions,
+ handleEditGroup,
+}) => {
const { formatMessage } = useIntl();
const { courseId } = useParams();
const [isExpanded, setIsExpanded] = useState(false);
+ const [isEditMode, switchOnEditMode, switchOffEditMode] = useToggle(false);
+ const [isOpenDeleteModal, openDeleteModal, closeDeleteModal] = useToggle(false);
const { groups: groupsControl, description, usage } = group;
+ const isUsedInLocation = !!usage.length;
const { href: outlineUrl } = new URL(
`/course/${courseId}`,
@@ -60,64 +74,110 @@ const GroupConfigurationContainer = ({ group, isExperiment, readOnly }) => {
setIsExpanded((prevState) => !prevState);
};
+ const handleDeleteGroup = () => {
+ groupConfigurationsActions.handleDeleteContentGroup(
+ parentGroupId,
+ group.id,
+ );
+ closeDeleteModal();
+ };
+
return (
-
-
-
+ {isEditMode ? (
+ handleEditGroup(group.id, values, switchOffEditMode)}
/>
- {!readOnly && (
-
- ({})}
- data-testid="configuration-card-header-edit"
- />
- ({})}
- data-testid="configuration-card-header-delete"
- />
-
- )}
-
- {isExpanded && (
-
- {isExperiment && (
-
{description}
- )}
- {isExperiment &&
}
- {usage?.length ? (
-
+
+
- ) : (
- displayGuide
+ {!readOnly && (
+
+
+
+
+ )}
+
+ {isExpanded && (
+
+ {isExperiment && (
+ {description}
+ )}
+ {isExperiment && (
+
+ )}
+ {usage?.length ? (
+
+ ) : (
+ displayGuide
+ )}
+
)}
)}
-
+
+ >
);
};
GroupConfigurationContainer.defaultProps = {
+ group: {
+ id: undefined,
+ name: '',
+ usage: [],
+ version: undefined,
+ },
isExperiment: false,
readOnly: false,
+ groupNames: [],
+ parentGroupId: null,
+ handleEditGroup: () => ({}),
+ groupConfigurationsActions: {},
};
GroupConfigurationContainer.propTypes = {
@@ -151,9 +211,17 @@ GroupConfigurationContainer.propTypes = {
}),
readOnly: PropTypes.bool,
scheme: PropTypes.string,
- }).isRequired,
+ }),
+ groupNames: PropTypes.arrayOf(PropTypes.string),
+ parentGroupId: PropTypes.number,
isExperiment: PropTypes.bool,
readOnly: PropTypes.bool,
+ handleEditGroup: PropTypes.func,
+ groupConfigurationsActions: PropTypes.shape({
+ handleCreateContentGroup: PropTypes.func,
+ handleDeleteContentGroup: PropTypes.func,
+ handleEditContentGroup: PropTypes.func,
+ }),
};
export default GroupConfigurationContainer;
diff --git a/src/group-configurations/group-configuration-container/messages.js b/src/group-configurations/group-configuration-container/messages.js
index b369b32aae..98edf1c0d6 100644
--- a/src/group-configurations/group-configuration-container/messages.js
+++ b/src/group-configurations/group-configuration-container/messages.js
@@ -55,6 +55,14 @@ const messages = defineMessages({
id: 'course-authoring.group-configurations.container.title-id',
defaultMessage: 'ID: {id}',
},
+ subtitleModalDelete: {
+ id: 'course-authoring.group-configurations.container.delete-modal.subtitle',
+ defaultMessage: 'content group',
+ },
+ deleteRestriction: {
+ id: 'course-authoring.group-configurations.container.delete-restriction',
+ defaultMessage: 'Cannot delete when in use by a unit',
+ },
});
export default messages;
diff --git a/src/group-configurations/group-configuration-container/utils.js b/src/group-configurations/group-configuration-container/utils.js
index d67ad2d85b..2084d299f5 100644
--- a/src/group-configurations/group-configuration-container/utils.js
+++ b/src/group-configurations/group-configuration-container/utils.js
@@ -1,12 +1,13 @@
+import { getConfig } from '@edx/frontend-platform';
+
import messages from './messages';
/**
* Formats the given URL to a unit page URL.
* @param {string} url - The original part of URL.
- * @param {string} courseId - The ID of the course.
* @returns {string} - The formatted unit page URL.
*/
-const formatUrlToUnitPage = (url, courseId) => `/course/${courseId}${url}`;
+const formatUrlToUnitPage = (url) => new URL(url, getConfig().STUDIO_BASE_URL).href;
/**
* Retrieves a list of group count based on the number of items.
diff --git a/src/group-configurations/hooks.jsx b/src/group-configurations/hooks.jsx
index 40ab8869e0..41f99a9c0d 100644
--- a/src/group-configurations/hooks.jsx
+++ b/src/group-configurations/hooks.jsx
@@ -1,15 +1,61 @@
-import { useDispatch, useSelector } from 'react-redux';
import { useEffect } from 'react';
+import { useDispatch, useSelector } from 'react-redux';
+import { getProcessingNotification } from '../generic/processing-notification/data/selectors';
import { RequestStatus } from '../data/constants';
-import { fetchGroupConfigurationsQuery } from './data/thunk';
-import { getGroupConfigurationsData, getLoadingStatus } from './data/selectors';
+import {
+ fetchGroupConfigurationsQuery,
+ createContentGroupQuery,
+ editContentGroupQuery,
+ deleteContentGroupQuery,
+} from './data/thunk';
+import { updateSavingStatuses } from './data/slice';
+import {
+ getGroupConfigurationsData,
+ getLoadingStatus,
+ getSavingStatus,
+} from './data/selectors';
const useGroupConfigurations = (courseId) => {
const dispatch = useDispatch();
-
const groupConfigurations = useSelector(getGroupConfigurationsData);
const loadingStatus = useSelector(getLoadingStatus);
+ const savingStatus = useSelector(getSavingStatus);
+ const {
+ isShow: isShowProcessingNotification,
+ title: processingNotificationTitle,
+ } = useSelector(getProcessingNotification);
+
+ const handleInternetConnectionFailed = () => {
+ dispatch(updateSavingStatuses({ status: RequestStatus.FAILED }));
+ };
+
+ const groupConfigurationsActions = {
+ handleCreateContentGroup: (group, callbackToClose) => {
+ dispatch(createContentGroupQuery(courseId, group)).then((result) => {
+ if (result) {
+ callbackToClose();
+ }
+ });
+ },
+ handleEditContentGroup: (group, callbackToClose) => {
+ dispatch(editContentGroupQuery(courseId, group)).then((result) => {
+ if (result) {
+ callbackToClose();
+ }
+ });
+ },
+ handleDeleteContentGroup: (parentGroupId, groupId) => {
+ dispatch(deleteContentGroupQuery(courseId, parentGroupId, groupId));
+ },
+ };
+
+ useEffect(() => {
+ if (savingStatus === RequestStatus.SUCCESSFUL) {
+ dispatch(fetchGroupConfigurationsQuery(courseId));
+ dispatch(updateSavingStatuses({ status: '' }));
+ }
+ }, [savingStatus]);
useEffect(() => {
dispatch(fetchGroupConfigurationsQuery(courseId));
@@ -17,7 +63,12 @@ const useGroupConfigurations = (courseId) => {
return {
isLoading: loadingStatus === RequestStatus.IN_PROGRESS,
+ savingStatus,
+ groupConfigurationsActions,
groupConfigurations,
+ isShowProcessingNotification,
+ processingNotificationTitle,
+ handleInternetConnectionFailed,
};
};
diff --git a/src/group-configurations/index.jsx b/src/group-configurations/index.jsx
index fe50277d42..c70f58a483 100644
--- a/src/group-configurations/index.jsx
+++ b/src/group-configurations/index.jsx
@@ -4,10 +4,13 @@ import {
Container, Layout, Stack, Row,
} from '@edx/paragon';
+import { RequestStatus } from '../data/constants';
import { LoadingSpinner } from '../generic/Loading';
import { useModel } from '../generic/model-store';
import SubHeader from '../generic/sub-header/SubHeader';
import getPageHeadTitle from '../generic/utils';
+import ProcessingNotification from '../generic/processing-notification';
+import InternetConnectionAlert from '../generic/internet-connection-alert';
import messages from './messages';
import ContentGroupsSection from './content-groups-section';
import ExperimentConfigurationsSection from './experiment-configurations-section';
@@ -20,12 +23,17 @@ const GroupConfigurations = ({ courseId }) => {
const courseDetails = useModel('courseDetails', courseId);
const {
isLoading,
+ savingStatus,
+ groupConfigurationsActions,
+ processingNotificationTitle,
+ isShowProcessingNotification,
groupConfigurations: {
allGroupConfigurations,
shouldShowEnrollmentTrack,
shouldShowExperimentGroups,
experimentGroupConfigurations,
},
+ handleInternetConnectionFailed,
} = useGroupConfigurations(courseId);
document.title = getPageHeadTitle(
@@ -68,7 +76,10 @@ const GroupConfigurations = ({ courseId }) => {
/>
)}
{!!contentGroup && (
-
+
)}
{shouldShowExperimentGroups && (
{
/>
+
);
};
diff --git a/src/i18n/messages/ar.json b/src/i18n/messages/ar.json
index 7bfe3a9eac..85bddfefbc 100644
--- a/src/i18n/messages/ar.json
+++ b/src/i18n/messages/ar.json
@@ -1193,5 +1193,16 @@
"course-authoring.course-unit.paste-notification.has-errors.description": "The following required files could not be added to the course:",
"course-authoring.course-unit.paste-notification.has-new-files.title": "New file(s) added to Files & Uploads.",
"course-authoring.course-unit.paste-notification.has-new-files.description": "The following required files were imported to this course:",
- "course-authoring.course-unit.paste-notification.has-new-files.button.text": "View files"
+ "course-authoring.course-unit.paste-notification.has-new-files.button.text": "View files",
+ "course-authoring.group-configurations.container.delete-modal.subtitle": "content group",
+ "course-authoring.group-configurations.container.delete-restriction": "Cannot delete when in use by a unit",
+ "course-authoring.group-configurations.content-groups.new-group.header": "Content group name *",
+ "course-authoring.group-configurations.content-groups.new-group.input.placeholder": "This is the name of the group",
+ "course-authoring.group-configurations.content-groups.new-group.invalid-message": "All groups must have a unique name.",
+ "course-authoring.group-configurations.content-groups.new-group.cancel": "Cancel",
+ "course-authoring.group-configurations.content-groups.edit-group.delete": "Delete",
+ "course-authoring.group-configurations.content-groups.new-group.create": "Create",
+ "course-authoring.group-configurations.content-groups.edit-group.save": "Save",
+ "course-authoring.group-configurations.content-groups.new-group.required-error": "Group name is required",
+ "course-authoring.group-configurations.content-groups.edit-group.alert-group-in-usage": "This content group is used in one or more units."
}
diff --git a/src/i18n/messages/de.json b/src/i18n/messages/de.json
index 698b93c41b..1c0520c0c3 100644
--- a/src/i18n/messages/de.json
+++ b/src/i18n/messages/de.json
@@ -1194,5 +1194,16 @@
"course-authoring.course-unit.paste-notification.has-errors.description": "The following required files could not be added to the course:",
"course-authoring.course-unit.paste-notification.has-new-files.title": "New file(s) added to Files & Uploads.",
"course-authoring.course-unit.paste-notification.has-new-files.description": "The following required files were imported to this course:",
- "course-authoring.course-unit.paste-notification.has-new-files.button.text": "View files"
+ "course-authoring.course-unit.paste-notification.has-new-files.button.text": "View files",
+ "course-authoring.group-configurations.container.delete-modal.subtitle": "content group",
+ "course-authoring.group-configurations.container.delete-restriction": "Cannot delete when in use by a unit",
+ "course-authoring.group-configurations.content-groups.new-group.header": "Content group name *",
+ "course-authoring.group-configurations.content-groups.new-group.input.placeholder": "This is the name of the group",
+ "course-authoring.group-configurations.content-groups.new-group.invalid-message": "All groups must have a unique name.",
+ "course-authoring.group-configurations.content-groups.new-group.cancel": "Cancel",
+ "course-authoring.group-configurations.content-groups.edit-group.delete": "Delete",
+ "course-authoring.group-configurations.content-groups.new-group.create": "Create",
+ "course-authoring.group-configurations.content-groups.edit-group.save": "Save",
+ "course-authoring.group-configurations.content-groups.new-group.required-error": "Group name is required",
+ "course-authoring.group-configurations.content-groups.edit-group.alert-group-in-usage": "This content group is used in one or more units."
}
diff --git a/src/i18n/messages/de_DE.json b/src/i18n/messages/de_DE.json
index e80b779864..487ad1addb 100644
--- a/src/i18n/messages/de_DE.json
+++ b/src/i18n/messages/de_DE.json
@@ -1194,5 +1194,16 @@
"course-authoring.course-unit.paste-notification.has-errors.description": "The following required files could not be added to the course:",
"course-authoring.course-unit.paste-notification.has-new-files.title": "New file(s) added to Files & Uploads.",
"course-authoring.course-unit.paste-notification.has-new-files.description": "The following required files were imported to this course:",
- "course-authoring.course-unit.paste-notification.has-new-files.button.text": "View files"
+ "course-authoring.course-unit.paste-notification.has-new-files.button.text": "View files",
+ "course-authoring.group-configurations.container.delete-modal.subtitle": "content group",
+ "course-authoring.group-configurations.container.delete-restriction": "Cannot delete when in use by a unit",
+ "course-authoring.group-configurations.content-groups.new-group.header": "Content group name *",
+ "course-authoring.group-configurations.content-groups.new-group.input.placeholder": "This is the name of the group",
+ "course-authoring.group-configurations.content-groups.new-group.invalid-message": "All groups must have a unique name.",
+ "course-authoring.group-configurations.content-groups.new-group.cancel": "Cancel",
+ "course-authoring.group-configurations.content-groups.edit-group.delete": "Delete",
+ "course-authoring.group-configurations.content-groups.new-group.create": "Create",
+ "course-authoring.group-configurations.content-groups.edit-group.save": "Save",
+ "course-authoring.group-configurations.content-groups.new-group.required-error": "Group name is required",
+ "course-authoring.group-configurations.content-groups.edit-group.alert-group-in-usage": "This content group is used in one or more units."
}
diff --git a/src/i18n/messages/es_419.json b/src/i18n/messages/es_419.json
index 87e9e8b69b..bbbdec9f27 100644
--- a/src/i18n/messages/es_419.json
+++ b/src/i18n/messages/es_419.json
@@ -1194,5 +1194,16 @@
"course-authoring.course-unit.paste-notification.has-errors.description": "The following required files could not be added to the course:",
"course-authoring.course-unit.paste-notification.has-new-files.title": "New file(s) added to Files & Uploads.",
"course-authoring.course-unit.paste-notification.has-new-files.description": "The following required files were imported to this course:",
- "course-authoring.course-unit.paste-notification.has-new-files.button.text": "View files"
+ "course-authoring.course-unit.paste-notification.has-new-files.button.text": "View files",
+ "course-authoring.group-configurations.container.delete-modal.subtitle": "content group",
+ "course-authoring.group-configurations.container.delete-restriction": "Cannot delete when in use by a unit",
+ "course-authoring.group-configurations.content-groups.new-group.header": "Content group name *",
+ "course-authoring.group-configurations.content-groups.new-group.input.placeholder": "This is the name of the group",
+ "course-authoring.group-configurations.content-groups.new-group.invalid-message": "All groups must have a unique name.",
+ "course-authoring.group-configurations.content-groups.new-group.cancel": "Cancel",
+ "course-authoring.group-configurations.content-groups.edit-group.delete": "Delete",
+ "course-authoring.group-configurations.content-groups.new-group.create": "Create",
+ "course-authoring.group-configurations.content-groups.edit-group.save": "Save",
+ "course-authoring.group-configurations.content-groups.new-group.required-error": "Group name is required",
+ "course-authoring.group-configurations.content-groups.edit-group.alert-group-in-usage": "This content group is used in one or more units."
}
diff --git a/src/i18n/messages/fa_IR.json b/src/i18n/messages/fa_IR.json
index 44d6f55b87..0c6b077204 100644
--- a/src/i18n/messages/fa_IR.json
+++ b/src/i18n/messages/fa_IR.json
@@ -216,5 +216,16 @@
"course-authoring.course-unit.paste-notification.has-errors.description": "The following required files could not be added to the course:",
"course-authoring.course-unit.paste-notification.has-new-files.title": "New file(s) added to Files & Uploads.",
"course-authoring.course-unit.paste-notification.has-new-files.description": "The following required files were imported to this course:",
- "course-authoring.course-unit.paste-notification.has-new-files.button.text": "View files"
+ "course-authoring.course-unit.paste-notification.has-new-files.button.text": "View files",
+ "course-authoring.group-configurations.container.delete-modal.subtitle": "content group",
+ "course-authoring.group-configurations.container.delete-restriction": "Cannot delete when in use by a unit",
+ "course-authoring.group-configurations.content-groups.new-group.header": "Content group name *",
+ "course-authoring.group-configurations.content-groups.new-group.input.placeholder": "This is the name of the group",
+ "course-authoring.group-configurations.content-groups.new-group.invalid-message": "All groups must have a unique name.",
+ "course-authoring.group-configurations.content-groups.new-group.cancel": "Cancel",
+ "course-authoring.group-configurations.content-groups.edit-group.delete": "Delete",
+ "course-authoring.group-configurations.content-groups.new-group.create": "Create",
+ "course-authoring.group-configurations.content-groups.edit-group.save": "Save",
+ "course-authoring.group-configurations.content-groups.new-group.required-error": "Group name is required",
+ "course-authoring.group-configurations.content-groups.edit-group.alert-group-in-usage": "This content group is used in one or more units."
}
diff --git a/src/i18n/messages/fr.json b/src/i18n/messages/fr.json
index f104bc0923..d5c45a3390 100644
--- a/src/i18n/messages/fr.json
+++ b/src/i18n/messages/fr.json
@@ -1194,5 +1194,16 @@
"course-authoring.course-unit.paste-notification.has-errors.description": "The following required files could not be added to the course:",
"course-authoring.course-unit.paste-notification.has-new-files.title": "New file(s) added to Files & Uploads.",
"course-authoring.course-unit.paste-notification.has-new-files.description": "The following required files were imported to this course:",
- "course-authoring.course-unit.paste-notification.has-new-files.button.text": "View files"
+ "course-authoring.course-unit.paste-notification.has-new-files.button.text": "View files",
+ "course-authoring.group-configurations.container.delete-modal.subtitle": "content group",
+ "course-authoring.group-configurations.container.delete-restriction": "Cannot delete when in use by a unit",
+ "course-authoring.group-configurations.content-groups.new-group.header": "Content group name *",
+ "course-authoring.group-configurations.content-groups.new-group.input.placeholder": "This is the name of the group",
+ "course-authoring.group-configurations.content-groups.new-group.invalid-message": "All groups must have a unique name.",
+ "course-authoring.group-configurations.content-groups.new-group.cancel": "Cancel",
+ "course-authoring.group-configurations.content-groups.edit-group.delete": "Delete",
+ "course-authoring.group-configurations.content-groups.new-group.create": "Create",
+ "course-authoring.group-configurations.content-groups.edit-group.save": "Save",
+ "course-authoring.group-configurations.content-groups.new-group.required-error": "Group name is required",
+ "course-authoring.group-configurations.content-groups.edit-group.alert-group-in-usage": "This content group is used in one or more units."
}
diff --git a/src/i18n/messages/fr_CA.json b/src/i18n/messages/fr_CA.json
index b0ee834f64..3a4f0aedc7 100644
--- a/src/i18n/messages/fr_CA.json
+++ b/src/i18n/messages/fr_CA.json
@@ -1194,5 +1194,16 @@
"course-authoring.course-unit.paste-notification.has-errors.description": "The following required files could not be added to the course:",
"course-authoring.course-unit.paste-notification.has-new-files.title": "New file(s) added to Files & Uploads.",
"course-authoring.course-unit.paste-notification.has-new-files.description": "The following required files were imported to this course:",
- "course-authoring.course-unit.paste-notification.has-new-files.button.text": "View files"
+ "course-authoring.course-unit.paste-notification.has-new-files.button.text": "View files",
+ "course-authoring.group-configurations.container.delete-modal.subtitle": "content group",
+ "course-authoring.group-configurations.container.delete-restriction": "Cannot delete when in use by a unit",
+ "course-authoring.group-configurations.content-groups.new-group.header": "Content group name *",
+ "course-authoring.group-configurations.content-groups.new-group.input.placeholder": "This is the name of the group",
+ "course-authoring.group-configurations.content-groups.new-group.invalid-message": "All groups must have a unique name.",
+ "course-authoring.group-configurations.content-groups.new-group.cancel": "Cancel",
+ "course-authoring.group-configurations.content-groups.edit-group.delete": "Delete",
+ "course-authoring.group-configurations.content-groups.new-group.create": "Create",
+ "course-authoring.group-configurations.content-groups.edit-group.save": "Save",
+ "course-authoring.group-configurations.content-groups.new-group.required-error": "Group name is required",
+ "course-authoring.group-configurations.content-groups.edit-group.alert-group-in-usage": "This content group is used in one or more units."
}
diff --git a/src/i18n/messages/hi.json b/src/i18n/messages/hi.json
index 698b93c41b..1c0520c0c3 100644
--- a/src/i18n/messages/hi.json
+++ b/src/i18n/messages/hi.json
@@ -1194,5 +1194,16 @@
"course-authoring.course-unit.paste-notification.has-errors.description": "The following required files could not be added to the course:",
"course-authoring.course-unit.paste-notification.has-new-files.title": "New file(s) added to Files & Uploads.",
"course-authoring.course-unit.paste-notification.has-new-files.description": "The following required files were imported to this course:",
- "course-authoring.course-unit.paste-notification.has-new-files.button.text": "View files"
+ "course-authoring.course-unit.paste-notification.has-new-files.button.text": "View files",
+ "course-authoring.group-configurations.container.delete-modal.subtitle": "content group",
+ "course-authoring.group-configurations.container.delete-restriction": "Cannot delete when in use by a unit",
+ "course-authoring.group-configurations.content-groups.new-group.header": "Content group name *",
+ "course-authoring.group-configurations.content-groups.new-group.input.placeholder": "This is the name of the group",
+ "course-authoring.group-configurations.content-groups.new-group.invalid-message": "All groups must have a unique name.",
+ "course-authoring.group-configurations.content-groups.new-group.cancel": "Cancel",
+ "course-authoring.group-configurations.content-groups.edit-group.delete": "Delete",
+ "course-authoring.group-configurations.content-groups.new-group.create": "Create",
+ "course-authoring.group-configurations.content-groups.edit-group.save": "Save",
+ "course-authoring.group-configurations.content-groups.new-group.required-error": "Group name is required",
+ "course-authoring.group-configurations.content-groups.edit-group.alert-group-in-usage": "This content group is used in one or more units."
}
diff --git a/src/i18n/messages/it.json b/src/i18n/messages/it.json
index 698b93c41b..1c0520c0c3 100644
--- a/src/i18n/messages/it.json
+++ b/src/i18n/messages/it.json
@@ -1194,5 +1194,16 @@
"course-authoring.course-unit.paste-notification.has-errors.description": "The following required files could not be added to the course:",
"course-authoring.course-unit.paste-notification.has-new-files.title": "New file(s) added to Files & Uploads.",
"course-authoring.course-unit.paste-notification.has-new-files.description": "The following required files were imported to this course:",
- "course-authoring.course-unit.paste-notification.has-new-files.button.text": "View files"
+ "course-authoring.course-unit.paste-notification.has-new-files.button.text": "View files",
+ "course-authoring.group-configurations.container.delete-modal.subtitle": "content group",
+ "course-authoring.group-configurations.container.delete-restriction": "Cannot delete when in use by a unit",
+ "course-authoring.group-configurations.content-groups.new-group.header": "Content group name *",
+ "course-authoring.group-configurations.content-groups.new-group.input.placeholder": "This is the name of the group",
+ "course-authoring.group-configurations.content-groups.new-group.invalid-message": "All groups must have a unique name.",
+ "course-authoring.group-configurations.content-groups.new-group.cancel": "Cancel",
+ "course-authoring.group-configurations.content-groups.edit-group.delete": "Delete",
+ "course-authoring.group-configurations.content-groups.new-group.create": "Create",
+ "course-authoring.group-configurations.content-groups.edit-group.save": "Save",
+ "course-authoring.group-configurations.content-groups.new-group.required-error": "Group name is required",
+ "course-authoring.group-configurations.content-groups.edit-group.alert-group-in-usage": "This content group is used in one or more units."
}
diff --git a/src/i18n/messages/it_IT.json b/src/i18n/messages/it_IT.json
index a41cdf6031..93685ca002 100644
--- a/src/i18n/messages/it_IT.json
+++ b/src/i18n/messages/it_IT.json
@@ -1194,5 +1194,16 @@
"course-authoring.course-unit.paste-notification.has-errors.description": "The following required files could not be added to the course:",
"course-authoring.course-unit.paste-notification.has-new-files.title": "New file(s) added to Files & Uploads.",
"course-authoring.course-unit.paste-notification.has-new-files.description": "The following required files were imported to this course:",
- "course-authoring.course-unit.paste-notification.has-new-files.button.text": "View files"
+ "course-authoring.course-unit.paste-notification.has-new-files.button.text": "View files",
+ "course-authoring.group-configurations.container.delete-modal.subtitle": "content group",
+ "course-authoring.group-configurations.container.delete-restriction": "Cannot delete when in use by a unit",
+ "course-authoring.group-configurations.content-groups.new-group.header": "Content group name *",
+ "course-authoring.group-configurations.content-groups.new-group.input.placeholder": "This is the name of the group",
+ "course-authoring.group-configurations.content-groups.new-group.invalid-message": "All groups must have a unique name.",
+ "course-authoring.group-configurations.content-groups.new-group.cancel": "Cancel",
+ "course-authoring.group-configurations.content-groups.edit-group.delete": "Delete",
+ "course-authoring.group-configurations.content-groups.new-group.create": "Create",
+ "course-authoring.group-configurations.content-groups.edit-group.save": "Save",
+ "course-authoring.group-configurations.content-groups.new-group.required-error": "Group name is required",
+ "course-authoring.group-configurations.content-groups.edit-group.alert-group-in-usage": "This content group is used in one or more units."
}
diff --git a/src/i18n/messages/pt.json b/src/i18n/messages/pt.json
index 4cbc68a89a..496c379204 100644
--- a/src/i18n/messages/pt.json
+++ b/src/i18n/messages/pt.json
@@ -1194,5 +1194,17 @@
"course-authoring.course-unit.paste-notification.has-errors.description": "The following required files could not be added to the course:",
"course-authoring.course-unit.paste-notification.has-new-files.title": "New file(s) added to Files & Uploads.",
"course-authoring.course-unit.paste-notification.has-new-files.description": "The following required files were imported to this course:",
- "course-authoring.course-unit.paste-notification.has-new-files.button.text": "View files"
+ "course-authoring.course-unit.paste-notification.has-new-files.button.text": "View files",
+ "course-authoring.group-configurations.container.delete-modal.subtitle": "content group",
+ "course-authoring.group-configurations.container.delete-restriction": "Cannot delete when in use by a unit",
+ "course-authoring.group-configurations.content-groups.new-group.header": "Content group name *",
+ "course-authoring.group-configurations.content-groups.new-group.input.placeholder": "This is the name of the group",
+ "course-authoring.group-configurations.content-groups.new-group.invalid-message": "All groups must have a unique name.",
+ "course-authoring.group-configurations.content-groups.new-group.cancel": "Cancel",
+ "course-authoring.group-configurations.content-groups.edit-group.delete": "Delete",
+ "course-authoring.group-configurations.content-groups.new-group.create": "Create",
+ "course-authoring.group-configurations.content-groups.edit-group.save": "Save",
+ "course-authoring.group-configurations.content-groups.new-group.required-error": "Group name is required",
+ "": "Group name already exists",
+ "course-authoring.group-configurations.content-groups.edit-group.alert-group-in-usage": "This content group is used in one or more units."
}
diff --git a/src/i18n/messages/pt_PT.json b/src/i18n/messages/pt_PT.json
index df61cd2186..4d814a54e8 100644
--- a/src/i18n/messages/pt_PT.json
+++ b/src/i18n/messages/pt_PT.json
@@ -1194,5 +1194,16 @@
"course-authoring.course-unit.paste-notification.has-errors.description": "The following required files could not be added to the course:",
"course-authoring.course-unit.paste-notification.has-new-files.title": "New file(s) added to Files & Uploads.",
"course-authoring.course-unit.paste-notification.has-new-files.description": "The following required files were imported to this course:",
- "course-authoring.course-unit.paste-notification.has-new-files.button.text": "View files"
+ "course-authoring.course-unit.paste-notification.has-new-files.button.text": "View files",
+ "course-authoring.group-configurations.container.delete-modal.subtitle": "content group",
+ "course-authoring.group-configurations.container.delete-restriction": "Cannot delete when in use by a unit",
+ "course-authoring.group-configurations.content-groups.new-group.header": "Content group name *",
+ "course-authoring.group-configurations.content-groups.new-group.input.placeholder": "This is the name of the group",
+ "course-authoring.group-configurations.content-groups.new-group.invalid-message": "All groups must have a unique name.",
+ "course-authoring.group-configurations.content-groups.new-group.cancel": "Cancel",
+ "course-authoring.group-configurations.content-groups.edit-group.delete": "Delete",
+ "course-authoring.group-configurations.content-groups.new-group.create": "Create",
+ "course-authoring.group-configurations.content-groups.edit-group.save": "Save",
+ "course-authoring.group-configurations.content-groups.new-group.required-error": "Group name is required",
+ "course-authoring.group-configurations.content-groups.edit-group.alert-group-in-usage": "This content group is used in one or more units."
}
diff --git a/src/i18n/messages/ru.json b/src/i18n/messages/ru.json
index 698b93c41b..1c0520c0c3 100644
--- a/src/i18n/messages/ru.json
+++ b/src/i18n/messages/ru.json
@@ -1194,5 +1194,16 @@
"course-authoring.course-unit.paste-notification.has-errors.description": "The following required files could not be added to the course:",
"course-authoring.course-unit.paste-notification.has-new-files.title": "New file(s) added to Files & Uploads.",
"course-authoring.course-unit.paste-notification.has-new-files.description": "The following required files were imported to this course:",
- "course-authoring.course-unit.paste-notification.has-new-files.button.text": "View files"
+ "course-authoring.course-unit.paste-notification.has-new-files.button.text": "View files",
+ "course-authoring.group-configurations.container.delete-modal.subtitle": "content group",
+ "course-authoring.group-configurations.container.delete-restriction": "Cannot delete when in use by a unit",
+ "course-authoring.group-configurations.content-groups.new-group.header": "Content group name *",
+ "course-authoring.group-configurations.content-groups.new-group.input.placeholder": "This is the name of the group",
+ "course-authoring.group-configurations.content-groups.new-group.invalid-message": "All groups must have a unique name.",
+ "course-authoring.group-configurations.content-groups.new-group.cancel": "Cancel",
+ "course-authoring.group-configurations.content-groups.edit-group.delete": "Delete",
+ "course-authoring.group-configurations.content-groups.new-group.create": "Create",
+ "course-authoring.group-configurations.content-groups.edit-group.save": "Save",
+ "course-authoring.group-configurations.content-groups.new-group.required-error": "Group name is required",
+ "course-authoring.group-configurations.content-groups.edit-group.alert-group-in-usage": "This content group is used in one or more units."
}
diff --git a/src/i18n/messages/uk.json b/src/i18n/messages/uk.json
index 698b93c41b..1c0520c0c3 100644
--- a/src/i18n/messages/uk.json
+++ b/src/i18n/messages/uk.json
@@ -1194,5 +1194,16 @@
"course-authoring.course-unit.paste-notification.has-errors.description": "The following required files could not be added to the course:",
"course-authoring.course-unit.paste-notification.has-new-files.title": "New file(s) added to Files & Uploads.",
"course-authoring.course-unit.paste-notification.has-new-files.description": "The following required files were imported to this course:",
- "course-authoring.course-unit.paste-notification.has-new-files.button.text": "View files"
+ "course-authoring.course-unit.paste-notification.has-new-files.button.text": "View files",
+ "course-authoring.group-configurations.container.delete-modal.subtitle": "content group",
+ "course-authoring.group-configurations.container.delete-restriction": "Cannot delete when in use by a unit",
+ "course-authoring.group-configurations.content-groups.new-group.header": "Content group name *",
+ "course-authoring.group-configurations.content-groups.new-group.input.placeholder": "This is the name of the group",
+ "course-authoring.group-configurations.content-groups.new-group.invalid-message": "All groups must have a unique name.",
+ "course-authoring.group-configurations.content-groups.new-group.cancel": "Cancel",
+ "course-authoring.group-configurations.content-groups.edit-group.delete": "Delete",
+ "course-authoring.group-configurations.content-groups.new-group.create": "Create",
+ "course-authoring.group-configurations.content-groups.edit-group.save": "Save",
+ "course-authoring.group-configurations.content-groups.new-group.required-error": "Group name is required",
+ "course-authoring.group-configurations.content-groups.edit-group.alert-group-in-usage": "This content group is used in one or more units."
}
diff --git a/src/i18n/messages/zh_CN.json b/src/i18n/messages/zh_CN.json
index 698b93c41b..1c0520c0c3 100644
--- a/src/i18n/messages/zh_CN.json
+++ b/src/i18n/messages/zh_CN.json
@@ -1194,5 +1194,16 @@
"course-authoring.course-unit.paste-notification.has-errors.description": "The following required files could not be added to the course:",
"course-authoring.course-unit.paste-notification.has-new-files.title": "New file(s) added to Files & Uploads.",
"course-authoring.course-unit.paste-notification.has-new-files.description": "The following required files were imported to this course:",
- "course-authoring.course-unit.paste-notification.has-new-files.button.text": "View files"
+ "course-authoring.course-unit.paste-notification.has-new-files.button.text": "View files",
+ "course-authoring.group-configurations.container.delete-modal.subtitle": "content group",
+ "course-authoring.group-configurations.container.delete-restriction": "Cannot delete when in use by a unit",
+ "course-authoring.group-configurations.content-groups.new-group.header": "Content group name *",
+ "course-authoring.group-configurations.content-groups.new-group.input.placeholder": "This is the name of the group",
+ "course-authoring.group-configurations.content-groups.new-group.invalid-message": "All groups must have a unique name.",
+ "course-authoring.group-configurations.content-groups.new-group.cancel": "Cancel",
+ "course-authoring.group-configurations.content-groups.edit-group.delete": "Delete",
+ "course-authoring.group-configurations.content-groups.new-group.create": "Create",
+ "course-authoring.group-configurations.content-groups.edit-group.save": "Save",
+ "course-authoring.group-configurations.content-groups.new-group.required-error": "Group name is required",
+ "course-authoring.group-configurations.content-groups.edit-group.alert-group-in-usage": "This content group is used in one or more units."
}