Skip to content

Commit d04f94f

Browse files
committed
feat(platform): route's data support pass params
1 parent 3e8b93c commit d04f94f

File tree

1 file changed

+22
-6
lines changed

1 file changed

+22
-6
lines changed

packages/platform/src/app/Routes.tsx

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export const RouteStateContext = React.createContext<RouteStateContextData>({
4646
export type CanActivateFn = (route: RouteItem) => true | React.ReactElement;
4747

4848
export interface RouteData {
49-
title?: string | ((params: any) => string);
49+
title?: string;
5050
acl?:
5151
| {
5252
control: Control | Control[];
@@ -68,6 +68,15 @@ export interface NonIndexRouteItem extends Omit<NonIndexRouteObject, 'children'>
6868
}
6969
export type RouteItem = IndexRouteItem | NonIndexRouteItem;
7070

71+
export interface IndexRouteItemInput extends IndexRouteObject {
72+
data?: RouteData | ((params: any) => RouteData);
73+
}
74+
export interface NonIndexRouteItemInput extends Omit<NonIndexRouteObject, 'children'> {
75+
children?: NonIndexRouteItemInput[];
76+
data?: RouteData | ((params: any) => RouteData);
77+
}
78+
export type RouteItemInput = IndexRouteItemInput | NonIndexRouteItemInput;
79+
7180
// I have a great implementation of route caching, but considering the synchronization of data between pages (like modifying list or detail page data), I ended up not introducing route caching.
7281
export const AppRoutes = React.memo(() => {
7382
const ACLGuard = useACLGuard();
@@ -184,17 +193,24 @@ export const AppRoutes = React.memo(() => {
184193
{
185194
path: '/exception/:status',
186195
element: <AppExceptionRoute />,
187-
data: {
188-
title: (params) => params.status,
189-
},
196+
data: (params) => ({
197+
title: params.status,
198+
}),
190199
},
191200
{
192201
path: '*',
193202
element: <Navigate to="/exception/404" replace />,
194203
},
195-
] as RouteItem[],
204+
] as RouteItemInput[],
196205
location
197-
);
206+
) as any as RouteMatch<string, RouteItem>[] | null;
207+
if (matches) {
208+
matches.forEach((matche) => {
209+
if (isFunction(matche.route.data)) {
210+
matche.route.data = matche.route.data(matche.params);
211+
}
212+
});
213+
}
198214

199215
const element: React.ReactNode = (() => {
200216
if (!matches) {

0 commit comments

Comments
 (0)