Skip to content

Commit 6740fe2

Browse files
committed
Wire transformUrl hook with preloading
1 parent 1e19fd2 commit 6740fe2

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

src/data/events.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import type { RouterContext } from "../types.js";
44
import { actions } from "./action.js";
55
import { mockBase } from "../utils.js";
66

7-
export function setupNativeEvents(preload = true, explicitLinks = false, actionBase = "/_server") {
7+
export function setupNativeEvents(preload = true, explicitLinks = false, actionBase = "/_server", transformUrl?: (url: string) => string) {
88
return (router: RouterContext) => {
99
const basePath = router.base.path();
1010
const navigateFromRoute = router.navigatorFactory(router.base);
@@ -71,6 +71,9 @@ export function setupNativeEvents(preload = true, explicitLinks = false, actionB
7171
const res = handleAnchor(evt as MouseEvent);
7272
if (!res) return;
7373
const [a, url] = res;
74+
if (typeof transformUrl === "function") {
75+
url.pathname = transformUrl(url.pathname);
76+
}
7477
if (!preloadTimeout[url.pathname])
7578
router.preloadRoute(url, a.getAttribute("preload") !== "false");
7679
}
@@ -79,6 +82,9 @@ export function setupNativeEvents(preload = true, explicitLinks = false, actionB
7982
const res = handleAnchor(evt as MouseEvent);
8083
if (!res) return;
8184
const [a, url] = res;
85+
if (typeof transformUrl === "function") {
86+
url.pathname = transformUrl(url.pathname);
87+
}
8288
if (preloadTimeout[url.pathname]) return;
8389
preloadTimeout[url.pathname] = setTimeout(() => {
8490
router.preloadRoute(url, a.getAttribute("preload") !== "false");
@@ -90,6 +96,9 @@ export function setupNativeEvents(preload = true, explicitLinks = false, actionB
9096
const res = handleAnchor(evt as MouseEvent);
9197
if (!res) return;
9298
const [, url] = res;
99+
if (typeof transformUrl === "function") {
100+
url.pathname = transformUrl(url.pathname);
101+
}
93102
if (preloadTimeout[url.pathname]) {
94103
clearTimeout(preloadTimeout[url.pathname]);
95104
delete preloadTimeout[url.pathname];

src/routers/Router.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export function Router(props: RouterProps): JSX.Element {
3939
}
4040
})
4141
),
42-
create: setupNativeEvents(props.preload, props.explicitLinks, props.actionBase),
42+
create: setupNativeEvents(props.preload, props.explicitLinks, props.actionBase, props.transformUrl),
4343
utils: {
4444
go: delta => window.history.go(delta),
4545
beforeLeave

0 commit comments

Comments
 (0)