Skip to content

Commit 06bdff1

Browse files
Muhammad Faraz  MaqsoodFaraz32123
authored andcommitted
fix: use navigate instead of Link from react-dom
getting TypeError: r is not a function. Replace Link with navigate.
1 parent ea0a031 commit 06bdff1

2 files changed

Lines changed: 34 additions & 23 deletions

File tree

src/pages-and-resources/pages/PageSettingButton.jsx

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { useSelector } from 'react-redux';
55
import { useIntl } from '@edx/frontend-platform/i18n';
66
import { Icon, IconButton } from '@openedx/paragon';
77
import { ArrowForward, Settings } from '@openedx/paragon/icons';
8-
import { useNavigate, Link } from 'react-router-dom';
8+
import { useNavigate } from 'react-router-dom';
99

1010
import { getWaffleFlags } from '../../data/selectors';
1111
import messages from '../messages';
@@ -44,14 +44,13 @@ const PageSettingButton = ({
4444

4545
if (determineLinkDestination) {
4646
return (
47-
<Link to={determineLinkDestination}>
48-
<IconButton
49-
src={ArrowForward}
50-
iconAs={Icon}
51-
size="inline"
52-
alt={formatMessage(messages.settings)}
53-
/>
54-
</Link>
47+
<IconButton
48+
src={ArrowForward}
49+
iconAs={Icon}
50+
size="inline"
51+
alt={formatMessage(messages.settings)}
52+
onClick={() => navigate(determineLinkDestination)}
53+
/>
5554
);
5655
}
5756

src/pages-and-resources/pages/PageSettingButton.test.jsx

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { screen, render } from '@testing-library/react';
22
import { useSelector } from 'react-redux';
3+
import { useNavigate } from 'react-router-dom';
34
import { IntlProvider } from '@edx/frontend-platform/i18n';
45
import PageSettingButton from './PageSettingButton';
56

@@ -43,51 +44,62 @@ const renderComponent = (props = {}) => render(
4344
);
4445

4546
describe('PageSettingButton', () => {
47+
const navigate = jest.fn();
48+
4649
beforeEach(() => {
4750
useSelector.mockClear();
51+
useNavigate.mockReturnValue(navigate);
4852
});
4953

50-
it('renders the settings button with the new textbooks page link when useNewTextbooksPage is true', () => {
54+
it('navigates to the new textbooks page link when useNewTextbooksPage is true', () => {
5155
useSelector.mockReturnValue(mockWaffleFlags);
5256

5357
renderComponent({ legacyLink: 'http://legacylink.com/textbooks' });
5458

55-
const linkElement = screen.getByRole('link');
56-
expect(linkElement).toHaveAttribute('href', `/course/${defaultProps.courseId}/page-id`);
59+
const buttonElement = screen.getByRole('button', { name: /settings/i });
60+
buttonElement.click();
61+
62+
expect(navigate).toHaveBeenCalledWith(`/course/${defaultProps.courseId}/page-id`);
5763
});
5864

59-
it('does not render link when legacyLink prop value incorrect', () => {
65+
it('does not render button when legacyLink prop value incorrect', () => {
6066
useSelector.mockReturnValue(mockWaffleFlags);
6167

6268
renderComponent({ legacyLink: 'http://legacylink.com/some-value' });
6369

64-
expect(screen.queryByRole('link')).toBeNull();
70+
expect(screen.queryByRole('IconButton', { name: /settings/i })).toBeNull();
6571
});
6672

67-
it('renders the settings button with the legacy link when useNewTextbooksPage is false', () => {
73+
it('navigates to the legacy link when useNewTextbooksPage is false', () => {
6874
useSelector.mockReturnValue({ ...mockWaffleFlags, useNewTextbooksPage: false });
6975

7076
renderComponent({ legacyLink: 'http://legacylink.com/textbooks' });
7177

72-
const linkElement = screen.getByRole('link');
73-
expect(linkElement).toHaveAttribute('href', 'http://legacylink.com/textbooks');
78+
const buttonElement = screen.getByRole('button', { name: /settings/i });
79+
buttonElement.click();
80+
81+
expect(navigate).toHaveBeenCalledWith('http://legacylink.com/textbooks');
7482
});
7583

76-
it('renders the settings button with the new custom pages link when useNewCustomPages is true', () => {
84+
it('navigates to the new custom pages link when useNewCustomPages is true', () => {
7785
useSelector.mockReturnValue(mockWaffleFlags);
7886

7987
renderComponent();
8088

81-
const linkElement = screen.getByRole('link');
82-
expect(linkElement).toHaveAttribute('href', `/course/${defaultProps.courseId}/page-id`);
89+
const buttonElement = screen.getByRole('button', { name: /settings/i });
90+
buttonElement.click();
91+
92+
expect(navigate).toHaveBeenCalledWith(`/course/${defaultProps.courseId}/page-id`);
8393
});
8494

85-
it('renders the settings button with the legacy link when useNewCustomPages is false', () => {
95+
it('navigates to the legacy link when useNewCustomPages is false', () => {
8696
useSelector.mockReturnValue({ ...mockWaffleFlags, useNewCustomPages: false });
8797

8898
renderComponent();
8999

90-
const linkElement = screen.getByRole('link');
91-
expect(linkElement).toHaveAttribute('href', defaultProps.legacyLink);
100+
const buttonElement = screen.getByRole('button', { name: /settings/i });
101+
buttonElement.click();
102+
103+
expect(navigate).toHaveBeenCalledWith(defaultProps.legacyLink);
92104
});
93105
});

0 commit comments

Comments
 (0)