fix: update legacy route compatibility to use useNavigate for navigation

This commit is contained in:
Zeke Zhang 2025-03-06 19:22:00 +08:00
parent 9243a1199b
commit f6f5e828d7

View File

@ -14,7 +14,7 @@ import { css } from '@emotion/css';
import { Popover, Tooltip } from 'antd'; import { Popover, Tooltip } from 'antd';
import React, { createContext, FC, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react'; import React, { createContext, FC, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';
import ReactDOM from 'react-dom'; import ReactDOM from 'react-dom';
import { Link, Navigate, Outlet, useLocation } from 'react-router-dom'; import { Link, Navigate, Outlet, useLocation, useNavigate } from 'react-router-dom';
import { import {
ACLRolesCheckProvider, ACLRolesCheckProvider,
AppNotFound, AppNotFound,
@ -34,7 +34,7 @@ import {
useRequest, useRequest,
useSchemaInitializerRender, useSchemaInitializerRender,
useSystemSettings, useSystemSettings,
useToken useToken,
} from '../../../'; } from '../../../';
import { import {
CurrentPageUidProvider, CurrentPageUidProvider,
@ -42,6 +42,7 @@ import {
IsSubPageClosedByPageMenuProvider, IsSubPageClosedByPageMenuProvider,
useCurrentPageUid, useCurrentPageUid,
useLocationNoUpdate, useLocationNoUpdate,
useNavigateNoUpdate,
} from '../../../application/CustomRouterContextProvider'; } from '../../../application/CustomRouterContextProvider';
import { Plugin } from '../../../application/Plugin'; import { Plugin } from '../../../application/Plugin';
import { menuItemInitializer } from '../../../modules/menu/menuItemInitializer'; import { menuItemInitializer } from '../../../modules/menu/menuItemInitializer';
@ -71,7 +72,7 @@ const AllAccessDesktopRoutesContext = createContext<{
refresh: () => void; refresh: () => void;
}>({ }>({
allAccessRoutes: emptyArray, allAccessRoutes: emptyArray,
refresh: () => { }, refresh: () => {},
}); });
AllAccessDesktopRoutesContext.displayName = 'AllAccessDesktopRoutesContext'; AllAccessDesktopRoutesContext.displayName = 'AllAccessDesktopRoutesContext';
@ -631,12 +632,15 @@ const findRouteByMenuSchemaUid = (schemaUid: string, routes: NocoBaseDesktopRout
const LegacyRouteCompat: FC = (props) => { const LegacyRouteCompat: FC = (props) => {
const currentPageUid = useCurrentPageUid(); const currentPageUid = useCurrentPageUid();
const { allAccessRoutes } = useAllAccessDesktopRoutes(); const { allAccessRoutes } = useAllAccessDesktopRoutes();
const route = findRouteByMenuSchemaUid(currentPageUid, allAccessRoutes); const location = useLocation();
const location = useLocationNoUpdate(); const navigate = useNavigate();
if (route) { useEffect(() => {
return <Navigate to={location.pathname.replace(currentPageUid, route.schemaUid) + location.search} />; const route = findRouteByMenuSchemaUid(currentPageUid, allAccessRoutes);
} if (route) {
navigate(location.pathname.replace(currentPageUid, route.schemaUid) + location.search);
}
}, [allAccessRoutes, currentPageUid, location.pathname, location.search, navigate]);
return <>{props.children}</>; return <>{props.children}</>;
}; };