mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-20 01:38:19 +08:00
ui-next: url builder
This commit is contained in:
3 files changed
+34
No files matched your search
@@ -11,6 +11,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"koa2-connect": "^1.0.2",
|
"koa2-connect": "^1.0.2",
|
||||||
|
"path-to-regexp": "^8.4.2",
|
||||||
"react": "^19.2.5",
|
"react": "^19.2.5",
|
||||||
"react-dom": "^19.2.5"
|
"react-dom": "^19.2.5"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
import { usePageData } from '../context/pageData';
|
||||||
|
|
||||||
|
export function useRouteMap(): Record<string, string> {
|
||||||
|
const data = usePageData();
|
||||||
|
return data.routeMap;
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
import { compile } from 'path-to-regexp';
|
||||||
|
import { useCallback } from 'react';
|
||||||
|
import { useRouteMap } from './useRouteMap';
|
||||||
|
|
||||||
|
function buildUrl(pattern: string, params: Record<string, string> = {}): string {
|
||||||
|
try {
|
||||||
|
return compile(pattern)(params);
|
||||||
|
} catch (err) {
|
||||||
|
console.warn(`[Hydro] Failed to build URL for pattern "${pattern}":`, err);
|
||||||
|
return '#';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function useUrl() {
|
||||||
|
const routeMap = useRouteMap();
|
||||||
|
|
||||||
|
const url = useCallback((name: string, params: Record<string, string> = {}): string => {
|
||||||
|
const pattern = routeMap[name];
|
||||||
|
if (!pattern) {
|
||||||
|
console.warn(`[Hydro] Unknown route: ${name}`);
|
||||||
|
return '#';
|
||||||
|
}
|
||||||
|
return buildUrl(pattern, params);
|
||||||
|
}, [routeMap]);
|
||||||
|
|
||||||
|
return url;
|
||||||
|
}
|
||||||
Reference in new issue
Block a user