+
{renderPreviousButton()}
{renderNextButton()}
diff --git a/src/courseware/course/sequence/sequence-navigation/UnitNavigation.test.jsx b/src/courseware/course/sequence/sequence-navigation/UnitNavigation.test.jsx
index 26e3034f..e812d67d 100644
--- a/src/courseware/course/sequence/sequence-navigation/UnitNavigation.test.jsx
+++ b/src/courseware/course/sequence/sequence-navigation/UnitNavigation.test.jsx
@@ -5,6 +5,13 @@ import {
} from '../../../../setupTest';
import UnitNavigation from './UnitNavigation';
+const mockNavigate = jest.fn();
+
+jest.mock('react-router-dom', () => ({
+ ...jest.requireActual('react-router-dom'),
+ useNavigate: () => mockNavigate,
+}));
+
describe('Unit Navigation', () => {
let mockData;
const courseMetadata = Factory.build('courseMetadata');
@@ -56,6 +63,26 @@ describe('Unit Navigation', () => {
expect(onClickNext).toHaveBeenCalledTimes(1);
});
+ it('when clicked it calls navigate when is at the top', () => {
+ const onClickPrevious = jest.fn();
+ const onClickNext = jest.fn();
+
+ render(
, { wrapWithRouter: true });
+
+ fireEvent.click(screen.getByRole('button', { name: /previous/i }));
+ expect(onClickPrevious).toHaveBeenCalledTimes(1);
+ expect(mockNavigate).toHaveBeenCalledTimes(1);
+
+ fireEvent.click(screen.getByRole('button', { name: /next/i }));
+ expect(onClickNext).toHaveBeenCalledTimes(1);
+ expect(mockNavigate).toHaveBeenCalledTimes(2);
+ });
+
it('has the navigation buttons enabled for the non-corner unit in the sequence', () => {
render(
, { wrapWithRouter: true });
diff --git a/src/courseware/course/sequence/sequence-navigation/generic/NextButton.jsx b/src/courseware/course/sequence/sequence-navigation/generic/NextButton.jsx
index 40de2c51..b9f00da3 100644
--- a/src/courseware/course/sequence/sequence-navigation/generic/NextButton.jsx
+++ b/src/courseware/course/sequence/sequence-navigation/generic/NextButton.jsx
@@ -1,7 +1,12 @@
import PropTypes from 'prop-types';
-import { Link, useLocation } from 'react-router-dom';
-import { Button } from '@openedx/paragon';
-import { ChevronLeft, ChevronRight } from '@openedx/paragon/icons';
+import { Link, useLocation, useNavigate } from 'react-router-dom';
+import { Button, IconButton, Icon } from '@openedx/paragon';
+import {
+ ArrowBack,
+ ArrowForward,
+ ChevronLeft,
+ ChevronRight,
+} from '@openedx/paragon/icons';
import { isRtl, getLocale } from '@edx/frontend-platform/i18n';
import UnitNavigationEffortEstimate from '../UnitNavigationEffortEstimate';
@@ -14,8 +19,9 @@ const NextButton = ({
buttonStyle,
disabled,
hasEffortEstimate,
+ isAtTop,
}) => {
- const nextArrow = isRtl(getLocale()) ? ChevronLeft : ChevronRight;
+ const navigate = useNavigate();
const { pathname } = useLocation();
const navLink = pathname.startsWith('/preview') ? `/preview${nextLink}` : nextLink;
const buttonContent = hasEffortEstimate ? (
@@ -24,6 +30,34 @@ const NextButton = ({
) : buttonText;
+ const getNextArrow = () => {
+ if (isAtTop) {
+ return isRtl(getLocale()) ? ArrowBack : ArrowForward;
+ }
+ return isRtl(getLocale()) ? ChevronLeft : ChevronRight;
+ };
+
+ const nextArrow = getNextArrow();
+
+ const onClick = () => {
+ navigate(navLink);
+ onClickHandler();
+ };
+
+ if (isAtTop) {
+ return (
+
+ );
+ }
+
return (