Add 'apps/mobile/' from commit '5fa30f365f21531094cd4d2045042bb4f1370ac3'
git-subtree-dir: apps/mobile git-subtree-mainline:86f8987dffgit-subtree-split:5fa30f365f
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
import * as Linking from "expo-linking";
|
||||
|
||||
export type ShortcutAction = "clock-in" | "clock-out" | "open-timer";
|
||||
|
||||
export type ParsedShortcut = {
|
||||
action: ShortcutAction;
|
||||
title: string;
|
||||
clientId: string;
|
||||
};
|
||||
|
||||
function queryParam(value: string | string[] | undefined): string {
|
||||
if (Array.isArray(value)) return value[0] ?? "";
|
||||
return value ?? "";
|
||||
}
|
||||
|
||||
function normalizeShortcutPath(hostname: string | null, path: string | null): string | null {
|
||||
const host = (hostname ?? "").replace(/^\/+|\/+$/g, "");
|
||||
const segment = (path ?? "").replace(/^\/+|\/+$/g, "");
|
||||
|
||||
if (host === "shortcuts" && segment) {
|
||||
return segment;
|
||||
}
|
||||
|
||||
const combined = [host, segment].filter(Boolean).join("/");
|
||||
const match = combined.match(/(?:^|\/)shortcuts\/(clock-in|clock-out)$/);
|
||||
if (match?.[1]) return match[1];
|
||||
|
||||
if (combined === "clock-in" || combined === "clock-out") {
|
||||
return combined;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/** Parse `beenvoice://shortcuts/clock-in` and related URLs from Shortcuts / Siri. */
|
||||
export function parseShortcutUrl(url: string | null | undefined): ParsedShortcut | null {
|
||||
if (!url) return null;
|
||||
|
||||
const parsed = Linking.parse(url);
|
||||
if (parsed.scheme !== "beenvoice") return null;
|
||||
|
||||
const path = (parsed.path ?? "").replace(/^\/+/, "");
|
||||
const host = parsed.hostname ?? "";
|
||||
|
||||
if (path === "timer" || host === "timer") {
|
||||
return { action: "open-timer", title: "", clientId: "" };
|
||||
}
|
||||
|
||||
const shortcutAction = normalizeShortcutPath(host, path);
|
||||
if (shortcutAction === "clock-in" || shortcutAction === "clock-out") {
|
||||
return {
|
||||
action: shortcutAction,
|
||||
title: queryParam(parsed.queryParams?.title),
|
||||
clientId: queryParam(parsed.queryParams?.clientId),
|
||||
};
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
export const SHORTCUT_URLS = {
|
||||
timer: "beenvoice://timer",
|
||||
openTimer: "beenvoice://timer",
|
||||
clockIn: "beenvoice://shortcuts/clock-in",
|
||||
clockOut: "beenvoice://shortcuts/clock-out",
|
||||
} as const;
|
||||
Reference in New Issue
Block a user