You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
2.2 KiB
79 lines
2.2 KiB
import { initializeApp } from "./main.common";
|
|
import { App } from "@capacitor/app";
|
|
import router from "./router";
|
|
import { handleApiError } from "./services/api";
|
|
import { loadPlanWithRetry } from "./services/plan";
|
|
import { Capacitor } from '@capacitor/core';
|
|
|
|
const app = initializeApp();
|
|
|
|
// Store initial deep link if app is not ready
|
|
let pendingDeepLink: string | null = null;
|
|
|
|
// Initialize API error handling
|
|
window.addEventListener('unhandledrejection', (event) => {
|
|
if (event.reason?.response) {
|
|
handleApiError(event.reason, event.reason.config?.url || 'unknown');
|
|
}
|
|
});
|
|
|
|
// Create reusable handler function
|
|
const handleDeepLink = async (data: { url: string }) => {
|
|
try {
|
|
if (Capacitor.isNativePlatform()) {
|
|
console.log("[Capacitor Deep Link] START Handler");
|
|
console.log("[Capacitor Deep Link] Received URL:", data.url);
|
|
}
|
|
|
|
// Wait for app to be mounted
|
|
if (!app._container) {
|
|
console.log("[Capacitor Deep Link] Waiting for app mount");
|
|
await new Promise<void>((resolve) => {
|
|
const interval = setInterval(() => {
|
|
if (app._container) {
|
|
clearInterval(interval);
|
|
resolve();
|
|
}
|
|
}, 100);
|
|
});
|
|
}
|
|
|
|
const url = new URL(data.url);
|
|
const path = url.pathname.substring(1);
|
|
|
|
if (Capacitor.isNativePlatform()) {
|
|
console.log("[Capacitor Deep Link] Parsed path:", path);
|
|
}
|
|
|
|
// Map parameterized routes
|
|
const paramRoutes = {
|
|
'claim': /^claim\/(.+)$/,
|
|
};
|
|
|
|
// Check if path matches any parameterized route
|
|
for (const [routeName, pattern] of Object.entries(paramRoutes)) {
|
|
const match = path.match(pattern);
|
|
if (match) {
|
|
if (Capacitor.isNativePlatform()) {
|
|
console.log(`[Capacitor Deep Link] Matched route: ${routeName}, param: ${match[1]}`);
|
|
}
|
|
await router.push({
|
|
name: routeName,
|
|
params: { id: match[1] }
|
|
});
|
|
return;
|
|
}
|
|
}
|
|
|
|
await router.push('/' + path);
|
|
} catch (error) {
|
|
console.error("[Capacitor Deep Link] Error:", error);
|
|
handleApiError(error, 'deep-link');
|
|
}
|
|
};
|
|
|
|
// Register listener
|
|
App.addListener("appUrlOpen", handleDeepLink);
|
|
|
|
// Mount app
|
|
app.mount("#app");
|
|
|