From f38835ceeefe5bd1afebe4d063140b0cd4807142 Mon Sep 17 00:00:00 2001 From: Arjun Patel Date: Tue, 9 Jun 2026 10:01:22 -0700 Subject: [PATCH] fix: add platform abstraction for deeplink (#251) * fix: add platform abstraction for deeplink This was crashing App.tsx due to the deep link listener calling methods on window which do not exist. * fix: apply CodeRabbit auto-fixes Fixed 1 file(s) based on 1 unresolved review comment. Co-authored-by: CodeRabbit * log error --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: CodeRabbit --- js/desktop/src/App.tsx | 14 ++++++++++---- js/desktop/src/features/network-root.tsx | 5 +---- js/desktop/src/lib/platform/electron.ts | 5 +++++ js/desktop/src/lib/platform/types.ts | 5 +++++ js/desktop/src/lib/platform/web.ts | 7 +++++++ 5 files changed, 28 insertions(+), 8 deletions(-) diff --git a/js/desktop/src/App.tsx b/js/desktop/src/App.tsx index 5a8da62..8a84a3b 100644 --- a/js/desktop/src/App.tsx +++ b/js/desktop/src/App.tsx @@ -56,10 +56,16 @@ function DeepLinkNavigationListener() { const navigate = useNavigate(); useEffect(() => { - window.electronDeepLink.getPending().then((path) => { - if (path) navigate(path); - }); - return window.electronDeepLink.onNavigate((path) => navigate(path)); + platform.deepLink + .getPending() + .then((path) => { + if (path) navigate(path); + }) + .catch((err) => { + logError(err, { scope: 'deepLink.getPending' }); + }); + + return platform.deepLink.onNavigate((path) => navigate(path)); }, [navigate]); return null; diff --git a/js/desktop/src/features/network-root.tsx b/js/desktop/src/features/network-root.tsx index 17d0f00..5b6556a 100644 --- a/js/desktop/src/features/network-root.tsx +++ b/js/desktop/src/features/network-root.tsx @@ -30,8 +30,7 @@ export default function NetworkRoot() { setSearchParams( (prev) => { const params = new URLSearchParams(prev); - if (next === 'open') params.delete('status'); - else params.set('status', next); + params.set('status', next); return params; }, { replace: true }, @@ -56,7 +55,6 @@ export default function NetworkRoot() { return (
- {/* Top bar — stays in place */}
- {/* Scrollable content */}
window.electronApp.setDockBadge(count), getVersion: () => window.electronApp.getVersion(), }, + + deepLink: { + getPending: () => window.electronDeepLink.getPending(), + onNavigate: (cb) => window.electronDeepLink.onNavigate(cb), + }, }; diff --git a/js/desktop/src/lib/platform/types.ts b/js/desktop/src/lib/platform/types.ts index d5874ba..4e21f13 100644 --- a/js/desktop/src/lib/platform/types.ts +++ b/js/desktop/src/lib/platform/types.ts @@ -60,6 +60,11 @@ export interface Platform { setDockBadge: (count: number) => void; getVersion: () => Promise; }; + + deepLink: { + getPending: () => Promise; + onNavigate: (callback: (path: string) => void) => () => void; + }; } export const DESKTOP_DOWNLOAD_URL = 'https://flowylabs.ai/llink/download'; diff --git a/js/desktop/src/lib/platform/web.ts b/js/desktop/src/lib/platform/web.ts index b02a978..11e46b5 100644 --- a/js/desktop/src/lib/platform/web.ts +++ b/js/desktop/src/lib/platform/web.ts @@ -117,4 +117,11 @@ export const webPlatform: Platform = { setDockBadge: applyDockBadge, getVersion: async () => __APP_VERSION__, }, + + deepLink: { + getPending: () => Promise.resolve(null), + onNavigate: (_) => { + return () => {}; + }, + }, };