Co-authored-by: mashal-m <mashal.malik@arbisoft.com> Co-authored-by: Bilal Qamar <59555732+BilalQamar95@users.noreply.github.com>
91 lines
2.8 KiB
JavaScript
91 lines
2.8 KiB
JavaScript
import React from 'react';
|
|
import { Link } from 'react-router-dom';
|
|
import PropTypes from 'prop-types';
|
|
import { Button } from '@openedx/paragon';
|
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
import { faChevronLeft, faChevronRight } from '@fortawesome/free-solid-svg-icons';
|
|
import {
|
|
injectIntl, intlShape, isRtl, getLocale,
|
|
} from '@edx/frontend-platform/i18n';
|
|
import { useSelector } from 'react-redux';
|
|
|
|
import { GetCourseExitNavigation } from '../../course-exit';
|
|
|
|
import UnitNavigationEffortEstimate from './UnitNavigationEffortEstimate';
|
|
import { useSequenceNavigationMetadata } from './hooks';
|
|
import messages from './messages';
|
|
|
|
const UnitNavigation = ({
|
|
intl,
|
|
sequenceId,
|
|
unitId,
|
|
onClickPrevious,
|
|
onClickNext,
|
|
}) => {
|
|
const {
|
|
isFirstUnit, isLastUnit, nextLink, previousLink,
|
|
} = useSequenceNavigationMetadata(sequenceId, unitId);
|
|
const { courseId } = useSelector(state => state.courseware);
|
|
|
|
const renderPreviousButton = () => {
|
|
const disabled = isFirstUnit;
|
|
const prevArrow = isRtl(getLocale()) ? faChevronRight : faChevronLeft;
|
|
return (
|
|
<Button
|
|
variant="outline-secondary"
|
|
className="previous-button mr-2 d-flex align-items-center justify-content-center"
|
|
disabled={disabled}
|
|
onClick={onClickPrevious}
|
|
as={disabled ? undefined : Link}
|
|
to={disabled ? undefined : previousLink}
|
|
>
|
|
<FontAwesomeIcon icon={prevArrow} className="mr-2" size="sm" />
|
|
{intl.formatMessage(messages.previousButton)}
|
|
</Button>
|
|
);
|
|
};
|
|
|
|
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()) ? faChevronLeft : faChevronRight;
|
|
return (
|
|
<Button
|
|
variant="outline-primary"
|
|
className="next-button d-flex align-items-center justify-content-center"
|
|
onClick={onClickNext}
|
|
disabled={disabled}
|
|
as={disabled ? undefined : Link}
|
|
to={disabled ? undefined : nextLink}
|
|
>
|
|
<UnitNavigationEffortEstimate sequenceId={sequenceId} unitId={unitId}>
|
|
{buttonText}
|
|
</UnitNavigationEffortEstimate>
|
|
<FontAwesomeIcon icon={nextArrow} className="ml-2" size="sm" />
|
|
</Button>
|
|
);
|
|
};
|
|
|
|
return (
|
|
<div className="unit-navigation d-flex">
|
|
{renderPreviousButton()}
|
|
{renderNextButton()}
|
|
</div>
|
|
);
|
|
};
|
|
|
|
UnitNavigation.propTypes = {
|
|
intl: intlShape.isRequired,
|
|
sequenceId: PropTypes.string.isRequired,
|
|
unitId: PropTypes.string,
|
|
onClickPrevious: PropTypes.func.isRequired,
|
|
onClickNext: PropTypes.func.isRequired,
|
|
};
|
|
|
|
UnitNavigation.defaultProps = {
|
|
unitId: null,
|
|
};
|
|
|
|
export default injectIntl(UnitNavigation);
|