-
Notifications
You must be signed in to change notification settings - Fork 14
Expand file tree
/
Copy pathdeep-link.ts
More file actions
40 lines (31 loc) · 1.09 KB
/
Copy pathdeep-link.ts
File metadata and controls
40 lines (31 loc) · 1.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import type { Router } from "@tanstack/react-router";
const SCHEME = "openconcho:";
function isTauri(): boolean {
return typeof window !== "undefined" && "__TAURI_INTERNALS__" in window;
}
function navigateFromUrl(router: Router<never, never>, raw: string): void {
let parsed: URL;
try {
parsed = new URL(raw);
} catch {
return;
}
if (parsed.protocol !== SCHEME) return;
const host = parsed.hostname || parsed.pathname.replace(/^\/+/, "").split("/")[0];
const search = parsed.search;
if (host === "explore") {
router.navigate({ to: `/explore${search}` as never });
return;
}
const path = parsed.pathname.startsWith("/") ? parsed.pathname : `/${parsed.pathname}`;
router.navigate({ to: `${path}${search}` as never });
}
export async function initDeepLinks(router: Router<never, never>): Promise<void> {
if (!isTauri()) return;
const { onOpenUrl, getCurrent } = await import("@tauri-apps/plugin-deep-link");
const initial = await getCurrent();
if (initial?.length) navigateFromUrl(router, initial[0]);
await onOpenUrl((urls) => {
if (urls[0]) navigateFromUrl(router, urls[0]);
});
}