feat: [AXIMST-24] Course unit - Sidebar buttons functional (#134)
* feat: [AXIMST-24] sidebar buttons functional * refactor: removed modal extra className * refactor: refactoring after review
This commit is contained in:
committed by
Adolfo R. Brandes
parent
073e191273
commit
e4d88fb1fa
@@ -26,6 +26,10 @@ export const NOTIFICATION_MESSAGES = {
|
||||
deleting: 'Deleting',
|
||||
copying: 'Copying',
|
||||
pasting: 'Pasting',
|
||||
discardChanges: 'Discarding changes',
|
||||
publishing: 'Publishing',
|
||||
hidingFromStudents: 'Hiding from students',
|
||||
makingVisibleToStudents: 'Making visible to students',
|
||||
empty: '',
|
||||
};
|
||||
|
||||
|
||||
@@ -113,8 +113,8 @@ const CourseUnit = ({ courseId }) => {
|
||||
</Layout.Element>
|
||||
<Layout.Element>
|
||||
<Stack gap={3}>
|
||||
<Sidebar />
|
||||
<Sidebar isDisplayUnitLocation />
|
||||
<Sidebar blockId={blockId} data-testid="course-unit-sidebar" />
|
||||
<Sidebar isDisplayUnitLocation data-testid="course-unit-location-sidebar" />
|
||||
</Stack>
|
||||
</Layout.Element>
|
||||
</Layout>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import MockAdapter from 'axios-mock-adapter';
|
||||
import {
|
||||
act, render, waitFor, fireEvent,
|
||||
act, render, waitFor, fireEvent, within,
|
||||
} from '@testing-library/react';
|
||||
import userEvent from '@testing-library/user-event';
|
||||
import { IntlProvider } from '@edx/frontend-platform/i18n';
|
||||
@@ -17,6 +17,7 @@ import {
|
||||
postXBlockBaseApiUrl,
|
||||
} from './data/api';
|
||||
import {
|
||||
editCourseUnitVisibilityAndData,
|
||||
fetchCourseSectionVerticalData,
|
||||
fetchCourseUnitQuery,
|
||||
fetchCourseVerticalChildrenData,
|
||||
@@ -40,6 +41,7 @@ import { extractCourseUnitId } from './sidebar/utils';
|
||||
import deleteModalMessages from '../generic/delete-modal/messages';
|
||||
import courseXBlockMessages from './course-xblock/messages';
|
||||
import addComponentMessages from './add-component/messages';
|
||||
import { PUBLISH_TYPES, UNIT_VISIBILITY_STATES } from './constants';
|
||||
|
||||
let axiosMock;
|
||||
let store;
|
||||
@@ -47,6 +49,7 @@ const courseId = '123';
|
||||
const blockId = '567890';
|
||||
const unitDisplayName = courseUnitIndexMock.metadata.display_name;
|
||||
const mockedUsedNavigate = jest.fn();
|
||||
const userName = 'edx';
|
||||
|
||||
jest.mock('react-router-dom', () => ({
|
||||
...jest.requireActual('react-router-dom'),
|
||||
@@ -418,4 +421,170 @@ describe('<CourseUnit />', () => {
|
||||
expect(getByText('New Cloned XBlock')).toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
|
||||
it('should toggle visibility and update course unit state accordingly', async () => {
|
||||
const { getByRole, getByTestId } = render(<RootWrapper />);
|
||||
let courseUnitSidebar;
|
||||
let draftUnpublishedChangesHeading;
|
||||
let visibilityCheckbox;
|
||||
|
||||
await waitFor(() => {
|
||||
courseUnitSidebar = getByTestId('course-unit-sidebar');
|
||||
|
||||
draftUnpublishedChangesHeading = within(courseUnitSidebar)
|
||||
.getByText(sidebarMessages.sidebarTitleDraftUnpublishedChanges.defaultMessage);
|
||||
expect(draftUnpublishedChangesHeading).toBeInTheDocument();
|
||||
|
||||
visibilityCheckbox = within(courseUnitSidebar)
|
||||
.getByLabelText(sidebarMessages.visibilityCheckboxTitle.defaultMessage);
|
||||
expect(visibilityCheckbox).not.toBeChecked();
|
||||
|
||||
userEvent.click(visibilityCheckbox);
|
||||
});
|
||||
|
||||
axiosMock
|
||||
.onPost(getXBlockBaseApiUrl(blockId), {
|
||||
publish: PUBLISH_TYPES.republish,
|
||||
metadata: { visible_to_staff_only: true },
|
||||
})
|
||||
.reply(200, { dummy: 'value' });
|
||||
axiosMock
|
||||
.onGet(getCourseUnitApiUrl(blockId))
|
||||
.reply(200, {
|
||||
...courseUnitIndexMock,
|
||||
visibility_state: UNIT_VISIBILITY_STATES.staffOnly,
|
||||
has_explicit_staff_lock: true,
|
||||
});
|
||||
|
||||
await executeThunk(editCourseUnitVisibilityAndData(blockId, PUBLISH_TYPES.republish, true), store.dispatch);
|
||||
|
||||
expect(visibilityCheckbox).toBeChecked();
|
||||
expect(within(courseUnitSidebar)
|
||||
.getByText(sidebarMessages.sidebarTitleVisibleToStaffOnly.defaultMessage)).toBeInTheDocument();
|
||||
expect(within(courseUnitSidebar)
|
||||
.getByText(sidebarMessages.visibilityStaffOnlyTitle.defaultMessage)).toBeInTheDocument();
|
||||
|
||||
userEvent.click(visibilityCheckbox);
|
||||
|
||||
const modalNotification = getByRole('dialog');
|
||||
const makeVisibilityBtn = within(modalNotification).getByRole('button', { name: sidebarMessages.modalMakeVisibilityActionButtonText.defaultMessage });
|
||||
const cancelBtn = within(modalNotification).getByRole('button', { name: sidebarMessages.modalMakeVisibilityCancelButtonText.defaultMessage });
|
||||
const headingElement = within(modalNotification).getByRole('heading', { name: sidebarMessages.modalMakeVisibilityTitle.defaultMessage, class: 'pgn__modal-title' });
|
||||
|
||||
expect(makeVisibilityBtn).toBeInTheDocument();
|
||||
expect(cancelBtn).toBeInTheDocument();
|
||||
expect(headingElement).toBeInTheDocument();
|
||||
expect(within(modalNotification)
|
||||
.getByText(sidebarMessages.modalMakeVisibilityDescription.defaultMessage)).toBeInTheDocument();
|
||||
|
||||
userEvent.click(makeVisibilityBtn);
|
||||
|
||||
axiosMock
|
||||
.onPost(getXBlockBaseApiUrl(blockId), {
|
||||
publish: PUBLISH_TYPES.republish,
|
||||
metadata: { visible_to_staff_only: null },
|
||||
})
|
||||
.reply(200, { dummy: 'value' });
|
||||
axiosMock
|
||||
.onGet(getCourseUnitApiUrl(blockId))
|
||||
.reply(200, courseUnitIndexMock);
|
||||
|
||||
await executeThunk(editCourseUnitVisibilityAndData(blockId, PUBLISH_TYPES.republish, null), store.dispatch);
|
||||
|
||||
expect(within(courseUnitSidebar)
|
||||
.getByText(sidebarMessages.visibilityStaffAndLearnersTitle.defaultMessage)).toBeInTheDocument();
|
||||
expect(visibilityCheckbox).not.toBeChecked();
|
||||
expect(draftUnpublishedChangesHeading).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('should publish course unit after click on the "Publish" button', async () => {
|
||||
const { getByTestId } = render(<RootWrapper />);
|
||||
let courseUnitSidebar;
|
||||
let publishBtn;
|
||||
|
||||
await waitFor(() => {
|
||||
courseUnitSidebar = getByTestId('course-unit-sidebar');
|
||||
publishBtn = within(courseUnitSidebar).queryByRole('button', { name: sidebarMessages.actionButtonPublishTitle.defaultMessage });
|
||||
expect(publishBtn).toBeInTheDocument();
|
||||
|
||||
userEvent.click(publishBtn);
|
||||
});
|
||||
|
||||
axiosMock
|
||||
.onPost(getXBlockBaseApiUrl(blockId), {
|
||||
publish: PUBLISH_TYPES.makePublic,
|
||||
})
|
||||
.reply(200, { dummy: 'value' });
|
||||
axiosMock
|
||||
.onGet(getCourseUnitApiUrl(blockId))
|
||||
.reply(200, {
|
||||
...courseUnitIndexMock,
|
||||
visibility_state: UNIT_VISIBILITY_STATES.live,
|
||||
has_changes: false,
|
||||
published_by: userName,
|
||||
});
|
||||
|
||||
await executeThunk(editCourseUnitVisibilityAndData(blockId, PUBLISH_TYPES.makePublic, true), store.dispatch);
|
||||
|
||||
expect(within(courseUnitSidebar)
|
||||
.getByText(sidebarMessages.sidebarTitlePublishedAndLive.defaultMessage)).toBeInTheDocument();
|
||||
expect(within(courseUnitSidebar).getByText(
|
||||
sidebarMessages.publishLastPublished.defaultMessage
|
||||
.replace('{publishedOn}', courseUnitIndexMock.published_on)
|
||||
.replace('{publishedBy}', userName),
|
||||
)).toBeInTheDocument();
|
||||
expect(publishBtn).not.toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('should discard changes after click on the "Discard changes" button', async () => {
|
||||
const { getByTestId, getByRole } = render(<RootWrapper />);
|
||||
let courseUnitSidebar;
|
||||
let discardChangesBtn;
|
||||
|
||||
await waitFor(() => {
|
||||
courseUnitSidebar = getByTestId('course-unit-sidebar');
|
||||
|
||||
const draftUnpublishedChangesHeading = within(courseUnitSidebar)
|
||||
.getByText(sidebarMessages.sidebarTitleDraftUnpublishedChanges.defaultMessage);
|
||||
expect(draftUnpublishedChangesHeading).toBeInTheDocument();
|
||||
discardChangesBtn = within(courseUnitSidebar).queryByRole('button', { name: sidebarMessages.actionButtonDiscardChangesTitle.defaultMessage });
|
||||
expect(discardChangesBtn).toBeInTheDocument();
|
||||
|
||||
userEvent.click(discardChangesBtn);
|
||||
|
||||
const modalNotification = getByRole('dialog');
|
||||
expect(modalNotification).toBeInTheDocument();
|
||||
expect(within(modalNotification)
|
||||
.getByText(sidebarMessages.modalDiscardUnitChangesDescription.defaultMessage)).toBeInTheDocument();
|
||||
expect(within(modalNotification)
|
||||
.getByText(sidebarMessages.modalDiscardUnitChangesCancelButtonText.defaultMessage)).toBeInTheDocument();
|
||||
const headingElement = within(modalNotification).getByRole('heading', { name: sidebarMessages.modalDiscardUnitChangesTitle.defaultMessage, class: 'pgn__modal-title' });
|
||||
expect(headingElement).toBeInTheDocument();
|
||||
const actionBtn = within(modalNotification).getByRole('button', { name: sidebarMessages.modalDiscardUnitChangesActionButtonText.defaultMessage });
|
||||
expect(actionBtn).toBeInTheDocument();
|
||||
|
||||
userEvent.click(actionBtn);
|
||||
});
|
||||
|
||||
axiosMock
|
||||
.onPost(getXBlockBaseApiUrl(blockId), {
|
||||
publish: PUBLISH_TYPES.discardChanges,
|
||||
})
|
||||
.reply(200, { dummy: 'value' });
|
||||
axiosMock
|
||||
.onGet(getCourseUnitApiUrl(blockId))
|
||||
.reply(200, {
|
||||
...courseUnitIndexMock, published: true, has_changes: false,
|
||||
});
|
||||
|
||||
await executeThunk(editCourseUnitVisibilityAndData(
|
||||
blockId,
|
||||
PUBLISH_TYPES.discardChanges,
|
||||
true,
|
||||
), store.dispatch);
|
||||
|
||||
expect(within(courseUnitSidebar)
|
||||
.getByText(sidebarMessages.sidebarTitlePublishedNotYetReleased.defaultMessage)).toBeInTheDocument();
|
||||
expect(discardChangesBtn).not.toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -62,3 +62,9 @@ export const COLORS = {
|
||||
BLACK: '#000',
|
||||
GREEN: '#0D7D4D',
|
||||
};
|
||||
|
||||
export const PUBLISH_TYPES = {
|
||||
republish: 'republish',
|
||||
discardChanges: 'discard_changes',
|
||||
makePublic: 'make_public',
|
||||
};
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
import { camelCaseObject, getConfig } from '@edx/frontend-platform';
|
||||
import { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';
|
||||
|
||||
import { PUBLISH_TYPES } from '../constants';
|
||||
import {
|
||||
normalizeLearningSequencesData,
|
||||
normalizeMetadata,
|
||||
@@ -130,6 +131,30 @@ export async function createCourseXblock({
|
||||
return data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles the visibility and data of a course unit, such as publishing, resetting to default values,
|
||||
* and toggling visibility to students.
|
||||
* @param {string} unitId - The ID of the course unit.
|
||||
* @param {string} type - The action type (e.g., PUBLISH_TYPES.discardChanges).
|
||||
* @param {boolean} isVisible - The visibility status for students.
|
||||
* @returns {Promise<any>} A promise that resolves with the response data.
|
||||
*/
|
||||
export async function handleCourseUnitVisibilityAndData(unitId, type, isVisible) {
|
||||
const body = {
|
||||
publish: type,
|
||||
...(type === PUBLISH_TYPES.republish ? {
|
||||
metadata: {
|
||||
visible_to_staff_only: isVisible,
|
||||
},
|
||||
} : {}),
|
||||
};
|
||||
|
||||
const { data } = await getAuthenticatedHttpClient()
|
||||
.post(getXBlockBaseApiUrl(unitId), body);
|
||||
|
||||
return camelCaseObject(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an object containing course section vertical children data.
|
||||
* @param {string} itemId
|
||||
|
||||
@@ -18,6 +18,7 @@ import {
|
||||
getCourseSectionVerticalData,
|
||||
createCourseXblock,
|
||||
getCourseVerticalChildren,
|
||||
handleCourseUnitVisibilityAndData,
|
||||
deleteUnitItem,
|
||||
duplicateUnitItem,
|
||||
} from './api';
|
||||
@@ -37,9 +38,11 @@ import {
|
||||
updateLoadingCourseXblockStatus,
|
||||
updateCourseVerticalChildren,
|
||||
updateCourseVerticalChildrenLoadingStatus,
|
||||
updateQueryPendingStatus,
|
||||
deleteXBlock,
|
||||
duplicateXBlock,
|
||||
} from './slice';
|
||||
import { getNotificationMessage } from './utils';
|
||||
|
||||
export function fetchCourseUnitQuery(courseId) {
|
||||
return async (dispatch) => {
|
||||
@@ -117,6 +120,31 @@ export function editCourseItemQuery(itemId, displayName, sequenceId) {
|
||||
};
|
||||
}
|
||||
|
||||
export function editCourseUnitVisibilityAndData(itemId, type, isVisible) {
|
||||
return async (dispatch) => {
|
||||
dispatch(updateSavingStatus({ status: RequestStatus.PENDING }));
|
||||
dispatch(updateQueryPendingStatus(true));
|
||||
const notificationMessage = getNotificationMessage(type, isVisible);
|
||||
dispatch(showProcessingNotification(notificationMessage));
|
||||
|
||||
try {
|
||||
await handleCourseUnitVisibilityAndData(itemId, type, isVisible).then(async (result) => {
|
||||
if (result) {
|
||||
const courseUnit = await getCourseUnitData(itemId);
|
||||
dispatch(fetchCourseItemSuccess(courseUnit));
|
||||
const courseVerticalChildrenData = await getCourseVerticalChildren(itemId);
|
||||
dispatch(updateCourseVerticalChildren(courseVerticalChildrenData));
|
||||
dispatch(hideProcessingNotification());
|
||||
dispatch(updateSavingStatus({ status: RequestStatus.SUCCESSFUL }));
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
dispatch(hideProcessingNotification());
|
||||
dispatch(updateSavingStatus({ status: RequestStatus.FAILED }));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
export function fetchCourse(courseId) {
|
||||
return async (dispatch) => {
|
||||
dispatch(fetchCourseRequest({ courseId }));
|
||||
@@ -221,6 +249,8 @@ export function createNewCourseXBlock(body, callback, blockId) {
|
||||
callback(result);
|
||||
}
|
||||
}
|
||||
const courseUnit = await getCourseUnitData(blockId);
|
||||
dispatch(fetchCourseItemSuccess(courseUnit));
|
||||
});
|
||||
} catch (error) {
|
||||
dispatch(hideProcessingNotification());
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
import { camelCaseObject } from '@edx/frontend-platform';
|
||||
|
||||
import { NOTIFICATION_MESSAGES } from '../../constants';
|
||||
import { PUBLISH_TYPES } from '../constants';
|
||||
|
||||
export function getTimeOffsetMillis(headerDate, requestTime, responseTime) {
|
||||
// Time offset computation should move down into the HttpClient wrapper to maintain a global time correction reference
|
||||
// Requires 'Access-Control-Expose-Headers: Date' on the server response per https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#access-control-expose-headers
|
||||
@@ -211,3 +214,25 @@ export function normalizeCourseSectionVerticalData(metadata) {
|
||||
})),
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the notification message based on the publishing type and visibility.
|
||||
* @param {string} type - The publishing type.
|
||||
* @param {boolean} isVisible - The visibility status.
|
||||
* @returns {string} The corresponding notification message.
|
||||
*/
|
||||
export const getNotificationMessage = (type, isVisible) => {
|
||||
let notificationMessage;
|
||||
|
||||
if (type === PUBLISH_TYPES.discardChanges) {
|
||||
notificationMessage = NOTIFICATION_MESSAGES.discardChanges;
|
||||
} else if (type === PUBLISH_TYPES.makePublic) {
|
||||
notificationMessage = NOTIFICATION_MESSAGES.publishing;
|
||||
} else if (type === PUBLISH_TYPES.republish && !isVisible) {
|
||||
notificationMessage = NOTIFICATION_MESSAGES.makingVisibleToStudents;
|
||||
} else if (type === PUBLISH_TYPES.republish && isVisible) {
|
||||
notificationMessage = NOTIFICATION_MESSAGES.hidingFromStudents;
|
||||
}
|
||||
|
||||
return notificationMessage;
|
||||
};
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
.course-unit-sidebar-location-description {
|
||||
font-size: $font-size-xs;
|
||||
line-height: $line-height-base;
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
.course-unit-sidebar-visibility-copy {
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import PropTypes from 'prop-types';
|
||||
import { useSelector } from 'react-redux';
|
||||
import { Button } from '@openedx/paragon';
|
||||
import { useIntl } from '@edx/frontend-platform/i18n';
|
||||
@@ -5,7 +6,7 @@ import { useIntl } from '@edx/frontend-platform/i18n';
|
||||
import { getCourseUnitData } from '../../../data/selectors';
|
||||
import messages from '../../messages';
|
||||
|
||||
const ActionButtons = () => {
|
||||
const ActionButtons = ({ openDiscardModal, handlePublishing }) => {
|
||||
const intl = useIntl();
|
||||
const {
|
||||
published,
|
||||
@@ -16,29 +17,17 @@ const ActionButtons = () => {
|
||||
return (
|
||||
<>
|
||||
{(!published || hasChanges) && (
|
||||
<Button
|
||||
className="mt-3.5"
|
||||
variant="outline-primary"
|
||||
size="sm"
|
||||
>
|
||||
<Button size="sm" className="mt-3.5" variant="outline-primary" onClick={handlePublishing}>
|
||||
{intl.formatMessage(messages.actionButtonPublishTitle)}
|
||||
</Button>
|
||||
)}
|
||||
{(published && hasChanges) && (
|
||||
<Button
|
||||
className="mt-2"
|
||||
variant="link"
|
||||
size="sm"
|
||||
>
|
||||
<Button size="sm" variant="link" onClick={openDiscardModal} className="mt-2">
|
||||
{intl.formatMessage(messages.actionButtonDiscardChangesTitle)}
|
||||
</Button>
|
||||
)}
|
||||
{enableCopyPasteUnits && (
|
||||
<Button
|
||||
className="mt-2"
|
||||
variant="outline-primary"
|
||||
size="sm"
|
||||
>
|
||||
<Button size="sm" className="mt-2" variant="outline-primary">
|
||||
{intl.formatMessage(messages.actionButtonCopyUnitTitle)}
|
||||
</Button>
|
||||
)}
|
||||
@@ -46,4 +35,9 @@ const ActionButtons = () => {
|
||||
);
|
||||
};
|
||||
|
||||
ActionButtons.propTypes = {
|
||||
openDiscardModal: PropTypes.func.isRequired,
|
||||
handlePublishing: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
export default ActionButtons;
|
||||
|
||||
@@ -1,23 +1,32 @@
|
||||
import { useSelector } from 'react-redux';
|
||||
import PropTypes from 'prop-types';
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
import { Form } from '@openedx/paragon';
|
||||
import { useIntl } from '@edx/frontend-platform/i18n';
|
||||
import { useParams } from 'react-router-dom';
|
||||
|
||||
import { getCourseUnitData } from '../../../data/selectors';
|
||||
import { editCourseUnitVisibilityAndData } from '../../../data/thunk';
|
||||
import { PUBLISH_TYPES } from '../../../constants';
|
||||
import { getVisibilityTitle } from '../../utils';
|
||||
import messages from '../../messages';
|
||||
|
||||
const UnitVisibilityInfo = () => {
|
||||
const UnitVisibilityInfo = ({ openVisibleModal, visibleToStaffOnly }) => {
|
||||
const intl = useIntl();
|
||||
const { blockId } = useParams();
|
||||
const dispatch = useDispatch();
|
||||
const {
|
||||
published,
|
||||
hasChanges,
|
||||
staffLockFrom,
|
||||
releaseDateFrom,
|
||||
releasedToStudents,
|
||||
visibleToStaffOnly,
|
||||
hasExplicitStaffLock,
|
||||
} = useSelector(getCourseUnitData);
|
||||
|
||||
const handleCourseUnitVisibility = () => {
|
||||
dispatch(editCourseUnitVisibilityAndData(blockId, PUBLISH_TYPES.republish, true));
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<small className="course-unit-sidebar-visibility-title">
|
||||
@@ -44,7 +53,8 @@ const UnitVisibilityInfo = () => {
|
||||
<Form.Checkbox
|
||||
className="course-unit-sidebar-visibility-checkbox"
|
||||
checked={hasExplicitStaffLock}
|
||||
onChange={() => {}}
|
||||
onChange={hasExplicitStaffLock ? null : handleCourseUnitVisibility}
|
||||
onClick={hasExplicitStaffLock ? openVisibleModal : null}
|
||||
>
|
||||
{intl.formatMessage(messages.visibilityCheckboxTitle)}
|
||||
</Form.Checkbox>
|
||||
@@ -52,4 +62,9 @@ const UnitVisibilityInfo = () => {
|
||||
);
|
||||
};
|
||||
|
||||
UnitVisibilityInfo.propTypes = {
|
||||
openVisibleModal: PropTypes.func.isRequired,
|
||||
visibleToStaffOnly: PropTypes.bool.isRequired,
|
||||
};
|
||||
|
||||
export default UnitVisibilityInfo;
|
||||
|
||||
@@ -6,7 +6,14 @@ import messages from '../../messages';
|
||||
import UnitVisibilityInfo from './UnitVisibilityInfo';
|
||||
import ActionButtons from './ActionButtons';
|
||||
|
||||
const SidebarFooter = ({ isDisplayUnitLocation, locationId }) => {
|
||||
const SidebarFooter = ({
|
||||
locationId,
|
||||
openVisibleModal,
|
||||
handlePublishing,
|
||||
openDiscardModal,
|
||||
visibleToStaffOnly,
|
||||
isDisplayUnitLocation,
|
||||
}) => {
|
||||
const intl = useIntl();
|
||||
|
||||
return (
|
||||
@@ -18,8 +25,14 @@ const SidebarFooter = ({ isDisplayUnitLocation, locationId }) => {
|
||||
</small>
|
||||
) : (
|
||||
<>
|
||||
<UnitVisibilityInfo />
|
||||
<ActionButtons />
|
||||
<UnitVisibilityInfo
|
||||
openVisibleModal={openVisibleModal}
|
||||
visibleToStaffOnly={visibleToStaffOnly}
|
||||
/>
|
||||
<ActionButtons
|
||||
openDiscardModal={openDiscardModal}
|
||||
handlePublishing={handlePublishing}
|
||||
/>
|
||||
</>
|
||||
)}
|
||||
</Stack>
|
||||
@@ -28,8 +41,12 @@ const SidebarFooter = ({ isDisplayUnitLocation, locationId }) => {
|
||||
};
|
||||
|
||||
SidebarFooter.propTypes = {
|
||||
isDisplayUnitLocation: PropTypes.bool,
|
||||
locationId: PropTypes.string,
|
||||
isDisplayUnitLocation: PropTypes.bool,
|
||||
openDiscardModal: PropTypes.func.isRequired,
|
||||
openVisibleModal: PropTypes.func.isRequired,
|
||||
handlePublishing: PropTypes.func.isRequired,
|
||||
visibleToStaffOnly: PropTypes.bool.isRequired,
|
||||
};
|
||||
|
||||
SidebarFooter.defaultProps = {
|
||||
|
||||
@@ -1,13 +1,19 @@
|
||||
import PropTypes from 'prop-types';
|
||||
import { useSelector } from 'react-redux';
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
import classNames from 'classnames';
|
||||
import { Card } from '@openedx/paragon';
|
||||
import { Card, useToggle } from '@openedx/paragon';
|
||||
import { InfoOutline as InfoOutlineIcon } from '@openedx/paragon/icons';
|
||||
import { useIntl } from '@edx/frontend-platform/i18n';
|
||||
|
||||
import ModalNotification from '../../generic/modal-notification';
|
||||
import { editCourseUnitVisibilityAndData } from '../data/thunk';
|
||||
import { getCourseUnitData } from '../data/selectors';
|
||||
import { PUBLISH_TYPES } from '../constants';
|
||||
import { SidebarBody, SidebarFooter, SidebarHeader } from './components';
|
||||
import useCourseUnitData from './hooks';
|
||||
import messages from './messages';
|
||||
|
||||
const Sidebar = ({ isDisplayUnitLocation }) => {
|
||||
const Sidebar = ({ blockId, isDisplayUnitLocation, ...props }) => {
|
||||
const {
|
||||
title,
|
||||
locationId,
|
||||
@@ -15,13 +21,31 @@ const Sidebar = ({ isDisplayUnitLocation }) => {
|
||||
visibilityState,
|
||||
visibleToStaffOnly,
|
||||
} = useCourseUnitData(useSelector(getCourseUnitData));
|
||||
const intl = useIntl();
|
||||
const dispatch = useDispatch();
|
||||
const [isOpenDiscardModal, openDiscardModal, closeDiscardModal] = useToggle(false);
|
||||
const [isOpenVisibleModal, openVisibleModal, closeVisibleModal] = useToggle(false);
|
||||
|
||||
const handleCourseUnitVisibility = () => {
|
||||
closeVisibleModal();
|
||||
dispatch(editCourseUnitVisibilityAndData(blockId, PUBLISH_TYPES.republish, null));
|
||||
};
|
||||
|
||||
const handleCourseUnitDiscardChanges = () => {
|
||||
closeDiscardModal();
|
||||
dispatch(editCourseUnitVisibilityAndData(blockId, PUBLISH_TYPES.discardChanges));
|
||||
};
|
||||
|
||||
const handleCourseUnitPublish = () => {
|
||||
dispatch(editCourseUnitVisibilityAndData(blockId, PUBLISH_TYPES.makePublic));
|
||||
};
|
||||
|
||||
return (
|
||||
<Card
|
||||
className={classNames('course-unit-sidebar', {
|
||||
'is-stuff-only': visibleToStaffOnly,
|
||||
})}
|
||||
data-testid="course-unit-sidebar"
|
||||
{...props}
|
||||
>
|
||||
<SidebarHeader
|
||||
title={title}
|
||||
@@ -35,17 +59,43 @@ const Sidebar = ({ isDisplayUnitLocation }) => {
|
||||
/>
|
||||
<SidebarFooter
|
||||
locationId={locationId}
|
||||
openDiscardModal={openDiscardModal}
|
||||
openVisibleModal={openVisibleModal}
|
||||
isDisplayUnitLocation={isDisplayUnitLocation}
|
||||
handlePublishing={handleCourseUnitPublish}
|
||||
visibleToStaffOnly={visibleToStaffOnly}
|
||||
/>
|
||||
<ModalNotification
|
||||
title={intl.formatMessage(messages.modalDiscardUnitChangesTitle)}
|
||||
isOpen={isOpenDiscardModal}
|
||||
actionButtonText={intl.formatMessage(messages.modalDiscardUnitChangesActionButtonText)}
|
||||
cancelButtonText={intl.formatMessage(messages.modalDiscardUnitChangesCancelButtonText)}
|
||||
handleAction={handleCourseUnitDiscardChanges}
|
||||
handleCancel={closeDiscardModal}
|
||||
message={intl.formatMessage(messages.modalDiscardUnitChangesDescription)}
|
||||
icon={InfoOutlineIcon}
|
||||
/>
|
||||
<ModalNotification
|
||||
title={intl.formatMessage(messages.modalMakeVisibilityTitle)}
|
||||
isOpen={isOpenVisibleModal}
|
||||
actionButtonText={intl.formatMessage(messages.modalMakeVisibilityActionButtonText)}
|
||||
cancelButtonText={intl.formatMessage(messages.modalMakeVisibilityCancelButtonText)}
|
||||
handleAction={handleCourseUnitVisibility}
|
||||
handleCancel={closeVisibleModal}
|
||||
message={intl.formatMessage(messages.modalMakeVisibilityDescription)}
|
||||
icon={InfoOutlineIcon}
|
||||
/>
|
||||
</Card>
|
||||
);
|
||||
};
|
||||
|
||||
Sidebar.propTypes = {
|
||||
blockId: PropTypes.string,
|
||||
isDisplayUnitLocation: PropTypes.bool,
|
||||
};
|
||||
|
||||
Sidebar.defaultProps = {
|
||||
blockId: null,
|
||||
isDisplayUnitLocation: false,
|
||||
};
|
||||
|
||||
|
||||
@@ -105,6 +105,38 @@ const messages = defineMessages({
|
||||
id: 'course-authoring.course-unit.status.scheduled.title',
|
||||
defaultMessage: 'SCHEDULED',
|
||||
},
|
||||
modalDiscardUnitChangesTitle: {
|
||||
id: 'course-authoring.course-unit.modal.discard-unit-changes.title',
|
||||
defaultMessage: 'Discard changes',
|
||||
},
|
||||
modalDiscardUnitChangesActionButtonText: {
|
||||
id: 'course-authoring.course-unit.modal.discard-unit-changes.btn.action.text',
|
||||
defaultMessage: 'Discard changes',
|
||||
},
|
||||
modalDiscardUnitChangesCancelButtonText: {
|
||||
id: 'course-authoring.course-unit.modal.discard-unit-changes.btn.cancel.text',
|
||||
defaultMessage: 'Cancel',
|
||||
},
|
||||
modalDiscardUnitChangesDescription: {
|
||||
id: 'course-authoring.course-unit.modal.discard-unit-changes.description',
|
||||
defaultMessage: 'Are you sure you want to revert to the last published version of the unit? You cannot undo this action.',
|
||||
},
|
||||
modalMakeVisibilityTitle: {
|
||||
id: 'course-authoring.course-unit.modal.make-visibility.title',
|
||||
defaultMessage: 'Make visible to students',
|
||||
},
|
||||
modalMakeVisibilityActionButtonText: {
|
||||
id: 'course-authoring.course-unit.modal.make-visibility.btn.action.text',
|
||||
defaultMessage: 'Make visible to students',
|
||||
},
|
||||
modalMakeVisibilityCancelButtonText: {
|
||||
id: 'course-authoring.course-unit.modal.make-visibility.btn.cancel.text',
|
||||
defaultMessage: 'Cancel',
|
||||
},
|
||||
modalMakeVisibilityDescription: {
|
||||
id: 'course-authoring.course-unit.modal.make-visibility.description',
|
||||
defaultMessage: 'If the unit was previously published and released to students, any changes you made to the unit when it was hidden will now be visible to students. Do you want to proceed?',
|
||||
},
|
||||
});
|
||||
|
||||
export default messages;
|
||||
|
||||
@@ -3,8 +3,9 @@ import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
import { getConfig } from '@edx/frontend-platform';
|
||||
import PropTypes from 'prop-types';
|
||||
import { Error as ErrorIcon } from '@openedx/paragon/icons';
|
||||
|
||||
import ModalError from '../../generic/modal-error/ModalError';
|
||||
import ModalNotification from '../../generic/modal-notification';
|
||||
import { getError, getIsErrorModalOpen } from '../data/selectors';
|
||||
import { updateIsErrorModalOpen } from '../data/slice';
|
||||
import messages from './messages';
|
||||
@@ -20,7 +21,7 @@ const ExportModalError = ({
|
||||
const handleUnitRedirect = () => { window.location.assign(unitErrorUrl); };
|
||||
const handleRedirectCourseHome = () => { window.location.assign(`${getConfig().STUDIO_BASE_URL}/course/${courseId}`); };
|
||||
return (
|
||||
<ModalError
|
||||
<ModalNotification
|
||||
isOpen={isErrorModalOpen}
|
||||
title={intl.formatMessage(messages.errorTitle)}
|
||||
message={
|
||||
@@ -39,6 +40,8 @@ const ExportModalError = ({
|
||||
}
|
||||
handleCancel={() => dispatch(updateIsErrorModalOpen(false))}
|
||||
handleAction={unitErrorUrl ? handleUnitRedirect : handleRedirectCourseHome}
|
||||
variant="danger"
|
||||
icon={ErrorIcon}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -1,16 +1,15 @@
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { ActionRow, AlertModal, Button } from '@openedx/paragon';
|
||||
import { Error } from '@openedx/paragon/icons';
|
||||
|
||||
const ModalError = ({
|
||||
isOpen, title, message, handleCancel, handleAction, cancelButtonText, actionButtonText,
|
||||
const ModalNotification = ({
|
||||
isOpen, title, message, handleCancel, handleAction, cancelButtonText, actionButtonText, variant, icon,
|
||||
}) => (
|
||||
<AlertModal
|
||||
title={title}
|
||||
isOpen={isOpen}
|
||||
variant="danger"
|
||||
icon={Error}
|
||||
variant={variant}
|
||||
icon={icon}
|
||||
footerNode={(
|
||||
<ActionRow>
|
||||
<Button variant="tertiary" onClick={handleCancel}>{cancelButtonText}</Button>
|
||||
@@ -22,7 +21,7 @@ const ModalError = ({
|
||||
</AlertModal>
|
||||
);
|
||||
|
||||
ModalError.propTypes = {
|
||||
ModalNotification.propTypes = {
|
||||
isOpen: PropTypes.bool.isRequired,
|
||||
title: PropTypes.string.isRequired,
|
||||
message: PropTypes.string.isRequired,
|
||||
@@ -30,6 +29,13 @@ ModalError.propTypes = {
|
||||
handleAction: PropTypes.func.isRequired,
|
||||
cancelButtonText: PropTypes.string.isRequired,
|
||||
actionButtonText: PropTypes.string.isRequired,
|
||||
variant: PropTypes.string,
|
||||
icon: PropTypes.elementType,
|
||||
};
|
||||
|
||||
export default ModalError;
|
||||
ModalNotification.defaultProps = {
|
||||
variant: 'default',
|
||||
icon: undefined,
|
||||
};
|
||||
|
||||
export default ModalNotification;
|
||||
@@ -1045,5 +1045,36 @@
|
||||
"course-authoring.course-unit.xblock.button.move.label": "Move",
|
||||
"course-authoring.course-unit.xblock.button.manageAccess.label": "Manage access",
|
||||
"course-authoring.course-unit.xblock.button.delete.label": "Delete",
|
||||
"course-authoring.group-configurations.heading-title": "Group configurations",
|
||||
"course-authoring.group-configurations.heading-sub-title": "Settings",
|
||||
"course-authoring.group-configurations.container.empty-content-groups": "In the {outlineComponentLink}, use this group to control access to a component.",
|
||||
"course-authoring.group-configurations.container.empty-experiment-group": "This group configuration is not in use. Start by adding a content experiment to any Unit via the {outlineComponentLink}.",
|
||||
"course-authoring.group-configurations.container.course-outline": "Course outline",
|
||||
"course-authoring.group-configurations.container.action.edit": "Edit",
|
||||
"course-authoring.group-configurations.container.action.delete": "Delete",
|
||||
"course-authoring.group-configurations.container.access-to": "This group controls access to:",
|
||||
"course-authoring.group-configurations.container.experiment-access-to": "This group configuration is used in:",
|
||||
"course-authoring.group-configurations.container.contains-groups": "Contains {len} groups",
|
||||
"course-authoring.group-configurations.container.contains-group": "Contains 1 group",
|
||||
"course-authoring.group-configurations.container.not-in-use": "Not in use",
|
||||
"course-authoring.group-configurations.container.used-in-locations": "Used in {len} locations",
|
||||
"course-authoring.group-configurations.container.used-in-location": "Used in 1 location",
|
||||
"course-authoring.group-configurations.container.title-id": "ID: {id}",
|
||||
"course-authoring.group-configurations.experiment-group.title": "Experiment group configurations",
|
||||
"course-authoring.group-configurations.experiment-group.add-new-group": "New group configuration",
|
||||
"course-authoring.group-configurations.empty-placeholder.title": "You have not created any content groups yet.",
|
||||
"course-authoring.group-configurations.experimental-empty-placeholder.title": "You have not created any group configurations yet.",
|
||||
"course-authoring.group-configurations.empty-placeholder.button": "Add your first content group",
|
||||
"course-authoring.group-configurations.experimental-empty-placeholder.button": "Add your first group configuration",
|
||||
"course-authoring.group-configurations.content-groups.add-new-group": "New content group",
|
||||
"course-authoring.course-unit.general.alert.unpublished-version.description": "Note: The last published version of this unit is live. By publishing changes you will change the student experience.",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.title": "Discard changes",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.btn.action.text": "Discard changes",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.btn.cancel.text": "Cancel",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.description": "Are you sure you want to revert to the last published version of the unit? You cannot undo this action.",
|
||||
"course-authoring.course-unit.modal.make-visibility.title": "Make visible to students",
|
||||
"course-authoring.course-unit.modal.make-visibility.btn.action.text": "Make visible to students",
|
||||
"course-authoring.course-unit.modal.make-visibility.btn.cancel.text": "Cancel",
|
||||
"course-authoring.course-unit.modal.make-visibility.description": "If the unit was previously published and released to students, any changes you made to the unit when it was hidden will now be visible to students. Do you want to proceed?",
|
||||
"course-authoring.course-unit.xblock.button.actions.alt": "Actions"
|
||||
}
|
||||
|
||||
@@ -1020,5 +1020,36 @@
|
||||
"course-authoring.course-unit.xblock.button.move.label": "Move",
|
||||
"course-authoring.course-unit.xblock.button.manageAccess.label": "Manage access",
|
||||
"course-authoring.course-unit.xblock.button.delete.label": "Delete",
|
||||
"course-authoring.course-unit.xblock.button.actions.alt": "Actions"
|
||||
"course-authoring.course-unit.xblock.button.actions.alt": "Actions",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.title": "Discard changes",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.btn.action.text": "Discard changes",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.btn.cancel.text": "Cancel",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.description": "Are you sure you want to revert to the last published version of the unit? You cannot undo this action.",
|
||||
"course-authoring.course-unit.modal.make-visibility.title": "Make visible to students",
|
||||
"course-authoring.course-unit.modal.make-visibility.btn.action.text": "Make visible to students",
|
||||
"course-authoring.course-unit.modal.make-visibility.btn.cancel.text": "Cancel",
|
||||
"course-authoring.course-unit.modal.make-visibility.description": "If the unit was previously published and released to students, any changes you made to the unit when it was hidden will now be visible to students. Do you want to proceed?",
|
||||
"course-authoring.group-configurations.heading-title": "Group configurations",
|
||||
"course-authoring.group-configurations.heading-sub-title": "Settings",
|
||||
"course-authoring.group-configurations.container.empty-content-groups": "In the {outlineComponentLink}, use this group to control access to a component.",
|
||||
"course-authoring.group-configurations.container.empty-experiment-group": "This group configuration is not in use. Start by adding a content experiment to any Unit via the {outlineComponentLink}.",
|
||||
"course-authoring.group-configurations.container.course-outline": "Course outline",
|
||||
"course-authoring.group-configurations.container.action.edit": "Edit",
|
||||
"course-authoring.group-configurations.container.action.delete": "Delete",
|
||||
"course-authoring.group-configurations.container.access-to": "This group controls access to:",
|
||||
"course-authoring.group-configurations.container.experiment-access-to": "This group configuration is used in:",
|
||||
"course-authoring.group-configurations.container.contains-groups": "Contains {len} groups",
|
||||
"course-authoring.group-configurations.container.contains-group": "Contains 1 group",
|
||||
"course-authoring.group-configurations.container.not-in-use": "Not in use",
|
||||
"course-authoring.group-configurations.container.used-in-locations": "Used in {len} locations",
|
||||
"course-authoring.group-configurations.container.used-in-location": "Used in 1 location",
|
||||
"course-authoring.group-configurations.container.title-id": "ID: {id}",
|
||||
"course-authoring.group-configurations.experiment-group.title": "Experiment group configurations",
|
||||
"course-authoring.group-configurations.experiment-group.add-new-group": "New group configuration",
|
||||
"course-authoring.group-configurations.empty-placeholder.title": "You have not created any content groups yet.",
|
||||
"course-authoring.group-configurations.experimental-empty-placeholder.title": "You have not created any group configurations yet.",
|
||||
"course-authoring.group-configurations.empty-placeholder.button": "Add your first content group",
|
||||
"course-authoring.group-configurations.experimental-empty-placeholder.button": "Add your first group configuration",
|
||||
"course-authoring.group-configurations.content-groups.add-new-group": "New content group",
|
||||
"course-authoring.course-unit.general.alert.unpublished-version.description": "Note: The last published version of this unit is live. By publishing changes you will change the student experience."
|
||||
}
|
||||
|
||||
@@ -1046,5 +1046,36 @@
|
||||
"course-authoring.course-unit.xblock.button.move.label": "Move",
|
||||
"course-authoring.course-unit.xblock.button.manageAccess.label": "Manage access",
|
||||
"course-authoring.course-unit.xblock.button.delete.label": "Delete",
|
||||
"course-authoring.course-unit.xblock.button.actions.alt": "Actions"
|
||||
"course-authoring.course-unit.xblock.button.actions.alt": "Actions",
|
||||
"course-authoring.group-configurations.heading-title": "Group configurations",
|
||||
"course-authoring.group-configurations.heading-sub-title": "Settings",
|
||||
"course-authoring.group-configurations.container.empty-content-groups": "In the {outlineComponentLink}, use this group to control access to a component.",
|
||||
"course-authoring.group-configurations.container.empty-experiment-group": "This group configuration is not in use. Start by adding a content experiment to any Unit via the {outlineComponentLink}.",
|
||||
"course-authoring.group-configurations.container.course-outline": "Course outline",
|
||||
"course-authoring.group-configurations.container.action.edit": "Edit",
|
||||
"course-authoring.group-configurations.container.action.delete": "Delete",
|
||||
"course-authoring.group-configurations.container.access-to": "This group controls access to:",
|
||||
"course-authoring.group-configurations.container.experiment-access-to": "This group configuration is used in:",
|
||||
"course-authoring.group-configurations.container.contains-groups": "Contains {len} groups",
|
||||
"course-authoring.group-configurations.container.contains-group": "Contains 1 group",
|
||||
"course-authoring.group-configurations.container.not-in-use": "Not in use",
|
||||
"course-authoring.group-configurations.container.used-in-locations": "Used in {len} locations",
|
||||
"course-authoring.group-configurations.container.used-in-location": "Used in 1 location",
|
||||
"course-authoring.group-configurations.container.title-id": "ID: {id}",
|
||||
"course-authoring.group-configurations.experiment-group.title": "Experiment group configurations",
|
||||
"course-authoring.group-configurations.experiment-group.add-new-group": "New group configuration",
|
||||
"course-authoring.group-configurations.empty-placeholder.title": "You have not created any content groups yet.",
|
||||
"course-authoring.group-configurations.experimental-empty-placeholder.title": "You have not created any group configurations yet.",
|
||||
"course-authoring.group-configurations.empty-placeholder.button": "Add your first content group",
|
||||
"course-authoring.group-configurations.experimental-empty-placeholder.button": "Add your first group configuration",
|
||||
"course-authoring.group-configurations.content-groups.add-new-group": "New content group",
|
||||
"course-authoring.course-unit.general.alert.unpublished-version.description": "Note: The last published version of this unit is live. By publishing changes you will change the student experience.",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.title": "Discard changes",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.btn.action.text": "Discard changes",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.btn.cancel.text": "Cancel",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.description": "Are you sure you want to revert to the last published version of the unit? You cannot undo this action.",
|
||||
"course-authoring.course-unit.modal.make-visibility.title": "Make visible to students",
|
||||
"course-authoring.course-unit.modal.make-visibility.btn.action.text": "Make visible to students",
|
||||
"course-authoring.course-unit.modal.make-visibility.btn.cancel.text": "Cancel",
|
||||
"course-authoring.course-unit.modal.make-visibility.description": "If the unit was previously published and released to students, any changes you made to the unit when it was hidden will now be visible to students. Do you want to proceed?"
|
||||
}
|
||||
|
||||
@@ -1020,5 +1020,36 @@
|
||||
"course-authoring.course-unit.xblock.button.move.label": "Move",
|
||||
"course-authoring.course-unit.xblock.button.manageAccess.label": "Manage access",
|
||||
"course-authoring.course-unit.xblock.button.delete.label": "Delete",
|
||||
"course-authoring.course-unit.xblock.button.actions.alt": "Actions"
|
||||
"course-authoring.course-unit.xblock.button.actions.alt": "Actions",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.title": "Discard changes",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.btn.action.text": "Discard changes",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.btn.cancel.text": "Cancel",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.description": "Are you sure you want to revert to the last published version of the unit? You cannot undo this action.",
|
||||
"course-authoring.course-unit.modal.make-visibility.title": "Make visible to students",
|
||||
"course-authoring.course-unit.modal.make-visibility.btn.action.text": "Make visible to students",
|
||||
"course-authoring.course-unit.modal.make-visibility.btn.cancel.text": "Cancel",
|
||||
"course-authoring.course-unit.modal.make-visibility.description": "If the unit was previously published and released to students, any changes you made to the unit when it was hidden will now be visible to students. Do you want to proceed?",
|
||||
"course-authoring.group-configurations.heading-title": "Group configurations",
|
||||
"course-authoring.group-configurations.heading-sub-title": "Settings",
|
||||
"course-authoring.group-configurations.container.empty-content-groups": "In the {outlineComponentLink}, use this group to control access to a component.",
|
||||
"course-authoring.group-configurations.container.empty-experiment-group": "This group configuration is not in use. Start by adding a content experiment to any Unit via the {outlineComponentLink}.",
|
||||
"course-authoring.group-configurations.container.course-outline": "Course outline",
|
||||
"course-authoring.group-configurations.container.action.edit": "Edit",
|
||||
"course-authoring.group-configurations.container.action.delete": "Delete",
|
||||
"course-authoring.group-configurations.container.access-to": "This group controls access to:",
|
||||
"course-authoring.group-configurations.container.experiment-access-to": "This group configuration is used in:",
|
||||
"course-authoring.group-configurations.container.contains-groups": "Contains {len} groups",
|
||||
"course-authoring.group-configurations.container.contains-group": "Contains 1 group",
|
||||
"course-authoring.group-configurations.container.not-in-use": "Not in use",
|
||||
"course-authoring.group-configurations.container.used-in-locations": "Used in {len} locations",
|
||||
"course-authoring.group-configurations.container.used-in-location": "Used in 1 location",
|
||||
"course-authoring.group-configurations.container.title-id": "ID: {id}",
|
||||
"course-authoring.group-configurations.experiment-group.title": "Experiment group configurations",
|
||||
"course-authoring.group-configurations.experiment-group.add-new-group": "New group configuration",
|
||||
"course-authoring.group-configurations.empty-placeholder.title": "You have not created any content groups yet.",
|
||||
"course-authoring.group-configurations.experimental-empty-placeholder.title": "You have not created any group configurations yet.",
|
||||
"course-authoring.group-configurations.empty-placeholder.button": "Add your first content group",
|
||||
"course-authoring.group-configurations.experimental-empty-placeholder.button": "Add your first group configuration",
|
||||
"course-authoring.group-configurations.content-groups.add-new-group": "New content group",
|
||||
"course-authoring.course-unit.general.alert.unpublished-version.description": "Note: The last published version of this unit is live. By publishing changes you will change the student experience."
|
||||
}
|
||||
|
||||
@@ -43,5 +43,36 @@
|
||||
"course-authoring.course-unit.xblock.button.move.label": "Move",
|
||||
"course-authoring.course-unit.xblock.button.manageAccess.label": "Manage access",
|
||||
"course-authoring.course-unit.xblock.button.delete.label": "Delete",
|
||||
"course-authoring.course-unit.xblock.button.actions.alt": "Actions"
|
||||
"course-authoring.course-unit.xblock.button.actions.alt": "Actions",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.title": "Discard changes",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.btn.action.text": "Discard changes",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.btn.cancel.text": "Cancel",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.description": "Are you sure you want to revert to the last published version of the unit? You cannot undo this action.",
|
||||
"course-authoring.course-unit.modal.make-visibility.title": "Make visible to students",
|
||||
"course-authoring.course-unit.modal.make-visibility.btn.action.text": "Make visible to students",
|
||||
"course-authoring.course-unit.modal.make-visibility.btn.cancel.text": "Cancel",
|
||||
"course-authoring.course-unit.modal.make-visibility.description": "If the unit was previously published and released to students, any changes you made to the unit when it was hidden will now be visible to students. Do you want to proceed?",
|
||||
"course-authoring.group-configurations.heading-title": "Group configurations",
|
||||
"course-authoring.group-configurations.heading-sub-title": "Settings",
|
||||
"course-authoring.group-configurations.container.empty-content-groups": "In the {outlineComponentLink}, use this group to control access to a component.",
|
||||
"course-authoring.group-configurations.container.empty-experiment-group": "This group configuration is not in use. Start by adding a content experiment to any Unit via the {outlineComponentLink}.",
|
||||
"course-authoring.group-configurations.container.course-outline": "Course outline",
|
||||
"course-authoring.group-configurations.container.action.edit": "Edit",
|
||||
"course-authoring.group-configurations.container.action.delete": "Delete",
|
||||
"course-authoring.group-configurations.container.access-to": "This group controls access to:",
|
||||
"course-authoring.group-configurations.container.experiment-access-to": "This group configuration is used in:",
|
||||
"course-authoring.group-configurations.container.contains-groups": "Contains {len} groups",
|
||||
"course-authoring.group-configurations.container.contains-group": "Contains 1 group",
|
||||
"course-authoring.group-configurations.container.not-in-use": "Not in use",
|
||||
"course-authoring.group-configurations.container.used-in-locations": "Used in {len} locations",
|
||||
"course-authoring.group-configurations.container.used-in-location": "Used in 1 location",
|
||||
"course-authoring.group-configurations.container.title-id": "ID: {id}",
|
||||
"course-authoring.group-configurations.experiment-group.title": "Experiment group configurations",
|
||||
"course-authoring.group-configurations.experiment-group.add-new-group": "New group configuration",
|
||||
"course-authoring.group-configurations.empty-placeholder.title": "You have not created any content groups yet.",
|
||||
"course-authoring.group-configurations.experimental-empty-placeholder.title": "You have not created any group configurations yet.",
|
||||
"course-authoring.group-configurations.empty-placeholder.button": "Add your first content group",
|
||||
"course-authoring.group-configurations.experimental-empty-placeholder.button": "Add your first group configuration",
|
||||
"course-authoring.group-configurations.content-groups.add-new-group": "New content group",
|
||||
"course-authoring.course-unit.general.alert.unpublished-version.description": "Note: The last published version of this unit is live. By publishing changes you will change the student experience."
|
||||
}
|
||||
|
||||
@@ -1020,5 +1020,36 @@
|
||||
"course-authoring.course-unit.xblock.button.move.label": "Move",
|
||||
"course-authoring.course-unit.xblock.button.manageAccess.label": "Manage access",
|
||||
"course-authoring.course-unit.xblock.button.delete.label": "Delete",
|
||||
"course-authoring.course-unit.xblock.button.actions.alt": "Actions"
|
||||
"course-authoring.course-unit.xblock.button.actions.alt": "Actions",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.title": "Discard changes",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.btn.action.text": "Discard changes",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.btn.cancel.text": "Cancel",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.description": "Are you sure you want to revert to the last published version of the unit? You cannot undo this action.",
|
||||
"course-authoring.course-unit.modal.make-visibility.title": "Make visible to students",
|
||||
"course-authoring.course-unit.modal.make-visibility.btn.action.text": "Make visible to students",
|
||||
"course-authoring.course-unit.modal.make-visibility.btn.cancel.text": "Cancel",
|
||||
"course-authoring.course-unit.modal.make-visibility.description": "If the unit was previously published and released to students, any changes you made to the unit when it was hidden will now be visible to students. Do you want to proceed?",
|
||||
"course-authoring.group-configurations.heading-title": "Group configurations",
|
||||
"course-authoring.group-configurations.heading-sub-title": "Settings",
|
||||
"course-authoring.group-configurations.container.empty-content-groups": "In the {outlineComponentLink}, use this group to control access to a component.",
|
||||
"course-authoring.group-configurations.container.empty-experiment-group": "This group configuration is not in use. Start by adding a content experiment to any Unit via the {outlineComponentLink}.",
|
||||
"course-authoring.group-configurations.container.course-outline": "Course outline",
|
||||
"course-authoring.group-configurations.container.action.edit": "Edit",
|
||||
"course-authoring.group-configurations.container.action.delete": "Delete",
|
||||
"course-authoring.group-configurations.container.access-to": "This group controls access to:",
|
||||
"course-authoring.group-configurations.container.experiment-access-to": "This group configuration is used in:",
|
||||
"course-authoring.group-configurations.container.contains-groups": "Contains {len} groups",
|
||||
"course-authoring.group-configurations.container.contains-group": "Contains 1 group",
|
||||
"course-authoring.group-configurations.container.not-in-use": "Not in use",
|
||||
"course-authoring.group-configurations.container.used-in-locations": "Used in {len} locations",
|
||||
"course-authoring.group-configurations.container.used-in-location": "Used in 1 location",
|
||||
"course-authoring.group-configurations.container.title-id": "ID: {id}",
|
||||
"course-authoring.group-configurations.experiment-group.title": "Experiment group configurations",
|
||||
"course-authoring.group-configurations.experiment-group.add-new-group": "New group configuration",
|
||||
"course-authoring.group-configurations.empty-placeholder.title": "You have not created any content groups yet.",
|
||||
"course-authoring.group-configurations.experimental-empty-placeholder.title": "You have not created any group configurations yet.",
|
||||
"course-authoring.group-configurations.empty-placeholder.button": "Add your first content group",
|
||||
"course-authoring.group-configurations.experimental-empty-placeholder.button": "Add your first group configuration",
|
||||
"course-authoring.group-configurations.content-groups.add-new-group": "New content group",
|
||||
"course-authoring.course-unit.general.alert.unpublished-version.description": "Note: The last published version of this unit is live. By publishing changes you will change the student experience."
|
||||
}
|
||||
|
||||
@@ -1020,5 +1020,36 @@
|
||||
"course-authoring.course-unit.xblock.button.move.label": "Move",
|
||||
"course-authoring.course-unit.xblock.button.manageAccess.label": "Manage access",
|
||||
"course-authoring.course-unit.xblock.button.delete.label": "Delete",
|
||||
"course-authoring.course-unit.xblock.button.actions.alt": "Actions"
|
||||
"course-authoring.course-unit.xblock.button.actions.alt": "Actions",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.title": "Discard changes",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.btn.action.text": "Discard changes",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.btn.cancel.text": "Cancel",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.description": "Are you sure you want to revert to the last published version of the unit? You cannot undo this action.",
|
||||
"course-authoring.course-unit.modal.make-visibility.title": "Make visible to students",
|
||||
"course-authoring.course-unit.modal.make-visibility.btn.action.text": "Make visible to students",
|
||||
"course-authoring.course-unit.modal.make-visibility.btn.cancel.text": "Cancel",
|
||||
"course-authoring.course-unit.modal.make-visibility.description": "If the unit was previously published and released to students, any changes you made to the unit when it was hidden will now be visible to students. Do you want to proceed?",
|
||||
"course-authoring.group-configurations.heading-title": "Group configurations",
|
||||
"course-authoring.group-configurations.heading-sub-title": "Settings",
|
||||
"course-authoring.group-configurations.container.empty-content-groups": "In the {outlineComponentLink}, use this group to control access to a component.",
|
||||
"course-authoring.group-configurations.container.empty-experiment-group": "This group configuration is not in use. Start by adding a content experiment to any Unit via the {outlineComponentLink}.",
|
||||
"course-authoring.group-configurations.container.course-outline": "Course outline",
|
||||
"course-authoring.group-configurations.container.action.edit": "Edit",
|
||||
"course-authoring.group-configurations.container.action.delete": "Delete",
|
||||
"course-authoring.group-configurations.container.access-to": "This group controls access to:",
|
||||
"course-authoring.group-configurations.container.experiment-access-to": "This group configuration is used in:",
|
||||
"course-authoring.group-configurations.container.contains-groups": "Contains {len} groups",
|
||||
"course-authoring.group-configurations.container.contains-group": "Contains 1 group",
|
||||
"course-authoring.group-configurations.container.not-in-use": "Not in use",
|
||||
"course-authoring.group-configurations.container.used-in-locations": "Used in {len} locations",
|
||||
"course-authoring.group-configurations.container.used-in-location": "Used in 1 location",
|
||||
"course-authoring.group-configurations.container.title-id": "ID: {id}",
|
||||
"course-authoring.group-configurations.experiment-group.title": "Experiment group configurations",
|
||||
"course-authoring.group-configurations.experiment-group.add-new-group": "New group configuration",
|
||||
"course-authoring.group-configurations.empty-placeholder.title": "You have not created any content groups yet.",
|
||||
"course-authoring.group-configurations.experimental-empty-placeholder.title": "You have not created any group configurations yet.",
|
||||
"course-authoring.group-configurations.empty-placeholder.button": "Add your first content group",
|
||||
"course-authoring.group-configurations.experimental-empty-placeholder.button": "Add your first group configuration",
|
||||
"course-authoring.group-configurations.content-groups.add-new-group": "New content group",
|
||||
"course-authoring.course-unit.general.alert.unpublished-version.description": "Note: The last published version of this unit is live. By publishing changes you will change the student experience."
|
||||
}
|
||||
|
||||
@@ -1020,5 +1020,36 @@
|
||||
"course-authoring.course-unit.xblock.button.move.label": "Move",
|
||||
"course-authoring.course-unit.xblock.button.manageAccess.label": "Manage access",
|
||||
"course-authoring.course-unit.xblock.button.delete.label": "Delete",
|
||||
"course-authoring.course-unit.xblock.button.actions.alt": "Actions"
|
||||
"course-authoring.course-unit.xblock.button.actions.alt": "Actions",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.title": "Discard changes",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.btn.action.text": "Discard changes",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.btn.cancel.text": "Cancel",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.description": "Are you sure you want to revert to the last published version of the unit? You cannot undo this action.",
|
||||
"course-authoring.course-unit.modal.make-visibility.title": "Make visible to students",
|
||||
"course-authoring.course-unit.modal.make-visibility.btn.action.text": "Make visible to students",
|
||||
"course-authoring.course-unit.modal.make-visibility.btn.cancel.text": "Cancel",
|
||||
"course-authoring.course-unit.modal.make-visibility.description": "If the unit was previously published and released to students, any changes you made to the unit when it was hidden will now be visible to students. Do you want to proceed?",
|
||||
"course-authoring.group-configurations.heading-title": "Group configurations",
|
||||
"course-authoring.group-configurations.heading-sub-title": "Settings",
|
||||
"course-authoring.group-configurations.container.empty-content-groups": "In the {outlineComponentLink}, use this group to control access to a component.",
|
||||
"course-authoring.group-configurations.container.empty-experiment-group": "This group configuration is not in use. Start by adding a content experiment to any Unit via the {outlineComponentLink}.",
|
||||
"course-authoring.group-configurations.container.course-outline": "Course outline",
|
||||
"course-authoring.group-configurations.container.action.edit": "Edit",
|
||||
"course-authoring.group-configurations.container.action.delete": "Delete",
|
||||
"course-authoring.group-configurations.container.access-to": "This group controls access to:",
|
||||
"course-authoring.group-configurations.container.experiment-access-to": "This group configuration is used in:",
|
||||
"course-authoring.group-configurations.container.contains-groups": "Contains {len} groups",
|
||||
"course-authoring.group-configurations.container.contains-group": "Contains 1 group",
|
||||
"course-authoring.group-configurations.container.not-in-use": "Not in use",
|
||||
"course-authoring.group-configurations.container.used-in-locations": "Used in {len} locations",
|
||||
"course-authoring.group-configurations.container.used-in-location": "Used in 1 location",
|
||||
"course-authoring.group-configurations.container.title-id": "ID: {id}",
|
||||
"course-authoring.group-configurations.experiment-group.title": "Experiment group configurations",
|
||||
"course-authoring.group-configurations.experiment-group.add-new-group": "New group configuration",
|
||||
"course-authoring.group-configurations.empty-placeholder.title": "You have not created any content groups yet.",
|
||||
"course-authoring.group-configurations.experimental-empty-placeholder.title": "You have not created any group configurations yet.",
|
||||
"course-authoring.group-configurations.empty-placeholder.button": "Add your first content group",
|
||||
"course-authoring.group-configurations.experimental-empty-placeholder.button": "Add your first group configuration",
|
||||
"course-authoring.group-configurations.content-groups.add-new-group": "New content group",
|
||||
"course-authoring.course-unit.general.alert.unpublished-version.description": "Note: The last published version of this unit is live. By publishing changes you will change the student experience."
|
||||
}
|
||||
|
||||
@@ -1020,5 +1020,36 @@
|
||||
"course-authoring.course-unit.xblock.button.move.label": "Move",
|
||||
"course-authoring.course-unit.xblock.button.manageAccess.label": "Manage access",
|
||||
"course-authoring.course-unit.xblock.button.delete.label": "Delete",
|
||||
"course-authoring.course-unit.xblock.button.actions.alt": "Actions"
|
||||
"course-authoring.course-unit.xblock.button.actions.alt": "Actions",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.title": "Discard changes",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.btn.action.text": "Discard changes",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.btn.cancel.text": "Cancel",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.description": "Are you sure you want to revert to the last published version of the unit? You cannot undo this action.",
|
||||
"course-authoring.course-unit.modal.make-visibility.title": "Make visible to students",
|
||||
"course-authoring.course-unit.modal.make-visibility.btn.action.text": "Make visible to students",
|
||||
"course-authoring.course-unit.modal.make-visibility.btn.cancel.text": "Cancel",
|
||||
"course-authoring.course-unit.modal.make-visibility.description": "If the unit was previously published and released to students, any changes you made to the unit when it was hidden will now be visible to students. Do you want to proceed?",
|
||||
"course-authoring.group-configurations.heading-title": "Group configurations",
|
||||
"course-authoring.group-configurations.heading-sub-title": "Settings",
|
||||
"course-authoring.group-configurations.container.empty-content-groups": "In the {outlineComponentLink}, use this group to control access to a component.",
|
||||
"course-authoring.group-configurations.container.empty-experiment-group": "This group configuration is not in use. Start by adding a content experiment to any Unit via the {outlineComponentLink}.",
|
||||
"course-authoring.group-configurations.container.course-outline": "Course outline",
|
||||
"course-authoring.group-configurations.container.action.edit": "Edit",
|
||||
"course-authoring.group-configurations.container.action.delete": "Delete",
|
||||
"course-authoring.group-configurations.container.access-to": "This group controls access to:",
|
||||
"course-authoring.group-configurations.container.experiment-access-to": "This group configuration is used in:",
|
||||
"course-authoring.group-configurations.container.contains-groups": "Contains {len} groups",
|
||||
"course-authoring.group-configurations.container.contains-group": "Contains 1 group",
|
||||
"course-authoring.group-configurations.container.not-in-use": "Not in use",
|
||||
"course-authoring.group-configurations.container.used-in-locations": "Used in {len} locations",
|
||||
"course-authoring.group-configurations.container.used-in-location": "Used in 1 location",
|
||||
"course-authoring.group-configurations.container.title-id": "ID: {id}",
|
||||
"course-authoring.group-configurations.experiment-group.title": "Experiment group configurations",
|
||||
"course-authoring.group-configurations.experiment-group.add-new-group": "New group configuration",
|
||||
"course-authoring.group-configurations.empty-placeholder.title": "You have not created any content groups yet.",
|
||||
"course-authoring.group-configurations.experimental-empty-placeholder.title": "You have not created any group configurations yet.",
|
||||
"course-authoring.group-configurations.empty-placeholder.button": "Add your first content group",
|
||||
"course-authoring.group-configurations.experimental-empty-placeholder.button": "Add your first group configuration",
|
||||
"course-authoring.group-configurations.content-groups.add-new-group": "New content group",
|
||||
"course-authoring.course-unit.general.alert.unpublished-version.description": "Note: The last published version of this unit is live. By publishing changes you will change the student experience."
|
||||
}
|
||||
|
||||
@@ -1020,5 +1020,36 @@
|
||||
"course-authoring.course-unit.xblock.button.move.label": "Move",
|
||||
"course-authoring.course-unit.xblock.button.manageAccess.label": "Manage access",
|
||||
"course-authoring.course-unit.xblock.button.delete.label": "Delete",
|
||||
"course-authoring.course-unit.xblock.button.actions.alt": "Actions"
|
||||
"course-authoring.course-unit.xblock.button.actions.alt": "Actions",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.title": "Discard changes",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.btn.action.text": "Discard changes",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.btn.cancel.text": "Cancel",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.description": "Are you sure you want to revert to the last published version of the unit? You cannot undo this action.",
|
||||
"course-authoring.course-unit.modal.make-visibility.title": "Make visible to students",
|
||||
"course-authoring.course-unit.modal.make-visibility.btn.action.text": "Make visible to students",
|
||||
"course-authoring.course-unit.modal.make-visibility.btn.cancel.text": "Cancel",
|
||||
"course-authoring.course-unit.modal.make-visibility.description": "If the unit was previously published and released to students, any changes you made to the unit when it was hidden will now be visible to students. Do you want to proceed?",
|
||||
"course-authoring.group-configurations.heading-title": "Group configurations",
|
||||
"course-authoring.group-configurations.heading-sub-title": "Settings",
|
||||
"course-authoring.group-configurations.container.empty-content-groups": "In the {outlineComponentLink}, use this group to control access to a component.",
|
||||
"course-authoring.group-configurations.container.empty-experiment-group": "This group configuration is not in use. Start by adding a content experiment to any Unit via the {outlineComponentLink}.",
|
||||
"course-authoring.group-configurations.container.course-outline": "Course outline",
|
||||
"course-authoring.group-configurations.container.action.edit": "Edit",
|
||||
"course-authoring.group-configurations.container.action.delete": "Delete",
|
||||
"course-authoring.group-configurations.container.access-to": "This group controls access to:",
|
||||
"course-authoring.group-configurations.container.experiment-access-to": "This group configuration is used in:",
|
||||
"course-authoring.group-configurations.container.contains-groups": "Contains {len} groups",
|
||||
"course-authoring.group-configurations.container.contains-group": "Contains 1 group",
|
||||
"course-authoring.group-configurations.container.not-in-use": "Not in use",
|
||||
"course-authoring.group-configurations.container.used-in-locations": "Used in {len} locations",
|
||||
"course-authoring.group-configurations.container.used-in-location": "Used in 1 location",
|
||||
"course-authoring.group-configurations.container.title-id": "ID: {id}",
|
||||
"course-authoring.group-configurations.experiment-group.title": "Experiment group configurations",
|
||||
"course-authoring.group-configurations.experiment-group.add-new-group": "New group configuration",
|
||||
"course-authoring.group-configurations.empty-placeholder.title": "You have not created any content groups yet.",
|
||||
"course-authoring.group-configurations.experimental-empty-placeholder.title": "You have not created any group configurations yet.",
|
||||
"course-authoring.group-configurations.empty-placeholder.button": "Add your first content group",
|
||||
"course-authoring.group-configurations.experimental-empty-placeholder.button": "Add your first group configuration",
|
||||
"course-authoring.group-configurations.content-groups.add-new-group": "New content group",
|
||||
"course-authoring.course-unit.general.alert.unpublished-version.description": "Note: The last published version of this unit is live. By publishing changes you will change the student experience."
|
||||
}
|
||||
|
||||
@@ -1020,5 +1020,36 @@
|
||||
"course-authoring.course-unit.xblock.button.move.label": "Move",
|
||||
"course-authoring.course-unit.xblock.button.manageAccess.label": "Manage access",
|
||||
"course-authoring.course-unit.xblock.button.delete.label": "Delete",
|
||||
"course-authoring.course-unit.xblock.button.actions.alt": "Actions"
|
||||
"course-authoring.course-unit.xblock.button.actions.alt": "Actions",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.title": "Discard changes",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.btn.action.text": "Discard changes",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.btn.cancel.text": "Cancel",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.description": "Are you sure you want to revert to the last published version of the unit? You cannot undo this action.",
|
||||
"course-authoring.course-unit.modal.make-visibility.title": "Make visible to students",
|
||||
"course-authoring.course-unit.modal.make-visibility.btn.action.text": "Make visible to students",
|
||||
"course-authoring.course-unit.modal.make-visibility.btn.cancel.text": "Cancel",
|
||||
"course-authoring.course-unit.modal.make-visibility.description": "If the unit was previously published and released to students, any changes you made to the unit when it was hidden will now be visible to students. Do you want to proceed?",
|
||||
"course-authoring.group-configurations.heading-title": "Group configurations",
|
||||
"course-authoring.group-configurations.heading-sub-title": "Settings",
|
||||
"course-authoring.group-configurations.container.empty-content-groups": "In the {outlineComponentLink}, use this group to control access to a component.",
|
||||
"course-authoring.group-configurations.container.empty-experiment-group": "This group configuration is not in use. Start by adding a content experiment to any Unit via the {outlineComponentLink}.",
|
||||
"course-authoring.group-configurations.container.course-outline": "Course outline",
|
||||
"course-authoring.group-configurations.container.action.edit": "Edit",
|
||||
"course-authoring.group-configurations.container.action.delete": "Delete",
|
||||
"course-authoring.group-configurations.container.access-to": "This group controls access to:",
|
||||
"course-authoring.group-configurations.container.experiment-access-to": "This group configuration is used in:",
|
||||
"course-authoring.group-configurations.container.contains-groups": "Contains {len} groups",
|
||||
"course-authoring.group-configurations.container.contains-group": "Contains 1 group",
|
||||
"course-authoring.group-configurations.container.not-in-use": "Not in use",
|
||||
"course-authoring.group-configurations.container.used-in-locations": "Used in {len} locations",
|
||||
"course-authoring.group-configurations.container.used-in-location": "Used in 1 location",
|
||||
"course-authoring.group-configurations.container.title-id": "ID: {id}",
|
||||
"course-authoring.group-configurations.experiment-group.title": "Experiment group configurations",
|
||||
"course-authoring.group-configurations.experiment-group.add-new-group": "New group configuration",
|
||||
"course-authoring.group-configurations.empty-placeholder.title": "You have not created any content groups yet.",
|
||||
"course-authoring.group-configurations.experimental-empty-placeholder.title": "You have not created any group configurations yet.",
|
||||
"course-authoring.group-configurations.empty-placeholder.button": "Add your first content group",
|
||||
"course-authoring.group-configurations.experimental-empty-placeholder.button": "Add your first group configuration",
|
||||
"course-authoring.group-configurations.content-groups.add-new-group": "New content group",
|
||||
"course-authoring.course-unit.general.alert.unpublished-version.description": "Note: The last published version of this unit is live. By publishing changes you will change the student experience."
|
||||
}
|
||||
|
||||
@@ -1020,5 +1020,36 @@
|
||||
"course-authoring.course-unit.xblock.button.move.label": "Move",
|
||||
"course-authoring.course-unit.xblock.button.manageAccess.label": "Manage access",
|
||||
"course-authoring.course-unit.xblock.button.delete.label": "Delete",
|
||||
"course-authoring.course-unit.xblock.button.actions.alt": "Actions"
|
||||
"course-authoring.course-unit.xblock.button.actions.alt": "Actions",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.title": "Discard changes",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.btn.action.text": "Discard changes",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.btn.cancel.text": "Cancel",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.description": "Are you sure you want to revert to the last published version of the unit? You cannot undo this action.",
|
||||
"course-authoring.course-unit.modal.make-visibility.title": "Make visible to students",
|
||||
"course-authoring.course-unit.modal.make-visibility.btn.action.text": "Make visible to students",
|
||||
"course-authoring.course-unit.modal.make-visibility.btn.cancel.text": "Cancel",
|
||||
"course-authoring.course-unit.modal.make-visibility.description": "If the unit was previously published and released to students, any changes you made to the unit when it was hidden will now be visible to students. Do you want to proceed?",
|
||||
"course-authoring.group-configurations.heading-title": "Group configurations",
|
||||
"course-authoring.group-configurations.heading-sub-title": "Settings",
|
||||
"course-authoring.group-configurations.container.empty-content-groups": "In the {outlineComponentLink}, use this group to control access to a component.",
|
||||
"course-authoring.group-configurations.container.empty-experiment-group": "This group configuration is not in use. Start by adding a content experiment to any Unit via the {outlineComponentLink}.",
|
||||
"course-authoring.group-configurations.container.course-outline": "Course outline",
|
||||
"course-authoring.group-configurations.container.action.edit": "Edit",
|
||||
"course-authoring.group-configurations.container.action.delete": "Delete",
|
||||
"course-authoring.group-configurations.container.access-to": "This group controls access to:",
|
||||
"course-authoring.group-configurations.container.experiment-access-to": "This group configuration is used in:",
|
||||
"course-authoring.group-configurations.container.contains-groups": "Contains {len} groups",
|
||||
"course-authoring.group-configurations.container.contains-group": "Contains 1 group",
|
||||
"course-authoring.group-configurations.container.not-in-use": "Not in use",
|
||||
"course-authoring.group-configurations.container.used-in-locations": "Used in {len} locations",
|
||||
"course-authoring.group-configurations.container.used-in-location": "Used in 1 location",
|
||||
"course-authoring.group-configurations.container.title-id": "ID: {id}",
|
||||
"course-authoring.group-configurations.experiment-group.title": "Experiment group configurations",
|
||||
"course-authoring.group-configurations.experiment-group.add-new-group": "New group configuration",
|
||||
"course-authoring.group-configurations.empty-placeholder.title": "You have not created any content groups yet.",
|
||||
"course-authoring.group-configurations.experimental-empty-placeholder.title": "You have not created any group configurations yet.",
|
||||
"course-authoring.group-configurations.empty-placeholder.button": "Add your first content group",
|
||||
"course-authoring.group-configurations.experimental-empty-placeholder.button": "Add your first group configuration",
|
||||
"course-authoring.group-configurations.content-groups.add-new-group": "New content group",
|
||||
"course-authoring.course-unit.general.alert.unpublished-version.description": "Note: The last published version of this unit is live. By publishing changes you will change the student experience."
|
||||
}
|
||||
|
||||
@@ -1020,5 +1020,36 @@
|
||||
"course-authoring.course-unit.xblock.button.move.label": "Move",
|
||||
"course-authoring.course-unit.xblock.button.manageAccess.label": "Manage access",
|
||||
"course-authoring.course-unit.xblock.button.delete.label": "Delete",
|
||||
"course-authoring.course-unit.xblock.button.actions.alt": "Actions"
|
||||
"course-authoring.course-unit.xblock.button.actions.alt": "Actions",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.title": "Discard changes",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.btn.action.text": "Discard changes",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.btn.cancel.text": "Cancel",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.description": "Are you sure you want to revert to the last published version of the unit? You cannot undo this action.",
|
||||
"course-authoring.course-unit.modal.make-visibility.title": "Make visible to students",
|
||||
"course-authoring.course-unit.modal.make-visibility.btn.action.text": "Make visible to students",
|
||||
"course-authoring.course-unit.modal.make-visibility.btn.cancel.text": "Cancel",
|
||||
"course-authoring.course-unit.modal.make-visibility.description": "If the unit was previously published and released to students, any changes you made to the unit when it was hidden will now be visible to students. Do you want to proceed?",
|
||||
"course-authoring.group-configurations.heading-title": "Group configurations",
|
||||
"course-authoring.group-configurations.heading-sub-title": "Settings",
|
||||
"course-authoring.group-configurations.container.empty-content-groups": "In the {outlineComponentLink}, use this group to control access to a component.",
|
||||
"course-authoring.group-configurations.container.empty-experiment-group": "This group configuration is not in use. Start by adding a content experiment to any Unit via the {outlineComponentLink}.",
|
||||
"course-authoring.group-configurations.container.course-outline": "Course outline",
|
||||
"course-authoring.group-configurations.container.action.edit": "Edit",
|
||||
"course-authoring.group-configurations.container.action.delete": "Delete",
|
||||
"course-authoring.group-configurations.container.access-to": "This group controls access to:",
|
||||
"course-authoring.group-configurations.container.experiment-access-to": "This group configuration is used in:",
|
||||
"course-authoring.group-configurations.container.contains-groups": "Contains {len} groups",
|
||||
"course-authoring.group-configurations.container.contains-group": "Contains 1 group",
|
||||
"course-authoring.group-configurations.container.not-in-use": "Not in use",
|
||||
"course-authoring.group-configurations.container.used-in-locations": "Used in {len} locations",
|
||||
"course-authoring.group-configurations.container.used-in-location": "Used in 1 location",
|
||||
"course-authoring.group-configurations.container.title-id": "ID: {id}",
|
||||
"course-authoring.group-configurations.experiment-group.title": "Experiment group configurations",
|
||||
"course-authoring.group-configurations.experiment-group.add-new-group": "New group configuration",
|
||||
"course-authoring.group-configurations.empty-placeholder.title": "You have not created any content groups yet.",
|
||||
"course-authoring.group-configurations.experimental-empty-placeholder.title": "You have not created any group configurations yet.",
|
||||
"course-authoring.group-configurations.empty-placeholder.button": "Add your first content group",
|
||||
"course-authoring.group-configurations.experimental-empty-placeholder.button": "Add your first group configuration",
|
||||
"course-authoring.group-configurations.content-groups.add-new-group": "New content group",
|
||||
"course-authoring.course-unit.general.alert.unpublished-version.description": "Note: The last published version of this unit is live. By publishing changes you will change the student experience."
|
||||
}
|
||||
|
||||
@@ -1020,5 +1020,36 @@
|
||||
"course-authoring.course-unit.xblock.button.move.label": "Move",
|
||||
"course-authoring.course-unit.xblock.button.manageAccess.label": "Manage access",
|
||||
"course-authoring.course-unit.xblock.button.delete.label": "Delete",
|
||||
"course-authoring.course-unit.xblock.button.actions.alt": "Actions"
|
||||
"course-authoring.course-unit.xblock.button.actions.alt": "Actions",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.title": "Discard changes",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.btn.action.text": "Discard changes",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.btn.cancel.text": "Cancel",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.description": "Are you sure you want to revert to the last published version of the unit? You cannot undo this action.",
|
||||
"course-authoring.course-unit.modal.make-visibility.title": "Make visible to students",
|
||||
"course-authoring.course-unit.modal.make-visibility.btn.action.text": "Make visible to students",
|
||||
"course-authoring.course-unit.modal.make-visibility.btn.cancel.text": "Cancel",
|
||||
"course-authoring.course-unit.modal.make-visibility.description": "If the unit was previously published and released to students, any changes you made to the unit when it was hidden will now be visible to students. Do you want to proceed?",
|
||||
"course-authoring.group-configurations.heading-title": "Group configurations",
|
||||
"course-authoring.group-configurations.heading-sub-title": "Settings",
|
||||
"course-authoring.group-configurations.container.empty-content-groups": "In the {outlineComponentLink}, use this group to control access to a component.",
|
||||
"course-authoring.group-configurations.container.empty-experiment-group": "This group configuration is not in use. Start by adding a content experiment to any Unit via the {outlineComponentLink}.",
|
||||
"course-authoring.group-configurations.container.course-outline": "Course outline",
|
||||
"course-authoring.group-configurations.container.action.edit": "Edit",
|
||||
"course-authoring.group-configurations.container.action.delete": "Delete",
|
||||
"course-authoring.group-configurations.container.access-to": "This group controls access to:",
|
||||
"course-authoring.group-configurations.container.experiment-access-to": "This group configuration is used in:",
|
||||
"course-authoring.group-configurations.container.contains-groups": "Contains {len} groups",
|
||||
"course-authoring.group-configurations.container.contains-group": "Contains 1 group",
|
||||
"course-authoring.group-configurations.container.not-in-use": "Not in use",
|
||||
"course-authoring.group-configurations.container.used-in-locations": "Used in {len} locations",
|
||||
"course-authoring.group-configurations.container.used-in-location": "Used in 1 location",
|
||||
"course-authoring.group-configurations.container.title-id": "ID: {id}",
|
||||
"course-authoring.group-configurations.experiment-group.title": "Experiment group configurations",
|
||||
"course-authoring.group-configurations.experiment-group.add-new-group": "New group configuration",
|
||||
"course-authoring.group-configurations.empty-placeholder.title": "You have not created any content groups yet.",
|
||||
"course-authoring.group-configurations.experimental-empty-placeholder.title": "You have not created any group configurations yet.",
|
||||
"course-authoring.group-configurations.empty-placeholder.button": "Add your first content group",
|
||||
"course-authoring.group-configurations.experimental-empty-placeholder.button": "Add your first group configuration",
|
||||
"course-authoring.group-configurations.content-groups.add-new-group": "New content group",
|
||||
"course-authoring.course-unit.general.alert.unpublished-version.description": "Note: The last published version of this unit is live. By publishing changes you will change the student experience."
|
||||
}
|
||||
|
||||
@@ -1020,5 +1020,36 @@
|
||||
"course-authoring.course-unit.xblock.button.move.label": "Move",
|
||||
"course-authoring.course-unit.xblock.button.manageAccess.label": "Manage access",
|
||||
"course-authoring.course-unit.xblock.button.delete.label": "Delete",
|
||||
"course-authoring.course-unit.xblock.button.actions.alt": "Actions"
|
||||
"course-authoring.course-unit.xblock.button.actions.alt": "Actions",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.title": "Discard changes",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.btn.action.text": "Discard changes",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.btn.cancel.text": "Cancel",
|
||||
"course-authoring.course-unit.modal.discard-unit-changes.description": "Are you sure you want to revert to the last published version of the unit? You cannot undo this action.",
|
||||
"course-authoring.course-unit.modal.make-visibility.title": "Make visible to students",
|
||||
"course-authoring.course-unit.modal.make-visibility.btn.action.text": "Make visible to students",
|
||||
"course-authoring.course-unit.modal.make-visibility.btn.cancel.text": "Cancel",
|
||||
"course-authoring.course-unit.modal.make-visibility.description": "If the unit was previously published and released to students, any changes you made to the unit when it was hidden will now be visible to students. Do you want to proceed?",
|
||||
"course-authoring.group-configurations.heading-title": "Group configurations",
|
||||
"course-authoring.group-configurations.heading-sub-title": "Settings",
|
||||
"course-authoring.group-configurations.container.empty-content-groups": "In the {outlineComponentLink}, use this group to control access to a component.",
|
||||
"course-authoring.group-configurations.container.empty-experiment-group": "This group configuration is not in use. Start by adding a content experiment to any Unit via the {outlineComponentLink}.",
|
||||
"course-authoring.group-configurations.container.course-outline": "Course outline",
|
||||
"course-authoring.group-configurations.container.action.edit": "Edit",
|
||||
"course-authoring.group-configurations.container.action.delete": "Delete",
|
||||
"course-authoring.group-configurations.container.access-to": "This group controls access to:",
|
||||
"course-authoring.group-configurations.container.experiment-access-to": "This group configuration is used in:",
|
||||
"course-authoring.group-configurations.container.contains-groups": "Contains {len} groups",
|
||||
"course-authoring.group-configurations.container.contains-group": "Contains 1 group",
|
||||
"course-authoring.group-configurations.container.not-in-use": "Not in use",
|
||||
"course-authoring.group-configurations.container.used-in-locations": "Used in {len} locations",
|
||||
"course-authoring.group-configurations.container.used-in-location": "Used in 1 location",
|
||||
"course-authoring.group-configurations.container.title-id": "ID: {id}",
|
||||
"course-authoring.group-configurations.experiment-group.title": "Experiment group configurations",
|
||||
"course-authoring.group-configurations.experiment-group.add-new-group": "New group configuration",
|
||||
"course-authoring.group-configurations.empty-placeholder.title": "You have not created any content groups yet.",
|
||||
"course-authoring.group-configurations.experimental-empty-placeholder.title": "You have not created any group configurations yet.",
|
||||
"course-authoring.group-configurations.empty-placeholder.button": "Add your first content group",
|
||||
"course-authoring.group-configurations.experimental-empty-placeholder.button": "Add your first group configuration",
|
||||
"course-authoring.group-configurations.content-groups.add-new-group": "New content group",
|
||||
"course-authoring.course-unit.general.alert.unpublished-version.description": "Note: The last published version of this unit is live. By publishing changes you will change the student experience."
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user