Files
frontend-app-learning/src/courseware/course/sequence/SequenceContent.jsx
Bilal Qamar b3d33667d4 Updated frontend-build to v12 (#962)
* feat: rebase previous frontend-build upgrade

* chore: make welcome message to default to empty
2023-01-30 12:20:07 -05:00

80 lines
1.8 KiB
JavaScript

import React, { Suspense, useEffect } from 'react';
import PropTypes from 'prop-types';
import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
import PageLoading from '../../../generic/PageLoading';
import { useModel } from '../../../generic/model-store';
import messages from './messages';
import Unit from './Unit';
const ContentLock = React.lazy(() => import('./content-lock'));
const SequenceContent = ({
gated,
intl,
courseId,
sequenceId,
unitId,
unitLoadedHandler,
}) => {
const sequence = useModel('sequences', sequenceId);
// Go back to the top of the page whenever the unit or sequence changes.
useEffect(() => {
global.scrollTo(0, 0);
}, [sequenceId, unitId]);
if (gated) {
return (
<Suspense
fallback={(
<PageLoading
srMessage={intl.formatMessage(messages.loadingLockedContent)}
/>
)}
>
<ContentLock
courseId={courseId}
sequenceTitle={sequence.title}
prereqSectionName={sequence.gatedContent.prereqSectionName}
prereqId={sequence.gatedContent.prereqId}
/>
</Suspense>
);
}
const unit = useModel('units', unitId);
if (!unitId || !unit) {
return (
<div>
{intl.formatMessage(messages.noContent)}
</div>
);
}
return (
<Unit
courseId={courseId}
format={sequence.format}
key={unitId}
id={unitId}
onLoaded={unitLoadedHandler}
/>
);
};
SequenceContent.propTypes = {
gated: PropTypes.bool.isRequired,
courseId: PropTypes.string.isRequired,
sequenceId: PropTypes.string.isRequired,
unitId: PropTypes.string,
unitLoadedHandler: PropTypes.func.isRequired,
intl: intlShape.isRequired,
};
SequenceContent.defaultProps = {
unitId: null,
};
export default injectIntl(SequenceContent);