import React from 'react'; import PropTypes from 'prop-types'; import { useIntl } from '@edx/frontend-platform/i18n'; import { Button, Container, Layout, } from '@edx/paragon'; import { Add as AddIcon } from '@edx/paragon/icons'; import { useSelector } from 'react-redux'; import { useModel } from '../generic/model-store'; import { getProcessingNotification } from '../generic/processing-notification/data/selectors'; import ProcessingNotification from '../generic/processing-notification'; import SubHeader from '../generic/sub-header/SubHeader'; import InternetConnectionAlert from '../generic/internet-connection-alert'; import { RequestStatus } from '../data/constants'; import CourseHandouts from './course-handouts/CourseHandouts'; import CourseUpdate from './course-update/CourseUpdate'; import DeleteModal from './delete-modal/DeleteModal'; import UpdateForm from './update-form/UpdateForm'; import { REQUEST_TYPES } from './constants'; import messages from './messages'; import { useCourseUpdates } from './hooks'; import { getLoadingStatuses, getSavingStatuses } from './data/selectors'; import { matchesAnyStatus } from './utils'; import getPageHeadTitle from '../generic/utils'; const CourseUpdates = ({ courseId }) => { const intl = useIntl(); const courseDetails = useModel('courseDetails', courseId); document.title = getPageHeadTitle(courseDetails?.name, intl.formatMessage(messages.headingTitle)); const { requestType, courseUpdates, courseHandouts, courseUpdatesInitialValues, isMainFormOpen, isInnerFormOpen, isUpdateFormOpen, isDeleteModalOpen, closeUpdateForm, closeDeleteModal, handleUpdatesSubmit, handleOpenUpdateForm, handleOpenDeleteForm, handleDeleteUpdateSubmit, } = useCourseUpdates({ courseId }); const { isShow: isShowProcessingNotification, title: processingNotificationTitle, } = useSelector(getProcessingNotification); const loadingStatuses = useSelector(getLoadingStatuses); const savingStatuses = useSelector(getSavingStatuses); const anyStatusFailed = matchesAnyStatus({ ...loadingStatuses, ...savingStatuses }, RequestStatus.FAILED); const anyStatusInProgress = matchesAnyStatus({ ...loadingStatuses, ...savingStatuses }, RequestStatus.IN_PROGRESS); const anyStatusPending = matchesAnyStatus({ ...loadingStatuses, ...savingStatuses }, RequestStatus.PENDING); return ( <>
handleOpenUpdateForm(REQUEST_TYPES.add_new_update)} disabled={isUpdateFormOpen} > {intl.formatMessage(messages.newUpdateButton)} )} />
{isMainFormOpen && ( )}
{courseUpdates.length ? courseUpdates.map((courseUpdate, index) => ( isInnerFormOpen(courseUpdate.id) ? ( ) : ( handleOpenUpdateForm(REQUEST_TYPES.edit_update, courseUpdate)} onDelete={() => handleOpenDeleteForm(courseUpdate)} isDisabledButtons={isUpdateFormOpen} /> ))) : null}
handleOpenUpdateForm(REQUEST_TYPES.edit_handouts)} isDisabledButtons={isUpdateFormOpen} />
{isShowProcessingNotification && ( )}
null} />
); }; CourseUpdates.propTypes = { courseId: PropTypes.string.isRequired, }; export default CourseUpdates;