import React from 'react'; import { Link } from 'react-router-dom'; import PropTypes from 'prop-types'; import { breakpoints, Button, useWindowSize } from '@edx/paragon'; import { ChevronLeft, ChevronRight } from '@edx/paragon/icons'; import classNames from 'classnames'; import { injectIntl, intlShape, isRtl, getLocale, } from '@edx/frontend-platform/i18n'; import { useSelector } from 'react-redux'; import { GetCourseExitNavigation } from '../../course-exit'; import UnitButton from './UnitButton'; import SequenceNavigationTabs from './SequenceNavigationTabs'; import { useSequenceNavigationMetadata } from './hooks'; import { useModel } from '../../../../generic/model-store'; import { LOADED } from '../../../data/slice'; import messages from './messages'; const SequenceNavigation = ({ intl, unitId, sequenceId, className, onNavigate, nextHandler, previousHandler, }) => { const sequence = useModel('sequences', sequenceId); const { isFirstUnit, isLastUnit, nextLink, previousLink, } = useSequenceNavigationMetadata(sequenceId, unitId); const { courseId, sequenceStatus, } = useSelector(state => state.courseware); const isLocked = sequenceStatus === LOADED ? ( sequence.gatedContent !== undefined && sequence.gatedContent.gated ) : undefined; const shouldDisplayNotificationTriggerInSequence = useWindowSize().width < breakpoints.small.minWidth; const renderUnitButtons = () => { if (isLocked) { return ( {}} /> ); } if (sequence.unitIds.length === 0 || unitId === null) { return (
); } return ( ); }; const renderPreviousButton = () => { const disabled = isFirstUnit; const prevArrow = isRtl(getLocale()) ? ChevronRight : ChevronLeft; return ( ); }; const renderNextButton = () => { const { exitActive, exitText } = GetCourseExitNavigation(courseId, intl); const buttonText = (isLastUnit && exitText) ? exitText : intl.formatMessage(messages.nextButton); const disabled = isLastUnit && !exitActive; const nextArrow = isRtl(getLocale()) ? ChevronLeft : ChevronRight; return ( ); }; return sequenceStatus === LOADED && ( ); }; SequenceNavigation.propTypes = { intl: intlShape.isRequired, sequenceId: PropTypes.string.isRequired, unitId: PropTypes.string, className: PropTypes.string, onNavigate: PropTypes.func.isRequired, nextHandler: PropTypes.func.isRequired, previousHandler: PropTypes.func.isRequired, }; SequenceNavigation.defaultProps = { className: null, unitId: null, }; export default injectIntl(SequenceNavigation);