diff --git a/desktop/app/src/MenuBar.tsx b/desktop/app/src/MenuBar.tsx index fc350f606..0e5b2e65f 100644 --- a/desktop/app/src/MenuBar.tsx +++ b/desktop/app/src/MenuBar.tsx @@ -368,7 +368,7 @@ function getTemplate( { label: 'Trigger deeplink...', click() { - openDeeplinkDialog(store); + openDeeplinkDialog(store, logger); }, }, { diff --git a/desktop/app/src/__tests__/deeplink.node.tsx b/desktop/app/src/__tests__/deeplink.node.tsx index 3c4999d90..3e8c3d884 100644 --- a/desktop/app/src/__tests__/deeplink.node.tsx +++ b/desktop/app/src/__tests__/deeplink.node.tsx @@ -20,6 +20,7 @@ import { useValue, } from 'flipper-plugin'; import {handleDeeplink} from '../deeplink'; +import {Logger} from '../fb-interfaces/Logger'; test('Triggering a deeplink will work', async () => { const linksSeen: any[] = []; @@ -46,7 +47,7 @@ test('Triggering a deeplink will work', async () => { }, }, ); - const {renderer, client, store} = await renderMockFlipperWithPlugin( + const {renderer, client, store, logger} = await renderMockFlipperWithPlugin( definition, ); @@ -54,6 +55,7 @@ test('Triggering a deeplink will work', async () => { await handleDeeplink( store, + logger, `flipper://${client.query.app}/${definition.id}/universe`, ); @@ -88,8 +90,11 @@ test('Triggering a deeplink will work', async () => { }); test('Will throw error on invalid deeplinks', async () => { - // flipper:///support-form/?form=litho + const logger: Logger = { + track: jest.fn(), + } as any; + expect(() => - handleDeeplink(undefined as any, `flipper://test`), + handleDeeplink(undefined as any, logger, `flipper://test`), ).rejects.toThrowErrorMatchingInlineSnapshot(`"Unknown deeplink"`); }); diff --git a/desktop/app/src/deeplink.tsx b/desktop/app/src/deeplink.tsx index de78280d1..c66b7d047 100644 --- a/desktop/app/src/deeplink.tsx +++ b/desktop/app/src/deeplink.tsx @@ -13,6 +13,7 @@ import { setPastedToken, } from './reducers/application'; import {Group, SUPPORTED_GROUPS} from './reducers/supportForm'; +import {Logger} from './fb-interfaces/Logger'; import {Store} from './reducers/index'; import {importDataToStore} from './utils/exportData'; import {selectPlugin} from './reducers/connections'; @@ -26,6 +27,7 @@ const UNKNOWN = 'Unknown deeplink'; */ export async function handleDeeplink( store: Store, + logger: Logger, query: string, ): Promise { const uri = new URL(query); @@ -119,13 +121,13 @@ export const uriComponents = (url: string): Array => { return []; }; -export function openDeeplinkDialog(store: Store) { +export function openDeeplinkDialog(store: Store, logger: Logger) { Dialog.prompt({ title: 'Open deeplink', message: 'Enter a deeplink:', defaultValue: 'flipper://', onConfirm: async (deeplink) => { - await handleDeeplink(store, deeplink); + await handleDeeplink(store, logger, deeplink); return deeplink; }, }); diff --git a/desktop/app/src/dispatcher/__tests__/handleOpenPluginDeeplink.node.tsx b/desktop/app/src/dispatcher/__tests__/handleOpenPluginDeeplink.node.tsx index 81fcc710d..35694d2aa 100644 --- a/desktop/app/src/dispatcher/__tests__/handleOpenPluginDeeplink.node.tsx +++ b/desktop/app/src/dispatcher/__tests__/handleOpenPluginDeeplink.node.tsx @@ -80,7 +80,7 @@ test('Triggering a deeplink will work', async () => { }, }, ); - const {renderer, client, store} = await renderMockFlipperWithPlugin( + const {renderer, client, store, logger} = await renderMockFlipperWithPlugin( definition, ); @@ -88,6 +88,7 @@ test('Triggering a deeplink will work', async () => { await handleDeeplink( store, + logger, `flipper://open-plugin?plugin-id=${definition.id}&client=${client.query.app}&payload=universe`, ); @@ -138,9 +139,8 @@ test('triggering a deeplink without applicable device can wait for a device', as supportedDevices: [{os: 'iOS'}], }, ); - const {renderer, store, createDevice} = await renderMockFlipperWithPlugin( - definition, - ); + const {renderer, store, logger, createDevice} = + await renderMockFlipperWithPlugin(definition); store.dispatch( selectPlugin({selectedPlugin: 'nonexisting', deepLinkPayload: null}), @@ -153,6 +153,7 @@ test('triggering a deeplink without applicable device can wait for a device', as const handlePromise = handleDeeplink( store, + logger, `flipper://open-plugin?plugin-id=${definition.id}&devices=iOS`, ); @@ -214,7 +215,7 @@ test('triggering a deeplink without applicable client can wait for a device', as id: 'pluggy', }, ); - const {renderer, store, createClient, device} = + const {renderer, store, createClient, device, logger} = await renderMockFlipperWithPlugin(definition); store.dispatch( @@ -228,6 +229,7 @@ test('triggering a deeplink without applicable client can wait for a device', as const handlePromise = handleDeeplink( store, + logger, `flipper://open-plugin?plugin-id=${definition.id}&client=clienty`, ); diff --git a/desktop/app/src/dispatcher/application.tsx b/desktop/app/src/dispatcher/application.tsx index 2ed20d7bb..41c796335 100644 --- a/desktop/app/src/dispatcher/application.tsx +++ b/desktop/app/src/dispatcher/application.tsx @@ -21,7 +21,7 @@ import {tryCatchReportPlatformFailures} from '../utils/metrics'; import {handleDeeplink} from '../deeplink'; import {Dialog} from 'flipper-plugin'; -export default (store: Store, _logger: Logger) => { +export default (store: Store, logger: Logger) => { const currentWindow = remote.getCurrentWindow(); const onFocus = () => { setImmediate(() => { @@ -59,7 +59,7 @@ export default (store: Store, _logger: Logger) => { ipcRenderer.on( 'flipper-protocol-handler', (_event: IpcRendererEvent, query: string) => { - handleDeeplink(store, query).catch((e) => { + handleDeeplink(store, logger, query).catch((e) => { console.warn('Failed to handle deeplink', query, e); Dialog.alert({ title: 'Failed to open deeplink',