Migrate from Redux to React Query and React Context. This modernizes state management while maintaining all existing functionality. All the redux code and files were removed, including all redux and related packages.
62 lines
1.8 KiB
JavaScript
62 lines
1.8 KiB
JavaScript
/* eslint-disable max-len */
|
|
import React, { useMemo } from 'react';
|
|
import PropTypes from 'prop-types';
|
|
import { Hyperlink } from '@openedx/paragon';
|
|
import { useIntl } from '@edx/frontend-platform/i18n';
|
|
|
|
import { utilHooks, useCourseData } from 'hooks';
|
|
import Banner from 'components/Banner';
|
|
import messages from './messages';
|
|
|
|
export const CourseBanner = ({ cardId }) => {
|
|
const { formatMessage } = useIntl();
|
|
const courseData = useCourseData(cardId);
|
|
const {
|
|
isVerified = false,
|
|
isAuditAccessExpired = false,
|
|
coursewareAccess = {},
|
|
} = useMemo(() => ({
|
|
isVerified: courseData.enrollment?.isVerified,
|
|
isAuditAccessExpired: courseData.enrollment?.isAuditAccessExpired,
|
|
coursewareAccess: courseData.enrollment?.coursewareAccess || {},
|
|
}), [courseData]);
|
|
const courseRun = courseData?.courseRun || {};
|
|
const formatDate = utilHooks.useFormatDate();
|
|
|
|
const { hasUnmetPrerequisites, isStaff, isTooEarly } = coursewareAccess;
|
|
|
|
if (isVerified) { return null; }
|
|
|
|
return (
|
|
<>
|
|
{isAuditAccessExpired
|
|
&& (
|
|
<Banner>
|
|
{formatMessage(messages.auditAccessExpired)}
|
|
{' '}
|
|
<Hyperlink isInline destination="">
|
|
{formatMessage(messages.findAnotherCourse)}
|
|
</Hyperlink>
|
|
</Banner>
|
|
)}
|
|
|
|
{(!isStaff && isTooEarly && courseRun.startDate) && (
|
|
<Banner>
|
|
{formatMessage(messages.courseHasNotStarted, {
|
|
startDate: formatDate(courseRun.startDate),
|
|
})}
|
|
</Banner>
|
|
)}
|
|
|
|
{(!isStaff && hasUnmetPrerequisites) && (
|
|
<Banner>{formatMessage(messages.prerequisitesNotMet)}</Banner>
|
|
)}
|
|
</>
|
|
);
|
|
};
|
|
CourseBanner.propTypes = {
|
|
cardId: PropTypes.string.isRequired,
|
|
};
|
|
|
|
export default CourseBanner;
|