import React, { useEffect } from 'react'; import PropTypes from 'prop-types'; import { getConfig } from '@edx/frontend-platform'; import { injectIntl, intlShape } from '@edx/frontend-platform/i18n'; import { Helmet } from 'react-helmet'; import { useDispatch, useSelector } from 'react-redux'; import { Container, Stack } from '@openedx/paragon'; import { useModel } from '../generic/model-store'; import SubHeader from '../generic/sub-header/SubHeader'; import messages from './messages'; import AriaLiveRegion from './AriaLiveRegion'; import { RequestStatus } from '../data/constants'; import ChecklistSection from './ChecklistSection'; import { fetchCourseLaunchQuery, fetchCourseBestPracticesQuery } from './data/thunks'; import getUpdateLinks from './utils'; const CourseChecklist = ({ courseId, // injected, intl, }) => { const dispatch = useDispatch(); const courseDetails = useModel('courseDetails', courseId); const enableQuality = getConfig().ENABLE_CHECKLIST_QUALITY === 'true'; const updateLinks = getUpdateLinks(courseId); useEffect(() => { dispatch(fetchCourseLaunchQuery({ courseId })); dispatch(fetchCourseBestPracticesQuery({ courseId })); }, [courseId]); const { loadingStatus, launchData, bestPracticeData, } = useSelector(state => state.courseChecklist); const { bestPracticeChecklistLoadingStatus, launchChecklistLoadingStatus } = loadingStatus; const isCourseLaunchChecklistLoading = bestPracticeChecklistLoadingStatus === RequestStatus.IN_PROGRESS; const isCourseBestPracticeChecklistLoading = launchChecklistLoadingStatus === RequestStatus.IN_PROGRESS; return ( <> {intl.formatMessage(messages.pageTitle, { headingTitle: intl.formatMessage(messages.headingTitle), courseName: courseDetails?.name, siteName: process.env.SITE_NAME, })} {enableQuality && ( )} ); }; CourseChecklist.propTypes = { courseId: PropTypes.string.isRequired, // injected intl: intlShape.isRequired, }; export default injectIntl(CourseChecklist);