feat: [AXIMST-23] Course unit - Sidebar with unit info (#117)

* feat: added Sidebar with unit info

* feat: added unit location

* refactor: added legacy behavior

* feat: added live variant

* refactor: code refactoring

* feat: added tests and translations

* feat: added new font size

* refactor: after review
This commit is contained in:
Peter Kulko
2024-01-22 16:52:04 +02:00
committed by Adolfo R. Brandes
parent f8095e6670
commit 073e191273
30 changed files with 729 additions and 343 deletions

View File

@@ -18,6 +18,7 @@ import HeaderTitle from './header-title/HeaderTitle';
import Breadcrumbs from './breadcrumbs/Breadcrumbs';
import HeaderNavigations from './header-navigations/HeaderNavigations';
import Sequence from './course-sequence';
import Sidebar from './sidebar';
import { useCourseUnit } from './hooks';
import messages from './messages';
@@ -86,9 +87,9 @@ const CourseUnit = ({ courseId }) => {
handleCreateNewCourseXBlock={handleCreateNewCourseXBlock}
/>
<Layout
lg={[{ span: 9 }, { span: 3 }]}
md={[{ span: 9 }, { span: 3 }]}
sm={[{ span: 9 }, { span: 3 }]}
lg={[{ span: 8 }, { span: 4 }]}
md={[{ span: 8 }, { span: 4 }]}
sm={[{ span: 8 }, { span: 3 }]}
xs={[{ span: 9 }, { span: 3 }]}
xl={[{ span: 9 }, { span: 3 }]}
>
@@ -110,7 +111,12 @@ const CourseUnit = ({ courseId }) => {
handleCreateNewCourseXBlock={handleCreateNewCourseXBlock}
/>
</Layout.Element>
<Layout.Element />
<Layout.Element>
<Stack gap={3}>
<Sidebar />
<Sidebar isDisplayUnitLocation />
</Stack>
</Layout.Element>
</Layout>
</section>
</Container>

View File

@@ -2,3 +2,4 @@
@import "./course-sequence/CourseSequence";
@import "./add-component/AddComponent";
@import "./course-xblock/CourseXblock";
@import "./sidebar/Sidebar";

View File

@@ -34,6 +34,8 @@ import CourseUnit from './CourseUnit';
import headerNavigationsMessages from './header-navigations/messages';
import headerTitleMessages from './header-title/messages';
import courseSequenceMessages from './course-sequence/messages';
import sidebarMessages from './sidebar/messages';
import { extractCourseUnitId } from './sidebar/utils';
import deleteModalMessages from '../generic/delete-modal/messages';
import courseXBlockMessages from './course-xblock/messages';
@@ -310,6 +312,44 @@ describe('<CourseUnit />', () => {
});
});
it('renders course unit details for a draft with unpublished changes', async () => {
const { getByText } = render(<RootWrapper />);
await waitFor(() => {
expect(getByText(sidebarMessages.sidebarTitleDraftUnpublishedChanges.defaultMessage)).toBeInTheDocument();
expect(getByText(sidebarMessages.visibilityStaffAndLearnersTitle.defaultMessage)).toBeInTheDocument();
expect(getByText(sidebarMessages.releaseStatusTitle.defaultMessage)).toBeInTheDocument();
expect(getByText(sidebarMessages.sidebarBodyNote.defaultMessage)).toBeInTheDocument();
expect(getByText(sidebarMessages.visibilityWillBeVisibleToTitle.defaultMessage)).toBeInTheDocument();
expect(getByText(sidebarMessages.visibilityCheckboxTitle.defaultMessage)).toBeInTheDocument();
expect(getByText(sidebarMessages.actionButtonPublishTitle.defaultMessage)).toBeInTheDocument();
expect(getByText(sidebarMessages.actionButtonDiscardChangesTitle.defaultMessage)).toBeInTheDocument();
expect(getByText(courseUnitIndexMock.release_date)).toBeInTheDocument();
expect(getByText(
sidebarMessages.publishInfoDraftSaved.defaultMessage
.replace('{editedOn}', courseUnitIndexMock.edited_on)
.replace('{editedBy}', courseUnitIndexMock.edited_by),
)).toBeInTheDocument();
expect(getByText(
sidebarMessages.releaseInfoWithSection.defaultMessage
.replace('{sectionName}', courseUnitIndexMock.release_date_from),
)).toBeInTheDocument();
});
});
it('renders course unit details in the sidebar', async () => {
const { getByText } = render(<RootWrapper />);
const courseUnitLocationId = extractCourseUnitId(courseUnitIndexMock.id);
await waitFor(() => {
expect(getByText(sidebarMessages.sidebarHeaderUnitLocationTitle.defaultMessage)).toBeInTheDocument();
expect(getByText(sidebarMessages.unitLocationTitle.defaultMessage)).toBeInTheDocument();
expect(getByText(courseUnitLocationId)).toBeInTheDocument();
expect(getByText(sidebarMessages.unitLocationDescription.defaultMessage
.replace('{id}', courseUnitLocationId))).toBeInTheDocument();
});
});
it('checks whether xblock is deleted when corresponding delete button is clicked', async () => {
axiosMock
.onDelete(getXBlockBaseApiUrl(courseVerticalChildrenMock.children[0].block_id))

View File

@@ -12,6 +12,7 @@ import {
TextFields as TextFieldsIcon,
VideoCamera as VideoCameraIcon,
} from '@openedx/paragon/icons';
import messages from './sidebar/messages';
export const UNIT_ICON_TYPES = ['video', 'other', 'vertical', 'problem', 'lock'];
@@ -44,3 +45,20 @@ export const COMPONENT_TYPE_ICON_MAP = {
[COMPONENT_ICON_TYPES.video]: VideoCameraIcon,
[COMPONENT_ICON_TYPES.dragAndDrop]: BackHandIcon,
};
export const getUnitReleaseStatus = (intl) => ({
release: intl.formatMessage(messages.releaseStatusTitle),
released: intl.formatMessage(messages.releasedStatusTitle),
scheduled: intl.formatMessage(messages.scheduledStatusTitle),
});
export const UNIT_VISIBILITY_STATES = {
staffOnly: 'staff_only',
live: 'live',
ready: 'ready',
};
export const COLORS = {
BLACK: '#000',
GREEN: '#0D7D4D',
};

View File

@@ -0,0 +1,71 @@
%base-font-params {
font-size: $font-size-sm;
line-height: $line-height-base;
}
.course-unit-sidebar {
.course-unit-sidebar-header {
padding: $spacer $spacer map-get($spacers, 3\.5);
.course-unit-sidebar-header-icon {
margin-right: map-get($spacers, 1);
}
.course-unit-sidebar-header-title {
font-size: $font-size-base;
line-height: $line-height-base;
}
}
.course-unit-sidebar-footer {
padding: 0 $spacer $spacer;
.course-unit-sidebar-visibility {
.course-unit-sidebar-visibility-title {
font-weight: $font-weight-normal;
color: $gray-700;
@extend %base-font-params;
}
.course-unit-sidebar-location-description {
font-size: $font-size-xs;
line-height: $line-height-base;
}
.course-unit-sidebar-visibility-copy {
font-weight: $font-weight-bold;
color: $gray-700;
@extend %base-font-params;
}
.course-unit-sidebar-visibility-checkbox .pgn__form-label {
font-size: $font-size-sm;
line-height: $headings-line-height;
}
}
}
.course-unit-sidebar-date {
padding: 0 $spacer $spacer;
@extend %base-font-params;
.course-unit-sidebar-date-stage {
font-weight: $font-weight-normal;
@extend %base-font-params;
}
.course-unit-sidebar-date-timestamp {
color: $gray-700;
@extend %base-font-params;
}
}
&.is-stuff-only .course-unit-sidebar-date-and-with {
text-decoration: line-through;
}
}

View File

@@ -0,0 +1,29 @@
import { useSelector } from 'react-redux';
import { useIntl } from '@edx/frontend-platform/i18n';
import { getCourseUnitData } from '../../data/selectors';
import { getReleaseInfo } from '../utils';
const ReleaseInfoComponent = () => {
const intl = useIntl();
const {
releaseDate,
releaseDateFrom,
} = useSelector(getCourseUnitData);
const releaseInfo = getReleaseInfo(intl, releaseDate, releaseDateFrom);
if (releaseInfo.isScheduled) {
return (
<span className="course-unit-sidebar-date-and-with">
<h6 className="course-unit-sidebar-date-timestamp m-0 d-inline">
{releaseInfo.releaseDate}&nbsp;
</h6>
{releaseInfo.sectionNameMessage}
</span>
);
}
return releaseInfo.message;
};
export default ReleaseInfoComponent;

View File

@@ -0,0 +1,65 @@
import PropTypes from 'prop-types';
import { useSelector } from 'react-redux';
import { Card, Stack } from '@openedx/paragon';
import { useIntl } from '@edx/frontend-platform/i18n';
import { getCourseUnitData } from '../../data/selectors';
import { getPublishInfo } from '../utils';
import messages from '../messages';
import ReleaseInfoComponent from './ReleaseInfoComponent';
const SidebarBody = ({ releaseLabel, isDisplayUnitLocation, locationId }) => {
const intl = useIntl();
const {
editedOn,
editedBy,
hasChanges,
publishedBy,
publishedOn,
} = useSelector(getCourseUnitData);
return (
<Card.Body className="course-unit-sidebar-date">
<Stack>
{isDisplayUnitLocation ? (
<span>
<h5 className="course-unit-sidebar-date-stage m-0">
{intl.formatMessage(messages.unitLocationTitle)}
</h5>
<p className="m-0 font-weight-bold">
{locationId}
</p>
</span>
) : (
<>
<span>
{getPublishInfo(intl, hasChanges, editedBy, editedOn, publishedBy, publishedOn)}
</span>
<span className="mt-3.5">
<h5 className="course-unit-sidebar-date-stage m-0">
{releaseLabel}
</h5>
<ReleaseInfoComponent />
</span>
<p className="mt-3.5 mb-0">
{intl.formatMessage(messages.sidebarBodyNote)}
</p>
</>
)}
</Stack>
</Card.Body>
);
};
SidebarBody.propTypes = {
releaseLabel: PropTypes.string.isRequired,
isDisplayUnitLocation: PropTypes.bool,
locationId: PropTypes.string,
};
SidebarBody.defaultProps = {
isDisplayUnitLocation: false,
locationId: null,
};
export default SidebarBody;

View File

@@ -0,0 +1,41 @@
import PropTypes from 'prop-types';
import { useSelector } from 'react-redux';
import { Icon, Stack } from '@openedx/paragon';
import { useIntl } from '@edx/frontend-platform/i18n';
import { getCourseUnitData } from '../../data/selectors';
import { getIconVariant } from '../utils';
import messages from '../messages';
const SidebarHeader = ({ title, visibilityState, isDisplayUnitLocation }) => {
const intl = useIntl();
const { hasChanges, published } = useSelector(getCourseUnitData);
const { iconSrc, colorVariant } = getIconVariant(visibilityState, published, hasChanges);
return (
<Stack className="course-unit-sidebar-header" direction="horizontal">
{!isDisplayUnitLocation && (
<Icon
className="course-unit-sidebar-header-icon"
svgAttrs={{ color: colorVariant }}
src={iconSrc}
/>
)}
<h3 className="course-unit-sidebar-header-title m-0">
{isDisplayUnitLocation ? intl.formatMessage(messages.sidebarHeaderUnitLocationTitle) : title}
</h3>
</Stack>
);
};
SidebarHeader.propTypes = {
title: PropTypes.string.isRequired,
visibilityState: PropTypes.string.isRequired,
isDisplayUnitLocation: PropTypes.bool,
};
SidebarHeader.defaultProps = {
isDisplayUnitLocation: false,
};
export default SidebarHeader;

View File

@@ -0,0 +1,3 @@
export { default as SidebarHeader } from './SidebarHeader';
export { default as SidebarBody } from './SidebarBody';
export { default as SidebarFooter } from './sidebar-footer';

View File

@@ -0,0 +1,49 @@
import { useSelector } from 'react-redux';
import { Button } from '@openedx/paragon';
import { useIntl } from '@edx/frontend-platform/i18n';
import { getCourseUnitData } from '../../../data/selectors';
import messages from '../../messages';
const ActionButtons = () => {
const intl = useIntl();
const {
published,
hasChanges,
enableCopyPasteUnits,
} = useSelector(getCourseUnitData);
return (
<>
{(!published || hasChanges) && (
<Button
className="mt-3.5"
variant="outline-primary"
size="sm"
>
{intl.formatMessage(messages.actionButtonPublishTitle)}
</Button>
)}
{(published && hasChanges) && (
<Button
className="mt-2"
variant="link"
size="sm"
>
{intl.formatMessage(messages.actionButtonDiscardChangesTitle)}
</Button>
)}
{enableCopyPasteUnits && (
<Button
className="mt-2"
variant="outline-primary"
size="sm"
>
{intl.formatMessage(messages.actionButtonCopyUnitTitle)}
</Button>
)}
</>
);
};
export default ActionButtons;

View File

@@ -0,0 +1,55 @@
import { useSelector } from 'react-redux';
import { Form } from '@openedx/paragon';
import { useIntl } from '@edx/frontend-platform/i18n';
import { getCourseUnitData } from '../../../data/selectors';
import { getVisibilityTitle } from '../../utils';
import messages from '../../messages';
const UnitVisibilityInfo = () => {
const intl = useIntl();
const {
published,
hasChanges,
staffLockFrom,
releaseDateFrom,
releasedToStudents,
visibleToStaffOnly,
hasExplicitStaffLock,
} = useSelector(getCourseUnitData);
return (
<>
<small className="course-unit-sidebar-visibility-title">
{getVisibilityTitle(intl, releasedToStudents, published, hasChanges)}
</small>
{visibleToStaffOnly ? (
<>
<h6 className="course-unit-sidebar-visibility-copy">
{intl.formatMessage(messages.visibilityStaffOnlyTitle)}
</h6>
{!hasExplicitStaffLock && (
<span>
{intl.formatMessage(messages.visibilityHasExplicitStaffLockText, {
date: releaseDateFrom, sectionName: staffLockFrom,
})}
</span>
)}
</>
) : (
<h6 className="course-unit-sidebar-visibility-copy">
{intl.formatMessage(messages.visibilityStaffAndLearnersTitle)}
</h6>
)}
<Form.Checkbox
className="course-unit-sidebar-visibility-checkbox"
checked={hasExplicitStaffLock}
onChange={() => {}}
>
{intl.formatMessage(messages.visibilityCheckboxTitle)}
</Form.Checkbox>
</>
);
};
export default UnitVisibilityInfo;

View File

@@ -0,0 +1,40 @@
import PropTypes from 'prop-types';
import { Card, Stack } from '@openedx/paragon';
import { useIntl } from '@edx/frontend-platform/i18n';
import messages from '../../messages';
import UnitVisibilityInfo from './UnitVisibilityInfo';
import ActionButtons from './ActionButtons';
const SidebarFooter = ({ isDisplayUnitLocation, locationId }) => {
const intl = useIntl();
return (
<Card.Footer className="course-unit-sidebar-footer" orientation="horizontal">
<Stack className="course-unit-sidebar-visibility">
{isDisplayUnitLocation ? (
<small className="course-unit-sidebar-location-description">
{intl.formatMessage(messages.unitLocationDescription, { id: locationId })}
</small>
) : (
<>
<UnitVisibilityInfo />
<ActionButtons />
</>
)}
</Stack>
</Card.Footer>
);
};
SidebarFooter.propTypes = {
isDisplayUnitLocation: PropTypes.bool,
locationId: PropTypes.string,
};
SidebarFooter.defaultProps = {
isDisplayUnitLocation: false,
locationId: null,
};
export default SidebarFooter;

View File

@@ -0,0 +1,43 @@
import { useIntl } from '@edx/frontend-platform/i18n';
import { getUnitReleaseStatus, UNIT_VISIBILITY_STATES } from '../constants';
import messages from './messages';
import { extractCourseUnitId } from './utils';
const useCourseUnitData = ({
hasChanges, published, visibilityState, id,
}) => {
const intl = useIntl();
const releaseStatus = getUnitReleaseStatus(intl);
const locationId = extractCourseUnitId(id);
const visibleToStaffOnly = visibilityState === UNIT_VISIBILITY_STATES.staffOnly;
const titleMessages = {
[UNIT_VISIBILITY_STATES.staffOnly]: messages.sidebarTitleVisibleToStaffOnly,
[UNIT_VISIBILITY_STATES.live]: messages.sidebarTitlePublishedAndLive,
// eslint-disable-next-line no-nested-ternary
default: published
? (hasChanges ? messages.sidebarTitleDraftUnpublishedChanges
: messages.sidebarTitlePublishedNotYetReleased)
: messages.sidebarTitleDraftNeverPublished,
};
const releaseLabels = {
[UNIT_VISIBILITY_STATES.staffOnly]: releaseStatus.release,
[UNIT_VISIBILITY_STATES.live]: releaseStatus.released,
[UNIT_VISIBILITY_STATES.ready]: releaseStatus.scheduled,
default: releaseStatus.release,
};
const title = intl.formatMessage(titleMessages[visibilityState] || titleMessages.default);
const releaseLabel = releaseLabels[visibilityState] || releaseLabels.default;
return {
title,
locationId,
releaseLabel,
visibilityState,
visibleToStaffOnly,
};
};
export default useCourseUnitData;

View File

@@ -0,0 +1,52 @@
import PropTypes from 'prop-types';
import { useSelector } from 'react-redux';
import classNames from 'classnames';
import { Card } from '@openedx/paragon';
import { getCourseUnitData } from '../data/selectors';
import { SidebarBody, SidebarFooter, SidebarHeader } from './components';
import useCourseUnitData from './hooks';
const Sidebar = ({ isDisplayUnitLocation }) => {
const {
title,
locationId,
releaseLabel,
visibilityState,
visibleToStaffOnly,
} = useCourseUnitData(useSelector(getCourseUnitData));
return (
<Card
className={classNames('course-unit-sidebar', {
'is-stuff-only': visibleToStaffOnly,
})}
data-testid="course-unit-sidebar"
>
<SidebarHeader
title={title}
visibilityState={visibilityState}
isDisplayUnitLocation={isDisplayUnitLocation}
/>
<SidebarBody
locationId={locationId}
releaseLabel={releaseLabel}
isDisplayUnitLocation={isDisplayUnitLocation}
/>
<SidebarFooter
locationId={locationId}
isDisplayUnitLocation={isDisplayUnitLocation}
/>
</Card>
);
};
Sidebar.propTypes = {
isDisplayUnitLocation: PropTypes.bool,
};
Sidebar.defaultProps = {
isDisplayUnitLocation: false,
};
export default Sidebar;

View File

@@ -0,0 +1,110 @@
import { defineMessages } from '@edx/frontend-platform/i18n';
const messages = defineMessages({
sidebarTitleDraftNeverPublished: {
id: 'course-authoring.course-unit.sidebar.title.draft.never-published',
defaultMessage: 'Draft (never published)',
},
sidebarTitleVisibleToStaffOnly: {
id: 'course-authoring.course-unit.sidebar.title.visible.to-staff-only',
defaultMessage: 'Visible to staff only',
},
sidebarTitlePublishedAndLive: {
id: 'course-authoring.course-unit.sidebar.title.published.live',
defaultMessage: 'Published and live',
},
sidebarTitleDraftUnpublishedChanges: {
id: 'course-authoring.course-unit.sidebar.title.draft.unpublished',
defaultMessage: 'Draft (unpublished changes)',
},
sidebarTitlePublishedNotYetReleased: {
id: 'course-authoring.course-unit.sidebar.title.published.not-yet-released',
defaultMessage: 'Published (not yet released)',
},
sidebarHeaderUnitLocationTitle: {
id: 'course-authoring.course-unit.sidebar.header.unit-location.title',
defaultMessage: 'Unit location',
},
sidebarBodyNote: {
id: 'course-authoring.course-unit.sidebar.body.note',
defaultMessage: 'Note: Do not hide graded assignments after they have been released.',
},
publishInfoPreviouslyPublished: {
id: 'course-authoring.course-unit.publish.info.previously-published',
defaultMessage: 'Previously published',
},
publishInfoDraftSaved: {
id: 'course-authoring.course-unit.publish.info.draft.saved',
defaultMessage: 'Draft saved on {editedOn} by {editedBy}',
},
publishLastPublished: {
id: 'course-authoring.course-unit.publish.info.last.published',
defaultMessage: 'Last published {publishedOn} by {publishedBy}',
},
releaseInfoUnscheduled: {
id: 'course-authoring.course-unit.release.info.unscheduled',
defaultMessage: 'Unscheduled',
},
releaseInfoWithSection: {
id: 'course-authoring.course-unit.release.info.with-unit',
defaultMessage: 'with {sectionName}',
},
visibilityIsVisibleToTitle: {
id: 'course-authoring.course-unit.visibility.is-visible-to.title',
defaultMessage: 'IS VISIBLE TO',
},
visibilityWillBeVisibleToTitle: {
id: 'course-authoring.course-unit.visibility.will-be-visible-to.title',
defaultMessage: 'WILL BE VISIBLE TO',
},
unitLocationTitle: {
id: 'course-authoring.course-unit.unit-location.title',
defaultMessage: 'LOCATION ID',
},
unitLocationDescription: {
id: 'course-authoring.course-unit.unit-location.description',
defaultMessage: 'To create a link to this unit from an HTML component in this course, enter /jump_to_id/{id} as the URL value',
},
visibilityCheckboxTitle: {
id: 'course-authoring.course-unit.visibility.checkbox.title',
defaultMessage: 'Hide from learners',
},
visibilityStaffOnlyTitle: {
id: 'course-authoring.course-unit.visibility.staff-only.title',
defaultMessage: 'Staff only',
},
visibilityStaffAndLearnersTitle: {
id: 'course-authoring.course-unit.visibility.staff-and-learners.title',
defaultMessage: 'Staff and learners',
},
visibilityHasExplicitStaffLockText: {
id: 'course-authoring.course-unit.visibility.has-explicit-staff-lock.text',
defaultMessage: 'with {date} {sectionName}',
},
actionButtonPublishTitle: {
id: 'course-authoring.course-unit.action-buttons.publish.title',
defaultMessage: 'Publish',
},
actionButtonDiscardChangesTitle: {
id: 'course-authoring.course-unit.action-button.discard-changes.title',
defaultMessage: 'Discard changes',
},
actionButtonCopyUnitTitle: {
id: 'course-authoring.course-unit.action-button.copy-unit.title',
defaultMessage: 'Copy unit',
},
releaseStatusTitle: {
id: 'course-authoring.course-unit.status.release.title',
defaultMessage: 'RELEASE',
},
releasedStatusTitle: {
id: 'course-authoring.course-unit.status.released.title',
defaultMessage: 'RELEASED',
},
scheduledStatusTitle: {
id: 'course-authoring.course-unit.status.scheduled.title',
defaultMessage: 'SCHEDULED',
},
});
export default messages;

View File

@@ -0,0 +1,102 @@
import {
CheckCircle as CheckCircleIcon,
CheckCircleOutline as CheckCircleOutlineIcon,
InfoOutline as InfoOutlineIcon,
} from '@openedx/paragon/icons';
import { COLORS, UNIT_VISIBILITY_STATES } from '../constants';
import messages from './messages';
/**
* Get information about the publishing status.
* @param {Object} intl - The internationalization object.
* @param {boolean} hasChanges - Indicates if there are unpublished changes.
* @param {string} editedBy - The user who edited the content.
* @param {string} editedOn - The timestamp when the content was edited.
* @param {string} publishedBy - The user who last published the content.
* @param {string} publishedOn - The timestamp when the content was last published.
* @returns {string} Publish information based on the provided parameters.
*/
export const getPublishInfo = (intl, hasChanges, editedBy, editedOn, publishedBy, publishedOn) => {
let publishInfoText;
if (hasChanges && editedOn && editedBy) {
publishInfoText = intl.formatMessage(messages.publishInfoDraftSaved, { editedOn, editedBy });
} else if (publishedOn && publishedBy) {
publishInfoText = intl.formatMessage(messages.publishLastPublished, { publishedOn, publishedBy });
} else {
publishInfoText = intl.formatMessage(messages.publishInfoPreviouslyPublished);
}
return publishInfoText;
};
/**
* Get information about the release status.
* @param {Object} intl - The internationalization object.
* @param {string} releaseDate - The release date of the content.
* @param {string} releaseDateFrom - The section name associated with the release date.
* @returns {string|ReactElement} Release information based on the provided parameters.
*/
export const getReleaseInfo = (intl, releaseDate, releaseDateFrom) => {
if (releaseDate) {
return {
isScheduled: true,
releaseDate,
releaseDateFrom,
sectionNameMessage: intl.formatMessage(messages.releaseInfoWithSection, { sectionName: releaseDateFrom }),
};
}
return {
isScheduled: false,
message: intl.formatMessage(messages.releaseInfoUnscheduled),
};
};
/**
* Get the visibility title.
* @param {Object} intl - The internationalization object.
* @param {boolean} releasedToStudents - Indicates if the content is released to students.
* @param {boolean} published - Indicates if the content is published.
* @param {boolean} hasChanges - Indicates if there are unpublished changes.
* @returns {string} The visibility title determined by the provided parameters.
*/
export const getVisibilityTitle = (intl, releasedToStudents, published, hasChanges) => {
if (releasedToStudents && published && !hasChanges) {
return intl.formatMessage(messages.visibilityIsVisibleToTitle);
}
return intl.formatMessage(messages.visibilityWillBeVisibleToTitle);
};
/**
* Get the icon variant based on the provided visibility state and publication status.
* @param {string} visibilityState - The visibility state of the content.
* @param {boolean} published - Indicates if the content is published.
* @param {boolean} hasChanges - Indicates if there are unpublished changes.
* @returns {Object} An object containing the icon component and color variant.
* - iconSrc: The source component for the icon.
* - colorVariant: The color variant for the icon.
*/
export const getIconVariant = (visibilityState, published, hasChanges) => {
const iconVariants = {
[UNIT_VISIBILITY_STATES.staffOnly]: { iconSrc: InfoOutlineIcon, colorVariant: COLORS.BLACK },
[UNIT_VISIBILITY_STATES.live]: { iconSrc: CheckCircleIcon, colorVariant: COLORS.GREEN },
publishedNoChanges: { iconSrc: CheckCircleOutlineIcon, colorVariant: COLORS.BLACK },
publishedWithChanges: { iconSrc: InfoOutlineIcon, colorVariant: COLORS.BLACK },
default: { iconSrc: InfoOutlineIcon, colorVariant: COLORS.BLACK },
};
if (visibilityState in iconVariants) {
return iconVariants[visibilityState];
}
if (published) {
return hasChanges ? iconVariants.publishedWithChanges : iconVariants.publishedNoChanges;
}
return iconVariants.default;
};
/**
* Extracts the clear course unit ID from the given course unit data.
* @param {string} id - The course unit ID.
* @returns {string} The clear course unit ID extracted from the provided data.
*/
export const extractCourseUnitId = (id) => id.match(/block@(.+)$/)[1];

View File

@@ -1010,7 +1010,6 @@
"course-authoring.certificates.sidebar.about2.description-2": "{strongText} delete certificates after a course has started; learners who have already earned certificates will no longer be able to access them.",
"course-authoring.certificates.sidebar.about2.description-2.strong": "Do not",
"course-authoring.certificates.sidebar.learnmore.button": "Learn more about certificates",
"course-authoring.course-unit.add.component.button.text": "Add Component:",
"course-authoring.course-unit.modal.button.text": "Select",
"course-authoring.course-unit.modal.container.title": "Add {componentTitle} component",
"course-authoring.course-unit.modal.container.cancel.button.text": "Cancel",

View File

@@ -1014,32 +1014,6 @@
"course-authoring.course-unit.modal.button.text": "Select",
"course-authoring.course-unit.modal.container.title": "Add {componentTitle} component",
"course-authoring.course-unit.modal.container.cancel.button.text": "Cancel",
"course-authoring.course-unit.sidebar.title.draft.never-published": "Draft (never published)",
"course-authoring.course-unit.sidebar.title.visible.to-staff-only": "Visible to staff only",
"course-authoring.course-unit.sidebar.title.published.live": "Published and live",
"course-authoring.course-unit.sidebar.title.draft.unpublished": "Draft (unpublished changes)",
"course-authoring.course-unit.sidebar.title.published.not-yet-released": "Published (not yet released)",
"course-authoring.course-unit.sidebar.header.unit-location.title": "Unit location",
"course-authoring.course-unit.sidebar.body.note": "Note: Do not hide graded assignments after they have been released.",
"course-authoring.course-unit.publish.info.previously-published": "Previously published",
"course-authoring.course-unit.publish.info.draft.saved": "Draft saved on {editedOn} by {editedBy}",
"course-authoring.course-unit.publish.info.last.published": "Last published {publishedOn} by {publishedBy}",
"course-authoring.course-unit.release.info.unscheduled": "Unscheduled",
"course-authoring.course-unit.release.info.with-unit": "with {sectionName}",
"course-authoring.course-unit.visibility.is-visible-to.title": "IS VISIBLE TO",
"course-authoring.course-unit.visibility.will-be-visible-to.title": "WILL BE VISIBLE TO",
"course-authoring.course-unit.unit-location.title": "LOCATION ID",
"course-authoring.course-unit.unit-location.description": "To create a link to this unit from an HTML component in this course, enter /jump_to_id/{id} as the URL value",
"course-authoring.course-unit.visibility.checkbox.title": "Hide from learners",
"course-authoring.course-unit.visibility.staff-only.title": "Staff only",
"course-authoring.course-unit.visibility.staff-and-learners.title": "Staff and learners",
"course-authoring.course-unit.visibility.has-explicit-staff-lock.text": "with {date} {sectionName}",
"course-authoring.course-unit.action-buttons.publish.title": "Publish",
"course-authoring.course-unit.action-button.discard-changes.title": "Discard changes",
"course-authoring.course-unit.action-button.copy-unit.title": "Copy unit",
"course-authoring.course-unit.status.release.title": "RELEASE",
"course-authoring.course-unit.status.released.title": "RELEASED",
"course-authoring.course-unit.status.scheduled.title": "SCHEDULED",
"course-authoring.course-unit.xblock.button.edit.alt": "Edit Item",
"course-authoring.course-unit.xblock.button.copy.label": "Copy",
"course-authoring.course-unit.xblock.button.duplicate.label": "Duplicate",

View File

@@ -1014,32 +1014,6 @@
"course-authoring.course-unit.modal.button.text": "Select",
"course-authoring.course-unit.modal.container.title": "Add {componentTitle} component",
"course-authoring.course-unit.modal.container.cancel.button.text": "Cancel",
"course-authoring.course-unit.sidebar.title.draft.never-published": "Draft (never published)",
"course-authoring.course-unit.sidebar.title.visible.to-staff-only": "Visible to staff only",
"course-authoring.course-unit.sidebar.title.published.live": "Published and live",
"course-authoring.course-unit.sidebar.title.draft.unpublished": "Draft (unpublished changes)",
"course-authoring.course-unit.sidebar.title.published.not-yet-released": "Published (not yet released)",
"course-authoring.course-unit.sidebar.header.unit-location.title": "Unit location",
"course-authoring.course-unit.sidebar.body.note": "Note: Do not hide graded assignments after they have been released.",
"course-authoring.course-unit.publish.info.previously-published": "Previously published",
"course-authoring.course-unit.publish.info.draft.saved": "Draft saved on {editedOn} by {editedBy}",
"course-authoring.course-unit.publish.info.last.published": "Last published {publishedOn} by {publishedBy}",
"course-authoring.course-unit.release.info.unscheduled": "Unscheduled",
"course-authoring.course-unit.release.info.with-unit": "with {sectionName}",
"course-authoring.course-unit.visibility.is-visible-to.title": "IS VISIBLE TO",
"course-authoring.course-unit.visibility.will-be-visible-to.title": "WILL BE VISIBLE TO",
"course-authoring.course-unit.unit-location.title": "LOCATION ID",
"course-authoring.course-unit.unit-location.description": "To create a link to this unit from an HTML component in this course, enter /jump_to_id/{id} as the URL value",
"course-authoring.course-unit.visibility.checkbox.title": "Hide from learners",
"course-authoring.course-unit.visibility.staff-only.title": "Staff only",
"course-authoring.course-unit.visibility.staff-and-learners.title": "Staff and learners",
"course-authoring.course-unit.visibility.has-explicit-staff-lock.text": "with {date} {sectionName}",
"course-authoring.course-unit.action-buttons.publish.title": "Publish",
"course-authoring.course-unit.action-button.discard-changes.title": "Discard changes",
"course-authoring.course-unit.action-button.copy-unit.title": "Copy unit",
"course-authoring.course-unit.status.release.title": "RELEASE",
"course-authoring.course-unit.status.released.title": "RELEASED",
"course-authoring.course-unit.status.scheduled.title": "SCHEDULED",
"course-authoring.course-unit.xblock.button.edit.alt": "Edit Item",
"course-authoring.course-unit.xblock.button.copy.label": "Copy",
"course-authoring.course-unit.xblock.button.duplicate.label": "Duplicate",

View File

@@ -37,32 +37,6 @@
"course-authoring.course-unit.modal.button.text": "Select",
"course-authoring.course-unit.modal.container.title": "Add {componentTitle} component",
"course-authoring.course-unit.modal.container.cancel.button.text": "Cancel",
"course-authoring.course-unit.sidebar.title.draft.never-published": "Draft (never published)",
"course-authoring.course-unit.sidebar.title.visible.to-staff-only": "Visible to staff only",
"course-authoring.course-unit.sidebar.title.published.live": "Published and live",
"course-authoring.course-unit.sidebar.title.draft.unpublished": "Draft (unpublished changes)",
"course-authoring.course-unit.sidebar.title.published.not-yet-released": "Published (not yet released)",
"course-authoring.course-unit.sidebar.header.unit-location.title": "Unit location",
"course-authoring.course-unit.sidebar.body.note": "Note: Do not hide graded assignments after they have been released.",
"course-authoring.course-unit.publish.info.previously-published": "Previously published",
"course-authoring.course-unit.publish.info.draft.saved": "Draft saved on {editedOn} by {editedBy}",
"course-authoring.course-unit.publish.info.last.published": "Last published {publishedOn} by {publishedBy}",
"course-authoring.course-unit.release.info.unscheduled": "Unscheduled",
"course-authoring.course-unit.release.info.with-unit": "with {sectionName}",
"course-authoring.course-unit.visibility.is-visible-to.title": "IS VISIBLE TO",
"course-authoring.course-unit.visibility.will-be-visible-to.title": "WILL BE VISIBLE TO",
"course-authoring.course-unit.unit-location.title": "LOCATION ID",
"course-authoring.course-unit.unit-location.description": "To create a link to this unit from an HTML component in this course, enter /jump_to_id/{id} as the URL value",
"course-authoring.course-unit.visibility.checkbox.title": "Hide from learners",
"course-authoring.course-unit.visibility.staff-only.title": "Staff only",
"course-authoring.course-unit.visibility.staff-and-learners.title": "Staff and learners",
"course-authoring.course-unit.visibility.has-explicit-staff-lock.text": "with {date} {sectionName}",
"course-authoring.course-unit.action-buttons.publish.title": "Publish",
"course-authoring.course-unit.action-button.discard-changes.title": "Discard changes",
"course-authoring.course-unit.action-button.copy-unit.title": "Copy unit",
"course-authoring.course-unit.status.release.title": "RELEASE",
"course-authoring.course-unit.status.released.title": "RELEASED",
"course-authoring.course-unit.status.scheduled.title": "SCHEDULED",
"course-authoring.course-unit.xblock.button.edit.alt": "Edit Item",
"course-authoring.course-unit.xblock.button.copy.label": "Copy",
"course-authoring.course-unit.xblock.button.duplicate.label": "Duplicate",

View File

@@ -1014,32 +1014,6 @@
"course-authoring.course-unit.modal.button.text": "Select",
"course-authoring.course-unit.modal.container.title": "Add {componentTitle} component",
"course-authoring.course-unit.modal.container.cancel.button.text": "Cancel",
"course-authoring.course-unit.sidebar.title.draft.never-published": "Draft (never published)",
"course-authoring.course-unit.sidebar.title.visible.to-staff-only": "Visible to staff only",
"course-authoring.course-unit.sidebar.title.published.live": "Published and live",
"course-authoring.course-unit.sidebar.title.draft.unpublished": "Draft (unpublished changes)",
"course-authoring.course-unit.sidebar.title.published.not-yet-released": "Published (not yet released)",
"course-authoring.course-unit.sidebar.header.unit-location.title": "Unit location",
"course-authoring.course-unit.sidebar.body.note": "Note: Do not hide graded assignments after they have been released.",
"course-authoring.course-unit.publish.info.previously-published": "Previously published",
"course-authoring.course-unit.publish.info.draft.saved": "Draft saved on {editedOn} by {editedBy}",
"course-authoring.course-unit.publish.info.last.published": "Last published {publishedOn} by {publishedBy}",
"course-authoring.course-unit.release.info.unscheduled": "Unscheduled",
"course-authoring.course-unit.release.info.with-unit": "with {sectionName}",
"course-authoring.course-unit.visibility.is-visible-to.title": "IS VISIBLE TO",
"course-authoring.course-unit.visibility.will-be-visible-to.title": "WILL BE VISIBLE TO",
"course-authoring.course-unit.unit-location.title": "LOCATION ID",
"course-authoring.course-unit.unit-location.description": "To create a link to this unit from an HTML component in this course, enter /jump_to_id/{id} as the URL value",
"course-authoring.course-unit.visibility.checkbox.title": "Hide from learners",
"course-authoring.course-unit.visibility.staff-only.title": "Staff only",
"course-authoring.course-unit.visibility.staff-and-learners.title": "Staff and learners",
"course-authoring.course-unit.visibility.has-explicit-staff-lock.text": "with {date} {sectionName}",
"course-authoring.course-unit.action-buttons.publish.title": "Publish",
"course-authoring.course-unit.action-button.discard-changes.title": "Discard changes",
"course-authoring.course-unit.action-button.copy-unit.title": "Copy unit",
"course-authoring.course-unit.status.release.title": "RELEASE",
"course-authoring.course-unit.status.released.title": "RELEASED",
"course-authoring.course-unit.status.scheduled.title": "SCHEDULED",
"course-authoring.course-unit.xblock.button.edit.alt": "Edit Item",
"course-authoring.course-unit.xblock.button.copy.label": "Copy",
"course-authoring.course-unit.xblock.button.duplicate.label": "Duplicate",

View File

@@ -1014,32 +1014,6 @@
"course-authoring.course-unit.modal.button.text": "Select",
"course-authoring.course-unit.modal.container.title": "Add {componentTitle} component",
"course-authoring.course-unit.modal.container.cancel.button.text": "Cancel",
"course-authoring.course-unit.sidebar.title.draft.never-published": "Draft (never published)",
"course-authoring.course-unit.sidebar.title.visible.to-staff-only": "Visible to staff only",
"course-authoring.course-unit.sidebar.title.published.live": "Published and live",
"course-authoring.course-unit.sidebar.title.draft.unpublished": "Draft (unpublished changes)",
"course-authoring.course-unit.sidebar.title.published.not-yet-released": "Published (not yet released)",
"course-authoring.course-unit.sidebar.header.unit-location.title": "Unit location",
"course-authoring.course-unit.sidebar.body.note": "Note: Do not hide graded assignments after they have been released.",
"course-authoring.course-unit.publish.info.previously-published": "Previously published",
"course-authoring.course-unit.publish.info.draft.saved": "Draft saved on {editedOn} by {editedBy}",
"course-authoring.course-unit.publish.info.last.published": "Last published {publishedOn} by {publishedBy}",
"course-authoring.course-unit.release.info.unscheduled": "Unscheduled",
"course-authoring.course-unit.release.info.with-unit": "with {sectionName}",
"course-authoring.course-unit.visibility.is-visible-to.title": "IS VISIBLE TO",
"course-authoring.course-unit.visibility.will-be-visible-to.title": "WILL BE VISIBLE TO",
"course-authoring.course-unit.unit-location.title": "LOCATION ID",
"course-authoring.course-unit.unit-location.description": "To create a link to this unit from an HTML component in this course, enter /jump_to_id/{id} as the URL value",
"course-authoring.course-unit.visibility.checkbox.title": "Hide from learners",
"course-authoring.course-unit.visibility.staff-only.title": "Staff only",
"course-authoring.course-unit.visibility.staff-and-learners.title": "Staff and learners",
"course-authoring.course-unit.visibility.has-explicit-staff-lock.text": "with {date} {sectionName}",
"course-authoring.course-unit.action-buttons.publish.title": "Publish",
"course-authoring.course-unit.action-button.discard-changes.title": "Discard changes",
"course-authoring.course-unit.action-button.copy-unit.title": "Copy unit",
"course-authoring.course-unit.status.release.title": "RELEASE",
"course-authoring.course-unit.status.released.title": "RELEASED",
"course-authoring.course-unit.status.scheduled.title": "SCHEDULED",
"course-authoring.course-unit.xblock.button.edit.alt": "Edit Item",
"course-authoring.course-unit.xblock.button.copy.label": "Copy",
"course-authoring.course-unit.xblock.button.duplicate.label": "Duplicate",

View File

@@ -1014,32 +1014,6 @@
"course-authoring.course-unit.modal.button.text": "Select",
"course-authoring.course-unit.modal.container.title": "Add {componentTitle} component",
"course-authoring.course-unit.modal.container.cancel.button.text": "Cancel",
"course-authoring.course-unit.sidebar.title.draft.never-published": "Draft (never published)",
"course-authoring.course-unit.sidebar.title.visible.to-staff-only": "Visible to staff only",
"course-authoring.course-unit.sidebar.title.published.live": "Published and live",
"course-authoring.course-unit.sidebar.title.draft.unpublished": "Draft (unpublished changes)",
"course-authoring.course-unit.sidebar.title.published.not-yet-released": "Published (not yet released)",
"course-authoring.course-unit.sidebar.header.unit-location.title": "Unit location",
"course-authoring.course-unit.sidebar.body.note": "Note: Do not hide graded assignments after they have been released.",
"course-authoring.course-unit.publish.info.previously-published": "Previously published",
"course-authoring.course-unit.publish.info.draft.saved": "Draft saved on {editedOn} by {editedBy}",
"course-authoring.course-unit.publish.info.last.published": "Last published {publishedOn} by {publishedBy}",
"course-authoring.course-unit.release.info.unscheduled": "Unscheduled",
"course-authoring.course-unit.release.info.with-unit": "with {sectionName}",
"course-authoring.course-unit.visibility.is-visible-to.title": "IS VISIBLE TO",
"course-authoring.course-unit.visibility.will-be-visible-to.title": "WILL BE VISIBLE TO",
"course-authoring.course-unit.unit-location.title": "LOCATION ID",
"course-authoring.course-unit.unit-location.description": "To create a link to this unit from an HTML component in this course, enter /jump_to_id/{id} as the URL value",
"course-authoring.course-unit.visibility.checkbox.title": "Hide from learners",
"course-authoring.course-unit.visibility.staff-only.title": "Staff only",
"course-authoring.course-unit.visibility.staff-and-learners.title": "Staff and learners",
"course-authoring.course-unit.visibility.has-explicit-staff-lock.text": "with {date} {sectionName}",
"course-authoring.course-unit.action-buttons.publish.title": "Publish",
"course-authoring.course-unit.action-button.discard-changes.title": "Discard changes",
"course-authoring.course-unit.action-button.copy-unit.title": "Copy unit",
"course-authoring.course-unit.status.release.title": "RELEASE",
"course-authoring.course-unit.status.released.title": "RELEASED",
"course-authoring.course-unit.status.scheduled.title": "SCHEDULED",
"course-authoring.course-unit.xblock.button.edit.alt": "Edit Item",
"course-authoring.course-unit.xblock.button.copy.label": "Copy",
"course-authoring.course-unit.xblock.button.duplicate.label": "Duplicate",

View File

@@ -1014,32 +1014,6 @@
"course-authoring.course-unit.modal.button.text": "Select",
"course-authoring.course-unit.modal.container.title": "Add {componentTitle} component",
"course-authoring.course-unit.modal.container.cancel.button.text": "Cancel",
"course-authoring.course-unit.sidebar.title.draft.never-published": "Draft (never published)",
"course-authoring.course-unit.sidebar.title.visible.to-staff-only": "Visible to staff only",
"course-authoring.course-unit.sidebar.title.published.live": "Published and live",
"course-authoring.course-unit.sidebar.title.draft.unpublished": "Draft (unpublished changes)",
"course-authoring.course-unit.sidebar.title.published.not-yet-released": "Published (not yet released)",
"course-authoring.course-unit.sidebar.header.unit-location.title": "Unit location",
"course-authoring.course-unit.sidebar.body.note": "Note: Do not hide graded assignments after they have been released.",
"course-authoring.course-unit.publish.info.previously-published": "Previously published",
"course-authoring.course-unit.publish.info.draft.saved": "Draft saved on {editedOn} by {editedBy}",
"course-authoring.course-unit.publish.info.last.published": "Last published {publishedOn} by {publishedBy}",
"course-authoring.course-unit.release.info.unscheduled": "Unscheduled",
"course-authoring.course-unit.release.info.with-unit": "with {sectionName}",
"course-authoring.course-unit.visibility.is-visible-to.title": "IS VISIBLE TO",
"course-authoring.course-unit.visibility.will-be-visible-to.title": "WILL BE VISIBLE TO",
"course-authoring.course-unit.unit-location.title": "LOCATION ID",
"course-authoring.course-unit.unit-location.description": "To create a link to this unit from an HTML component in this course, enter /jump_to_id/{id} as the URL value",
"course-authoring.course-unit.visibility.checkbox.title": "Hide from learners",
"course-authoring.course-unit.visibility.staff-only.title": "Staff only",
"course-authoring.course-unit.visibility.staff-and-learners.title": "Staff and learners",
"course-authoring.course-unit.visibility.has-explicit-staff-lock.text": "with {date} {sectionName}",
"course-authoring.course-unit.action-buttons.publish.title": "Publish",
"course-authoring.course-unit.action-button.discard-changes.title": "Discard changes",
"course-authoring.course-unit.action-button.copy-unit.title": "Copy unit",
"course-authoring.course-unit.status.release.title": "RELEASE",
"course-authoring.course-unit.status.released.title": "RELEASED",
"course-authoring.course-unit.status.scheduled.title": "SCHEDULED",
"course-authoring.course-unit.xblock.button.edit.alt": "Edit Item",
"course-authoring.course-unit.xblock.button.copy.label": "Copy",
"course-authoring.course-unit.xblock.button.duplicate.label": "Duplicate",

View File

@@ -1014,32 +1014,6 @@
"course-authoring.course-unit.modal.button.text": "Select",
"course-authoring.course-unit.modal.container.title": "Add {componentTitle} component",
"course-authoring.course-unit.modal.container.cancel.button.text": "Cancel",
"course-authoring.course-unit.sidebar.title.draft.never-published": "Draft (never published)",
"course-authoring.course-unit.sidebar.title.visible.to-staff-only": "Visible to staff only",
"course-authoring.course-unit.sidebar.title.published.live": "Published and live",
"course-authoring.course-unit.sidebar.title.draft.unpublished": "Draft (unpublished changes)",
"course-authoring.course-unit.sidebar.title.published.not-yet-released": "Published (not yet released)",
"course-authoring.course-unit.sidebar.header.unit-location.title": "Unit location",
"course-authoring.course-unit.sidebar.body.note": "Note: Do not hide graded assignments after they have been released.",
"course-authoring.course-unit.publish.info.previously-published": "Previously published",
"course-authoring.course-unit.publish.info.draft.saved": "Draft saved on {editedOn} by {editedBy}",
"course-authoring.course-unit.publish.info.last.published": "Last published {publishedOn} by {publishedBy}",
"course-authoring.course-unit.release.info.unscheduled": "Unscheduled",
"course-authoring.course-unit.release.info.with-unit": "with {sectionName}",
"course-authoring.course-unit.visibility.is-visible-to.title": "IS VISIBLE TO",
"course-authoring.course-unit.visibility.will-be-visible-to.title": "WILL BE VISIBLE TO",
"course-authoring.course-unit.unit-location.title": "LOCATION ID",
"course-authoring.course-unit.unit-location.description": "To create a link to this unit from an HTML component in this course, enter /jump_to_id/{id} as the URL value",
"course-authoring.course-unit.visibility.checkbox.title": "Hide from learners",
"course-authoring.course-unit.visibility.staff-only.title": "Staff only",
"course-authoring.course-unit.visibility.staff-and-learners.title": "Staff and learners",
"course-authoring.course-unit.visibility.has-explicit-staff-lock.text": "with {date} {sectionName}",
"course-authoring.course-unit.action-buttons.publish.title": "Publish",
"course-authoring.course-unit.action-button.discard-changes.title": "Discard changes",
"course-authoring.course-unit.action-button.copy-unit.title": "Copy unit",
"course-authoring.course-unit.status.release.title": "RELEASE",
"course-authoring.course-unit.status.released.title": "RELEASED",
"course-authoring.course-unit.status.scheduled.title": "SCHEDULED",
"course-authoring.course-unit.xblock.button.edit.alt": "Edit Item",
"course-authoring.course-unit.xblock.button.copy.label": "Copy",
"course-authoring.course-unit.xblock.button.duplicate.label": "Duplicate",

View File

@@ -1014,32 +1014,6 @@
"course-authoring.course-unit.modal.button.text": "Select",
"course-authoring.course-unit.modal.container.title": "Add {componentTitle} component",
"course-authoring.course-unit.modal.container.cancel.button.text": "Cancel",
"course-authoring.course-unit.sidebar.title.draft.never-published": "Draft (never published)",
"course-authoring.course-unit.sidebar.title.visible.to-staff-only": "Visible to staff only",
"course-authoring.course-unit.sidebar.title.published.live": "Published and live",
"course-authoring.course-unit.sidebar.title.draft.unpublished": "Draft (unpublished changes)",
"course-authoring.course-unit.sidebar.title.published.not-yet-released": "Published (not yet released)",
"course-authoring.course-unit.sidebar.header.unit-location.title": "Unit location",
"course-authoring.course-unit.sidebar.body.note": "Note: Do not hide graded assignments after they have been released.",
"course-authoring.course-unit.publish.info.previously-published": "Previously published",
"course-authoring.course-unit.publish.info.draft.saved": "Draft saved on {editedOn} by {editedBy}",
"course-authoring.course-unit.publish.info.last.published": "Last published {publishedOn} by {publishedBy}",
"course-authoring.course-unit.release.info.unscheduled": "Unscheduled",
"course-authoring.course-unit.release.info.with-unit": "with {sectionName}",
"course-authoring.course-unit.visibility.is-visible-to.title": "IS VISIBLE TO",
"course-authoring.course-unit.visibility.will-be-visible-to.title": "WILL BE VISIBLE TO",
"course-authoring.course-unit.unit-location.title": "LOCATION ID",
"course-authoring.course-unit.unit-location.description": "To create a link to this unit from an HTML component in this course, enter /jump_to_id/{id} as the URL value",
"course-authoring.course-unit.visibility.checkbox.title": "Hide from learners",
"course-authoring.course-unit.visibility.staff-only.title": "Staff only",
"course-authoring.course-unit.visibility.staff-and-learners.title": "Staff and learners",
"course-authoring.course-unit.visibility.has-explicit-staff-lock.text": "with {date} {sectionName}",
"course-authoring.course-unit.action-buttons.publish.title": "Publish",
"course-authoring.course-unit.action-button.discard-changes.title": "Discard changes",
"course-authoring.course-unit.action-button.copy-unit.title": "Copy unit",
"course-authoring.course-unit.status.release.title": "RELEASE",
"course-authoring.course-unit.status.released.title": "RELEASED",
"course-authoring.course-unit.status.scheduled.title": "SCHEDULED",
"course-authoring.course-unit.xblock.button.edit.alt": "Edit Item",
"course-authoring.course-unit.xblock.button.copy.label": "Copy",
"course-authoring.course-unit.xblock.button.duplicate.label": "Duplicate",

View File

@@ -1014,32 +1014,6 @@
"course-authoring.course-unit.modal.button.text": "Select",
"course-authoring.course-unit.modal.container.title": "Add {componentTitle} component",
"course-authoring.course-unit.modal.container.cancel.button.text": "Cancel",
"course-authoring.course-unit.sidebar.title.draft.never-published": "Draft (never published)",
"course-authoring.course-unit.sidebar.title.visible.to-staff-only": "Visible to staff only",
"course-authoring.course-unit.sidebar.title.published.live": "Published and live",
"course-authoring.course-unit.sidebar.title.draft.unpublished": "Draft (unpublished changes)",
"course-authoring.course-unit.sidebar.title.published.not-yet-released": "Published (not yet released)",
"course-authoring.course-unit.sidebar.header.unit-location.title": "Unit location",
"course-authoring.course-unit.sidebar.body.note": "Note: Do not hide graded assignments after they have been released.",
"course-authoring.course-unit.publish.info.previously-published": "Previously published",
"course-authoring.course-unit.publish.info.draft.saved": "Draft saved on {editedOn} by {editedBy}",
"course-authoring.course-unit.publish.info.last.published": "Last published {publishedOn} by {publishedBy}",
"course-authoring.course-unit.release.info.unscheduled": "Unscheduled",
"course-authoring.course-unit.release.info.with-unit": "with {sectionName}",
"course-authoring.course-unit.visibility.is-visible-to.title": "IS VISIBLE TO",
"course-authoring.course-unit.visibility.will-be-visible-to.title": "WILL BE VISIBLE TO",
"course-authoring.course-unit.unit-location.title": "LOCATION ID",
"course-authoring.course-unit.unit-location.description": "To create a link to this unit from an HTML component in this course, enter /jump_to_id/{id} as the URL value",
"course-authoring.course-unit.visibility.checkbox.title": "Hide from learners",
"course-authoring.course-unit.visibility.staff-only.title": "Staff only",
"course-authoring.course-unit.visibility.staff-and-learners.title": "Staff and learners",
"course-authoring.course-unit.visibility.has-explicit-staff-lock.text": "with {date} {sectionName}",
"course-authoring.course-unit.action-buttons.publish.title": "Publish",
"course-authoring.course-unit.action-button.discard-changes.title": "Discard changes",
"course-authoring.course-unit.action-button.copy-unit.title": "Copy unit",
"course-authoring.course-unit.status.release.title": "RELEASE",
"course-authoring.course-unit.status.released.title": "RELEASED",
"course-authoring.course-unit.status.scheduled.title": "SCHEDULED",
"course-authoring.course-unit.xblock.button.edit.alt": "Edit Item",
"course-authoring.course-unit.xblock.button.copy.label": "Copy",
"course-authoring.course-unit.xblock.button.duplicate.label": "Duplicate",

View File

@@ -1014,32 +1014,6 @@
"course-authoring.course-unit.modal.button.text": "Select",
"course-authoring.course-unit.modal.container.title": "Add {componentTitle} component",
"course-authoring.course-unit.modal.container.cancel.button.text": "Cancel",
"course-authoring.course-unit.sidebar.title.draft.never-published": "Draft (never published)",
"course-authoring.course-unit.sidebar.title.visible.to-staff-only": "Visible to staff only",
"course-authoring.course-unit.sidebar.title.published.live": "Published and live",
"course-authoring.course-unit.sidebar.title.draft.unpublished": "Draft (unpublished changes)",
"course-authoring.course-unit.sidebar.title.published.not-yet-released": "Published (not yet released)",
"course-authoring.course-unit.sidebar.header.unit-location.title": "Unit location",
"course-authoring.course-unit.sidebar.body.note": "Note: Do not hide graded assignments after they have been released.",
"course-authoring.course-unit.publish.info.previously-published": "Previously published",
"course-authoring.course-unit.publish.info.draft.saved": "Draft saved on {editedOn} by {editedBy}",
"course-authoring.course-unit.publish.info.last.published": "Last published {publishedOn} by {publishedBy}",
"course-authoring.course-unit.release.info.unscheduled": "Unscheduled",
"course-authoring.course-unit.release.info.with-unit": "with {sectionName}",
"course-authoring.course-unit.visibility.is-visible-to.title": "IS VISIBLE TO",
"course-authoring.course-unit.visibility.will-be-visible-to.title": "WILL BE VISIBLE TO",
"course-authoring.course-unit.unit-location.title": "LOCATION ID",
"course-authoring.course-unit.unit-location.description": "To create a link to this unit from an HTML component in this course, enter /jump_to_id/{id} as the URL value",
"course-authoring.course-unit.visibility.checkbox.title": "Hide from learners",
"course-authoring.course-unit.visibility.staff-only.title": "Staff only",
"course-authoring.course-unit.visibility.staff-and-learners.title": "Staff and learners",
"course-authoring.course-unit.visibility.has-explicit-staff-lock.text": "with {date} {sectionName}",
"course-authoring.course-unit.action-buttons.publish.title": "Publish",
"course-authoring.course-unit.action-button.discard-changes.title": "Discard changes",
"course-authoring.course-unit.action-button.copy-unit.title": "Copy unit",
"course-authoring.course-unit.status.release.title": "RELEASE",
"course-authoring.course-unit.status.released.title": "RELEASED",
"course-authoring.course-unit.status.scheduled.title": "SCHEDULED",
"course-authoring.course-unit.xblock.button.edit.alt": "Edit Item",
"course-authoring.course-unit.xblock.button.copy.label": "Copy",
"course-authoring.course-unit.xblock.button.duplicate.label": "Duplicate",

View File

@@ -1014,32 +1014,6 @@
"course-authoring.course-unit.modal.button.text": "Select",
"course-authoring.course-unit.modal.container.title": "Add {componentTitle} component",
"course-authoring.course-unit.modal.container.cancel.button.text": "Cancel",
"course-authoring.course-unit.sidebar.title.draft.never-published": "Draft (never published)",
"course-authoring.course-unit.sidebar.title.visible.to-staff-only": "Visible to staff only",
"course-authoring.course-unit.sidebar.title.published.live": "Published and live",
"course-authoring.course-unit.sidebar.title.draft.unpublished": "Draft (unpublished changes)",
"course-authoring.course-unit.sidebar.title.published.not-yet-released": "Published (not yet released)",
"course-authoring.course-unit.sidebar.header.unit-location.title": "Unit location",
"course-authoring.course-unit.sidebar.body.note": "Note: Do not hide graded assignments after they have been released.",
"course-authoring.course-unit.publish.info.previously-published": "Previously published",
"course-authoring.course-unit.publish.info.draft.saved": "Draft saved on {editedOn} by {editedBy}",
"course-authoring.course-unit.publish.info.last.published": "Last published {publishedOn} by {publishedBy}",
"course-authoring.course-unit.release.info.unscheduled": "Unscheduled",
"course-authoring.course-unit.release.info.with-unit": "with {sectionName}",
"course-authoring.course-unit.visibility.is-visible-to.title": "IS VISIBLE TO",
"course-authoring.course-unit.visibility.will-be-visible-to.title": "WILL BE VISIBLE TO",
"course-authoring.course-unit.unit-location.title": "LOCATION ID",
"course-authoring.course-unit.unit-location.description": "To create a link to this unit from an HTML component in this course, enter /jump_to_id/{id} as the URL value",
"course-authoring.course-unit.visibility.checkbox.title": "Hide from learners",
"course-authoring.course-unit.visibility.staff-only.title": "Staff only",
"course-authoring.course-unit.visibility.staff-and-learners.title": "Staff and learners",
"course-authoring.course-unit.visibility.has-explicit-staff-lock.text": "with {date} {sectionName}",
"course-authoring.course-unit.action-buttons.publish.title": "Publish",
"course-authoring.course-unit.action-button.discard-changes.title": "Discard changes",
"course-authoring.course-unit.action-button.copy-unit.title": "Copy unit",
"course-authoring.course-unit.status.release.title": "RELEASE",
"course-authoring.course-unit.status.released.title": "RELEASED",
"course-authoring.course-unit.status.scheduled.title": "SCHEDULED",
"course-authoring.course-unit.xblock.button.edit.alt": "Edit Item",
"course-authoring.course-unit.xblock.button.copy.label": "Copy",
"course-authoring.course-unit.xblock.button.duplicate.label": "Duplicate",

View File

@@ -1014,32 +1014,6 @@
"course-authoring.course-unit.modal.button.text": "Select",
"course-authoring.course-unit.modal.container.title": "Add {componentTitle} component",
"course-authoring.course-unit.modal.container.cancel.button.text": "Cancel",
"course-authoring.course-unit.sidebar.title.draft.never-published": "Draft (never published)",
"course-authoring.course-unit.sidebar.title.visible.to-staff-only": "Visible to staff only",
"course-authoring.course-unit.sidebar.title.published.live": "Published and live",
"course-authoring.course-unit.sidebar.title.draft.unpublished": "Draft (unpublished changes)",
"course-authoring.course-unit.sidebar.title.published.not-yet-released": "Published (not yet released)",
"course-authoring.course-unit.sidebar.header.unit-location.title": "Unit location",
"course-authoring.course-unit.sidebar.body.note": "Note: Do not hide graded assignments after they have been released.",
"course-authoring.course-unit.publish.info.previously-published": "Previously published",
"course-authoring.course-unit.publish.info.draft.saved": "Draft saved on {editedOn} by {editedBy}",
"course-authoring.course-unit.publish.info.last.published": "Last published {publishedOn} by {publishedBy}",
"course-authoring.course-unit.release.info.unscheduled": "Unscheduled",
"course-authoring.course-unit.release.info.with-unit": "with {sectionName}",
"course-authoring.course-unit.visibility.is-visible-to.title": "IS VISIBLE TO",
"course-authoring.course-unit.visibility.will-be-visible-to.title": "WILL BE VISIBLE TO",
"course-authoring.course-unit.unit-location.title": "LOCATION ID",
"course-authoring.course-unit.unit-location.description": "To create a link to this unit from an HTML component in this course, enter /jump_to_id/{id} as the URL value",
"course-authoring.course-unit.visibility.checkbox.title": "Hide from learners",
"course-authoring.course-unit.visibility.staff-only.title": "Staff only",
"course-authoring.course-unit.visibility.staff-and-learners.title": "Staff and learners",
"course-authoring.course-unit.visibility.has-explicit-staff-lock.text": "with {date} {sectionName}",
"course-authoring.course-unit.action-buttons.publish.title": "Publish",
"course-authoring.course-unit.action-button.discard-changes.title": "Discard changes",
"course-authoring.course-unit.action-button.copy-unit.title": "Copy unit",
"course-authoring.course-unit.status.release.title": "RELEASE",
"course-authoring.course-unit.status.released.title": "RELEASED",
"course-authoring.course-unit.status.scheduled.title": "SCHEDULED",
"course-authoring.course-unit.xblock.button.edit.alt": "Edit Item",
"course-authoring.course-unit.xblock.button.copy.label": "Copy",
"course-authoring.course-unit.xblock.button.duplicate.label": "Duplicate",