Skip to content
Open
Show file tree
Hide file tree
Changes from 13 commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
9ef5fdc
support react-router v8
Jun 22, 2026
6c3b189
update comments
Jun 22, 2026
352bcd5
update lock file
Jun 22, 2026
0df7e82
fix missing error boundary tests
Jun 23, 2026
f515372
feat: Add ra-router-react-router-v8 adapter package
Jun 23, 2026
d8b41fc
docs: Note deferred unit tests pending React 19 test lane
Jun 23, 2026
cd163ee
Merge branch 'feature/react-router-v8' into react-router-v8-old
Jun 23, 2026
eb6032e
refactor: Drop in-core react-router compat layer on react-router-v8-old
Jun 23, 2026
e85b130
build: Keep react-router ^8.0.0 in the peer/dependency range
Jun 23, 2026
69955ef
build: Remove unused react-router-dom from ra-ui-materialui
Jun 23, 2026
802469e
fix: Restore canonical nested exports for ra-core and ra-ui-materialui
Jun 23, 2026
cb85c7d
build: Exclude ESM-only ra-router-react-router-v8 from update-package…
Jun 23, 2026
61e650d
build: Drop redundant module/moduleResolution from v8 adapter tsconfig
Jun 23, 2026
eb8cabf
feat: Extract react-router adapters into standalone packages
Jun 24, 2026
0868f54
refactor: Export reactRouterProvider from ra-core root only
Jun 24, 2026
060de5e
docs: List reactRouterNextProvider in routing README components
Jun 24, 2026
0cbc7ca
docs: Reference react-router instead of react-router-dom in routing R…
Jun 24, 2026
e1a62e4
feat: Support react-router v6 and v7 in the default adapter
Jun 24, 2026
ff4e528
test: Mirror ra-router-tanstack stories for ra-router-react-router-next
Jun 25, 2026
ba20638
update react-router provider comments
Jun 25, 2026
689e5dd
test: Add unit tests for the React Router v8 adapter
Jun 25, 2026
84ea0f5
test: Apply review feedback to React Router v8 adapter stories
Jun 25, 2026
f8f4b69
test: Mirror ra-router-tanstack stories and tests for ra-router-react…
Jun 25, 2026
fbd10e8
test: Use built-in unsaved-changes guard in React Router v8 adapter s…
Jun 25, 2026
4839c64
test: Mirror routing stories and tests into ra-router-react-router
Jun 25, 2026
2bbf948
test: Mirror ra-router-tanstack spec coverage in ra-router-react-rout…
Jun 25, 2026
aba3a03
test: Mirror the comprehensive provider spec in ra-router-react-router
Jun 25, 2026
3b1e367
fix: Prepend basename in react-router-next Link/Navigate/useNavigate
Jun 25, 2026
42ff222
fix: Prepend basename in react-router Link/Navigate/useNavigate
Jun 25, 2026
12d951c
test: Drop StandaloneWithBasename story from the router adapters
Jun 25, 2026
1345d92
make path relative
Jun 25, 2026
d35e958
refactor: Use tanstack's inline resolvePath for basename in router ad…
Jun 25, 2026
c4b0b0f
refactor: Match tanstack's useNavigate resolvePath comments verbatim
Jun 25, 2026
ffa03ca
refactor: Read basename directly in useNavigate like the tanstack ada…
Jun 26, 2026
095e887
refactor: Mirror tanstack useNavigate branch structure in router adap…
Jun 26, 2026
b726778
refactor: Use tanstack's if/else resolvedTo shape in router adapter Link
Jun 26, 2026
9ad07c5
refactor: Mirror tanstack Navigate string-building in router adapters
Jun 26, 2026
e021aa0
refactor: Spread remaining Navigate props in router adapters
Jun 26, 2026
4f36a84
refactor: Rename provider basename hook and align RouterWrapper context
Jun 26, 2026
6210820
test: Unify click mechanics with the tanstack spec (fireEvent.click)
Jun 26, 2026
87fed4c
test: Align story import order with the tanstack spec
Jun 26, 2026
5aad20a
test: Restore user.click in the embedded navigate-back test (tanstack…
Jun 26, 2026
341bcb4
test: Restore tanstack's data-load comment in nested-routes test
Jun 26, 2026
f714be7
test: Tighten matchPath/useCanBlock parity with the tanstack spec
Jun 26, 2026
3522062
test: Clarify splat URL-decoding test description
Jun 26, 2026
1c5b74e
test: Restore tanstack comment and reword URL-encoded params test
Jun 26, 2026
deee383
test: Align useWarnWhenUnsavedChanges test descriptions with tanstack
Jun 26, 2026
3a7206b
test: Split block vs cancel in useWarnWhenUnsavedChanges tests
Jun 26, 2026
bf8103e
test: Drop inline comments from useWarnWhenUnsavedChanges tests
Jun 26, 2026
5595607
docs: Import Route components from react-router instead of react-rout…
Jun 26, 2026
1fac4d3
docs: Keep BrowserRouter on react-router-dom for v6 compatibility
Jun 26, 2026
95b0fe8
fix: Scope experimental-vm-modules to the react-router-next test run
Jun 26, 2026
0cdb710
chore: Declare react-router as a dependency of ra-router-react-router…
Jun 26, 2026
6db8be0
chore: Drop ra-core from ra-router-react-router-next dev/peer deps
Jun 26, 2026
8d69dd7
chore: Fix router package peer dependencies
Jun 26, 2026
0473c75
chore: Drop unused react-router-dom devDependency from react-admin
Jun 26, 2026
77309a1
chore: Relock after router package dependency changes
Jun 26, 2026
6ccbaaa
test: Harden auth e2e assertions against redirect timing flakiness
Jun 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,10 @@ build-ra-router-tanstack:
@echo "Transpiling ra-router-tanstack files...";
@cd ./packages/ra-router-tanstack && yarn build

build-ra-router-react-router-v8:
@echo "Transpiling ra-router-react-router-v8 files...";
@cd ./packages/ra-router-react-router-v8 && yarn build

build-ra-ui-materialui:
@echo "Transpiling ra-ui-materialui files...";
@cd ./packages/ra-ui-materialui && yarn build
Expand Down Expand Up @@ -129,7 +133,7 @@ update-package-exports: ## Update the package.json "exports" field for all packa
@echo "Updating package exports..."
@yarn tsx ./scripts/update-package-exports.ts

build: build-ra-core build-ra-router-tanstack build-ra-data-fakerest build-ra-ui-materialui build-ra-data-json-server build-ra-data-local-forage build-ra-data-local-storage build-ra-data-simple-rest build-ra-data-graphql build-ra-data-graphql-simple build-ra-input-rich-text build-data-generator build-ra-language-english build-ra-language-french build-ra-i18n-i18next build-ra-i18n-polyglot build-react-admin build-ra-no-code build-create-react-admin update-package-exports ## compile ES6 files to JS
build: build-ra-core build-ra-router-tanstack build-ra-router-react-router-v8 build-ra-data-fakerest build-ra-ui-materialui build-ra-data-json-server build-ra-data-local-forage build-ra-data-local-storage build-ra-data-simple-rest build-ra-data-graphql build-ra-data-graphql-simple build-ra-input-rich-text build-data-generator build-ra-language-english build-ra-language-french build-ra-i18n-i18next build-ra-i18n-polyglot build-react-admin build-ra-no-code build-create-react-admin update-package-exports ## compile ES6 files to JS

typecheck: ## check TypeScript types
@yarn typecheck
Expand Down
57 changes: 57 additions & 0 deletions docs/ReactRouterV8.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
---
layout: default
title: "React Router v8 Integration"
---

# React Router v8 Integration

By default, react-admin is powered by [React Router](https://reactrouter.com/) v6/v7 through its built-in router adapter. React Router v8 merged the former `react-router-dom` package into `react-router` and requires **React 19**, so support for it ships as a separate, opt-in adapter package: `ra-router-react-router-v8`.

Use this package when your application runs on React Router v8.

## Installation

```bash
npm install ra-router-react-router-v8 react-router@^8
# or
yarn add ra-router-react-router-v8 react-router@^8
```

React Router v8 requires React 19. Make sure your application uses `react@^19.2.7` and `react-dom@^19.2.7`.

## Configuration

Set the `<Admin routerProvider>` to `reactRouterV8Provider`:

```tsx
import { Admin, Resource, ListGuesser } from 'react-admin';
import { reactRouterV8Provider } from 'ra-router-react-router-v8';
import { dataProvider } from './dataProvider';

const App = () => (
<Admin
dataProvider={dataProvider}
routerProvider={reactRouterV8Provider}
>
<Resource name="posts" list={ListGuesser} />
<Resource name="comments" list={ListGuesser} />
</Admin>
);

export default App;
```

That's it! React-admin will now use React Router v8 for all routing operations.

## Standalone Mode

When using `reactRouterV8Provider` without an existing React Router, react-admin creates its own hash router automatically (URLs like `/#/posts`). This is called **standalone mode**. This is the simplest setup and requires no additional configuration.

## Embedded Mode

If your application already uses React Router, you can embed react-admin inside it. React-admin detects the existing router context and uses it instead of creating its own.

## When To Use This Package

- Use the **built-in** react-router adapter (no extra package) if your app runs on React Router v6 or v7.
- Use **`ra-router-react-router-v8`** if your app runs on React Router v8 (and therefore React 19).
2 changes: 1 addition & 1 deletion docs/Routing.md
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ export const MyLayout = ({ children }) => {

## Using A Different Router Library

React-admin supports multiple routing libraries through its router abstraction layer. By default, it uses react-router with a [HashRouter](https://reactrouter.com/en/routers/create-hash-router). You can also use [TanStack Router](./TanStackRouter.md) as an alternative.
React-admin supports multiple routing libraries through its router abstraction layer. By default, it uses react-router (v6/v7) with a [HashRouter](https://reactrouter.com/en/routers/create-hash-router). You can also use [TanStack Router](./TanStackRouter.md) or [React Router v8](./ReactRouterV8.md) as an alternative.

To use TanStack Router:

Expand Down
2 changes: 1 addition & 1 deletion packages/ra-core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@
"react": "^18.0.0 || ^19.0.0",
"react-dom": "^18.0.0 || ^19.0.0",
"react-hook-form": "^7.72.0",
"react-router": "^6.28.1 || ^7.1.1",
"react-router": "^6.28.1 || ^7.1.1 || ^8.0.0",
"react-router-dom": "^6.28.1 || ^7.1.1"
},
"dependencies": {
Expand Down
2 changes: 1 addition & 1 deletion packages/ra-core/src/auth/Authenticated.spec.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import * as React from 'react';
import expect from 'expect';
import { render, screen, waitFor } from '@testing-library/react';
import { Routes, Route } from 'react-router-dom';
import { Routes, Route } from 'react-router';

import { memoryStore } from '../store';
import { CoreAdminContext } from '../core';
Expand Down
2 changes: 1 addition & 1 deletion packages/ra-core/src/auth/useAuthenticated.spec.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import * as React from 'react';
import expect from 'expect';
import { render, screen, waitFor } from '@testing-library/react';
import { Routes, Route, useLocation } from 'react-router-dom';
import { Routes, Route, useLocation } from 'react-router';
import { memoryStore } from '../store';

import { useNotificationContext } from '../notification';
Expand Down
2 changes: 1 addition & 1 deletion packages/ra-core/src/auth/useHandleAuthCallback.spec.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import * as React from 'react';
import expect from 'expect';
import { render, screen, waitFor } from '@testing-library/react';
import { Route, Routes } from 'react-router-dom';
import { Route, Routes } from 'react-router';
import { QueryClientProvider, QueryClient } from '@tanstack/react-query';

import { useHandleAuthCallback } from './useHandleAuthCallback';
Expand Down
2 changes: 1 addition & 1 deletion packages/ra-core/src/auth/useLogin.spec.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import * as React from 'react';
import { render, screen, fireEvent, waitFor } from '@testing-library/react';
import { Routes, Route } from 'react-router-dom';
import { Routes, Route } from 'react-router';
import expect from 'expect';

import { CoreAdminContext } from '../core/CoreAdminContext';
Expand Down
2 changes: 1 addition & 1 deletion packages/ra-core/src/auth/useLogout.spec.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import * as React from 'react';
import { render, fireEvent, screen } from '@testing-library/react';
import { Routes, Route } from 'react-router-dom';
import { Routes, Route } from 'react-router';
import { QueryClient } from '@tanstack/react-query';
import expect from 'expect';

Expand Down
2 changes: 1 addition & 1 deletion packages/ra-core/src/auth/useLogoutIfAccessDenied.spec.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import * as React from 'react';
import { useEffect, useState } from 'react';
import expect from 'expect';
import { render, screen, waitFor } from '@testing-library/react';
import { Routes, Route } from 'react-router-dom';
import { Routes, Route } from 'react-router';

import useLogoutIfAccessDenied from './useLogoutIfAccessDenied';
import { AuthContext } from './AuthContext';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {
} from '@testing-library/react';
import expect from 'expect';
import React from 'react';
import { Route, Routes } from 'react-router-dom';
import { Route, Routes } from 'react-router';

import {
AuthProvider,
Expand Down
7 changes: 3 additions & 4 deletions packages/ra-core/src/controller/usePrevNextController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,10 @@ import { useCreatePath } from '../routing';
*
* @example <caption>Custom PrevNextButton</caption>
*
* import { UsePrevNextControllerProps, useTranslate } from 'ra-core';
* import { UsePrevNextControllerProps, useTranslate, LinkBase as Link } from 'ra-core';
* import NavigateBefore from '@mui/icons-material/NavigateBefore';
* import NavigateNext from '@mui/icons-material/NavigateNext';
* import ErrorIcon from '@mui/icons-material/Error';
* import { Link } from 'react-router-dom';
* import { CircularProgress, IconButton } from '@mui/material';
*
* const MyPrevNextButtons = props => {
Expand Down Expand Up @@ -78,7 +77,7 @@ import { useCreatePath } from '../routing';
* <li>
* <IconButton
* component={hasPrev ? Link : undefined}
* to={navigateToPrev}
* to={prevPath}
* aria-label={translate('ra.navigation.previous')}
* disabled={!hasPrev}
* >
Expand All @@ -93,7 +92,7 @@ import { useCreatePath } from '../routing';
* <li>
* <IconButton
* component={hasNext ? Link : undefined}
* to={navigateToNext}
* to={nextPath}
* aria-label={translate('ra.navigation.next')}
* disabled={!hasNext}
* >
Expand Down
2 changes: 1 addition & 1 deletion packages/ra-core/src/core/CoreAdminContext.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ export interface CoreAdminContextProps {
* The router provider for custom routing implementations
*
* Use this to integrate react-admin with alternative routers like TanStack Router.
* Defaults to react-router-dom.
* Defaults to react-router.
*
* @see https://marmelab.com/react-admin/Admin.html#routerprovider
* @example
Expand Down
2 changes: 1 addition & 1 deletion packages/ra-core/src/core/CoreAdminRoutes.spec.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import * as React from 'react';
import { render, screen, waitFor } from '@testing-library/react';
import expect from 'expect';
import { Route } from 'react-router-dom';
import { Route } from 'react-router';

import { CoreAdminContext } from './CoreAdminContext';
import { RouterNavigateFunction, TestMemoryRouter } from '../routing';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import * as React from 'react';
import { render, screen, waitFor } from '@testing-library/react';
import expect from 'expect';
import { Route } from 'react-router-dom';
import { Route } from 'react-router';
import { useResourceDefinitions } from './useResourceDefinitions';

import { CoreAdminContext } from './CoreAdminContext';
Expand Down
2 changes: 1 addition & 1 deletion packages/ra-core/src/dataProvider/useGetRecordId.spec.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import * as React from 'react';
import { useGetRecordId } from './useGetRecordId';
import { render, screen } from '@testing-library/react';
import { Route, Routes } from 'react-router-dom';
import { Route, Routes } from 'react-router';
import { RecordContextProvider } from '../controller';

import { TestMemoryRouter } from '../routing';
Expand Down
12 changes: 3 additions & 9 deletions packages/ra-core/src/form/Form.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,8 @@ import * as yup from 'yup';
import polyglotI18nProvider from 'ra-i18n-polyglot';
import englishMessages from 'ra-language-english';
import fakeRestDataProvider from 'ra-data-fakerest';
import {
Route,
Routes,
useNavigate,
Link,
HashRouter,
useLocation,
} from 'react-router-dom';
import { Route, Routes, useNavigate, useLocation } from 'react-router';
import { HashRouter } from 'react-router-dom';

import { CoreAdminContext } from '../core';
import {
Expand All @@ -32,7 +26,7 @@ import { useInput } from './useInput';
import { required, ValidationError } from './validation';
import { mergeTranslations } from '../i18n';
import { I18nProvider, RaRecord } from '../types';
import { TestMemoryRouter } from '../routing';
import { TestMemoryRouter, LinkBase as Link } from '../routing';
import { useNotificationContext } from '../notification';

export default {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import * as React from 'react';
import expect from 'expect';
import { fireEvent, render, screen, waitFor } from '@testing-library/react';
import { useForm, useFormContext, FormProvider } from 'react-hook-form';
import { Route, Routes } from 'react-router-dom';
import { Route, Routes } from 'react-router';
import { TestMemoryRouter, useNavigate, useParams } from '../routing';

import { useWarnWhenUnsavedChanges } from './useWarnWhenUnsavedChanges';
Expand Down
7 changes: 5 additions & 2 deletions packages/ra-core/src/routing/TestMemoryRouter.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,11 @@ import {
Location,
useNavigate,
NavigateFunction,
} from 'react-router-dom';
import type { InitialEntry } from '@remix-run/router';
} from 'react-router';

// Redefining `InitialEntry` type locally to keep `TestMemoryRouter` compatible across
// react-router v6/v7/v8 because v8 no longer depends on `@remix-run/router`
type InitialEntry = string | Partial<Location>;

const UseLocation = ({
locationCallback,
Expand Down
5 changes: 2 additions & 3 deletions packages/ra-core/src/routing/adapters/reactRouterProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,17 @@ import {
useBlocker,
useMatch,
useInRouterContext,
Link,
Navigate,
Route,
Routes,
Outlet,
matchPath,
createHashRouter,
RouterProvider as ReactRouterProvider,
UNSAFE_DataRouterContext,
UNSAFE_DataRouterStateContext,
type FutureConfig,
} from 'react-router-dom';
} from 'react-router';
import { Link, createHashRouter } from 'react-router-dom';
import type {
RouterProvider,
RouterWrapperProps,
Expand Down
2 changes: 1 addition & 1 deletion packages/ra-core/src/routing/useCreatePath.stories.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import * as React from 'react';
import { Routes, Route } from 'react-router-dom';
import { Routes, Route } from 'react-router';

import { BasenameContextProvider } from './BasenameContextProvider';
import { useBasename } from './useBasename';
Expand Down
2 changes: 1 addition & 1 deletion packages/ra-core/src/routing/useRedirect.spec.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import * as React from 'react';
import { useEffect } from 'react';
import expect from 'expect';
import { fireEvent, render, screen, waitFor } from '@testing-library/react';
import { Routes, Route } from 'react-router-dom';
import { Routes, Route } from 'react-router';
import { CoreAdminContext } from '../core';
import { useLocation } from './useLocation';

Expand Down
9 changes: 2 additions & 7 deletions packages/ra-core/src/routing/useRedirect.stories.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,6 @@
import * as React from 'react';
import {
Link,
Routes,
Route,
useLocation,
useNavigate,
} from 'react-router-dom';
import { Routes, Route, useLocation, useNavigate } from 'react-router';
import { LinkBase as Link } from './LinkBase';

import { FakeBrowserDecorator } from '../storybook//FakeBrowser';
import { useRedirect as useRedirectRA } from './useRedirect';
Expand Down
2 changes: 1 addition & 1 deletion packages/ra-core/src/routing/useScrollToTop.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { useLocation } from './useLocation';
* @see CoreAdminRouter where it's enabled by default
*
* @example // usage in buttons
* import { Link } from 'react-router-dom';
* import { LinkBase as Link } from 'ra-core';
* import { Button } from '@mui/material';
*
* const FooButton = () => (
Expand Down
2 changes: 1 addition & 1 deletion packages/ra-input-rich-text/src/RichTextInput.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import {
} from 'ra-ui-materialui';
import { useWatch } from 'react-hook-form';
import fakeRestDataProvider from 'ra-data-fakerest';
import { Routes, Route } from 'react-router-dom';
import { Routes, Route } from 'react-router';
import Mention from '@tiptap/extension-mention';
import { Editor, ReactRenderer } from '@tiptap/react';
import { computePosition, flip, shift, offset } from '@floating-ui/dom';
Expand Down
1 change: 0 additions & 1 deletion packages/ra-no-code/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-router": "^6.22.0",
"react-router-dom": "^6.22.0",
"typescript": "^5.1.3",
"zshy": "^0.5.0"
},
Expand Down
2 changes: 1 addition & 1 deletion packages/ra-no-code/src/ui/ImportResourceDialog.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import { useDropzone } from 'react-dropzone';
import { useQueryClient } from '@tanstack/react-query';

import { useNotify } from 'react-admin';
import { useNavigate } from 'react-router-dom';
import { useNavigate } from 'react-router';
import { useImportResourceFromCsv } from './useImportResourceFromCsv';

export const ImportResourceDialog = (props: ImportResourceDialogProps) => {
Expand Down
11 changes: 3 additions & 8 deletions packages/ra-no-code/src/ui/ResourceMenuItem.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import React, { forwardRef } from 'react';
import React from 'react';
import { styled } from '@mui/material/styles';
import { MenuItemLink, MenuItemLinkProps } from 'react-admin';
import { LinkBase, MenuItemLink, MenuItemLinkProps } from 'react-admin';
import { IconButton } from '@mui/material';
import SettingsIcon from '@mui/icons-material/Settings';
import DefaultIcon from '@mui/icons-material/ViewList';
import { NavLink, NavLinkProps } from 'react-router-dom';
import { ResourceConfiguration } from '../ResourceConfiguration';

const PREFIX = 'ResourceMenuItem';
Expand Down Expand Up @@ -48,7 +47,7 @@ export const ResourceMenuItem = (
{...rest}
/>
<IconButton
component={NavLinkRef}
component={LinkBase}
to={{
pathname: `/configure/${resource.name}`,
}}
Expand All @@ -60,7 +59,3 @@ export const ResourceMenuItem = (
</Root>
);
};

const NavLinkRef = forwardRef<HTMLAnchorElement, NavLinkProps>((props, ref) => (
<NavLink ref={ref} {...props} />
));
Loading
Loading