From 60ddad7e08b0300916cb1e429ffa9261abd1df21 Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Tue, 21 Apr 2020 06:31:52 -0700 Subject: [PATCH] Fix deeplink parsing issue and device plugin highlighting Summary: This diff fixes an issue where the selected device was not correctly updated when selecting a device plugin, causing the wrong plugin, or none at all, to be highlighted. This diff fixes an issue where deeplinks were not correctly parsed if formatted as shown in the test plan of D20920587 (it was a different format in the recording, but after looking into it, using `plugin?params` instead of `plugin/?params` is the natural thing to do, so we now support both) Reviewed By: jknoxville Differential Revision: D21154190 fbshipit-source-id: c31132aaf7213ee1c3c188a6a1cf2b6bcc7b5b00 --- ...arsing.node.js => deeplinkURLParsing.node.tsx} | 15 ++++++++++++++- desktop/app/src/dispatcher/application.tsx | 2 +- desktop/app/src/reducers/connections.tsx | 5 +---- 3 files changed, 16 insertions(+), 6 deletions(-) rename desktop/app/src/dispatcher/__tests__/{deeplinkURLParsing.node.js => deeplinkURLParsing.node.tsx} (61%) diff --git a/desktop/app/src/dispatcher/__tests__/deeplinkURLParsing.node.js b/desktop/app/src/dispatcher/__tests__/deeplinkURLParsing.node.tsx similarity index 61% rename from desktop/app/src/dispatcher/__tests__/deeplinkURLParsing.node.js rename to desktop/app/src/dispatcher/__tests__/deeplinkURLParsing.node.tsx index cb35c72e6..a19150146 100644 --- a/desktop/app/src/dispatcher/__tests__/deeplinkURLParsing.node.js +++ b/desktop/app/src/dispatcher/__tests__/deeplinkURLParsing.node.tsx @@ -7,7 +7,7 @@ * @format */ -import {uriComponents} from '../application.tsx'; +import {uriComponents} from '../application'; test('test parsing of deeplink URL', () => { const url = 'flipper://app/plugin/meta/data'; @@ -22,6 +22,7 @@ test('test parsing of deeplink URL when arguments are less', () => { }); test('test parsing of deeplink URL when url is null', () => { + // @ts-ignore const components = uriComponents(null); expect(components).toEqual([]); }); @@ -31,3 +32,15 @@ test('test parsing of deeplink URL when pattern does not match', () => { const components = uriComponents(url); expect(components).toEqual([]); }); + +test('test parsing of deeplinkURL when there are query params', () => { + const url = 'flipper://null/React/?device=React%20Native'; + const components = uriComponents(url); + expect(components).toEqual(['null', 'React', '?device=React Native']); +}); + +test('test parsing of deeplinkURL when there are query params without slash', () => { + const url = 'flipper://null/React?device=React%20Native'; + const components = uriComponents(url); + expect(components).toEqual(['null', 'React', '?device=React Native']); +}); diff --git a/desktop/app/src/dispatcher/application.tsx b/desktop/app/src/dispatcher/application.tsx index 4f7a43e72..27bef94fc 100644 --- a/desktop/app/src/dispatcher/application.tsx +++ b/desktop/app/src/dispatcher/application.tsx @@ -32,7 +32,7 @@ export const uriComponents = (url: string): Array => { return []; } const match: Array | undefined | null = url.match( - /^flipper:\/\/([^\/]*)\/([^\/]*)\/?(.*)$/, + /^flipper:\/\/([^\/]*)\/([^\/\?]*)\/?(.*)$/, ); if (match) { return match.map(decodeURIComponent).slice(1).filter(Boolean); diff --git a/desktop/app/src/reducers/connections.tsx b/desktop/app/src/reducers/connections.tsx index 87defb798..1f10ca7ce 100644 --- a/desktop/app/src/reducers/connections.tsx +++ b/desktop/app/src/reducers/connections.tsx @@ -241,10 +241,7 @@ const reducer = (state: State = INITAL_STATE, action: Actions): State => { case 'SELECT_PLUGIN': { const {payload} = action; const {selectedPlugin, selectedApp, deepLinkPayload} = payload; - let selectedDevice = - selectedApp === null - ? null - : payload.selectedDevice || state.selectedDevice; + let selectedDevice = payload.selectedDevice; if (deepLinkPayload) { const deepLinkParams = new URLSearchParams(deepLinkPayload || ''); const deviceParam = deepLinkParams.get('device');