* feat: add language selection chore: update tests so we have less error message test: update test * test: update tests * chore: remove duplicate translation * chore: lint for console * chore: remove comments * chore: make sure the affect url frame refresh after the language selection change * chore: add whole_course_translation and language to courseware meta (#1305) * feat: Add feedback widget UI mock Add unit tests Fix snapshot Clean Sequence component logEvent calls Clean unit test Put feedback widget behind whole course translation flag Fix useFeedbackWidget test * chore: add src and dest translation * feat: first iteration of plugin translation chore: update plugin instruction * feat: Connect FeedbackWidget with backend services (#1325) Connect FeedbackWidget with backend services Move feedback widget to unit translation plugin * feat: Add authentication to WCT feedback endpoints (#1329) * chore: add fetch config and move feedback widget for the plugin chore: rewrite and test the api request chore: rebase chore: update translation feedback chore: test chore: add more tests * chore: rebase * chore: update requested change * chore: update package * chore: upgrade frontend-lib-special-exams and frontend-lib-learning-assistant * chore: update tests * chore: remove unneeded package * chore: update example config * chore: add source-map-loader * fix: feedback widget render error after submit feedback (#1335) * fix: feedback widget render error after submit feedback * fix: widget logic --------- Co-authored-by: Rodrigo Martin <rodrigom_94@hotmail.com>
51 lines
1.4 KiB
JavaScript
51 lines
1.4 KiB
JavaScript
import React, { Suspense } from 'react';
|
|
import PropTypes from 'prop-types';
|
|
|
|
import { useIntl } from '@edx/frontend-platform/i18n';
|
|
|
|
import { useModel } from '@src/generic/model-store';
|
|
import PageLoading from '@src/generic/PageLoading';
|
|
|
|
import messages from '../messages';
|
|
import HonorCode from '../honor-code';
|
|
import LockPaywall from '../lock-paywall';
|
|
import * as hooks from './hooks';
|
|
import { modelKeys } from './constants';
|
|
|
|
const UnitSuspense = ({
|
|
courseId,
|
|
id,
|
|
}) => {
|
|
const { formatMessage } = useIntl();
|
|
const shouldDisplayHonorCode = hooks.useShouldDisplayHonorCode({ courseId, id });
|
|
const unit = useModel(modelKeys.units, id);
|
|
const meta = useModel(modelKeys.coursewareMeta, courseId);
|
|
const shouldDisplayContentGating = (
|
|
meta.contentTypeGatingEnabled && unit.containsContentTypeGatedContent
|
|
);
|
|
|
|
const suspenseComponent = (message, Component) => (
|
|
<Suspense fallback={<PageLoading srMessage={formatMessage(message)} />}>
|
|
<Component courseId={courseId} />
|
|
</Suspense>
|
|
);
|
|
|
|
return (
|
|
<>
|
|
{shouldDisplayContentGating && (
|
|
suspenseComponent(messages.loadingLockedContent, LockPaywall)
|
|
)}
|
|
{shouldDisplayHonorCode && (
|
|
suspenseComponent(messages.loadingHonorCode, HonorCode)
|
|
)}
|
|
</>
|
|
);
|
|
};
|
|
|
|
UnitSuspense.propTypes = {
|
|
courseId: PropTypes.string.isRequired,
|
|
id: PropTypes.string.isRequired,
|
|
};
|
|
|
|
export default UnitSuspense;
|