diff --git a/src/plugins/navigation/__tests__/testURI.node.js b/src/plugins/navigation/__tests__/testURI.node.js index 6c1ba5dd9..498e969f1 100644 --- a/src/plugins/navigation/__tests__/testURI.node.js +++ b/src/plugins/navigation/__tests__/testURI.node.js @@ -10,6 +10,7 @@ import { getRequiredParameters, parameterIsNumberType, replaceRequiredParametersWithValues, + filterOptionalParameters, } from '../util/uri'; test('parse required parameters from uri', () => { @@ -52,3 +53,11 @@ test('detect if required parameter is numeric type', () => { test('detect if required parameter is not numeric type', () => { expect(parameterIsNumberType('{numerictype}')).toBe(false); }); + +test('filter optional parameters from uri', () => { + const testURI = + 'fb://test_uri/{?param_here}/?parameter1={parameter1}¶meter2={?parameter2}&numericParameter={#numericParameter}¶meter3={?parameter3}'; + const expextedResult = + 'fb://test_uri/?parameter1={parameter1}&numericParameter={#numericParameter}'; + expect(filterOptionalParameters(testURI)).toBe(expextedResult); +}); diff --git a/src/plugins/navigation/index.js b/src/plugins/navigation/index.js index 96d3cad0a..4e11c3c6c 100644 --- a/src/plugins/navigation/index.js +++ b/src/plugins/navigation/index.js @@ -26,7 +26,7 @@ import { DefaultProvider, } from './util/autoCompleteProvider'; import {getAppMatchPatterns} from './util/appMatchPatterns'; -import {getRequiredParameters} from './util/uri'; +import {getRequiredParameters, filterOptionalParameters} from './util/uri'; import type { State, @@ -114,7 +114,7 @@ export default class extends FlipperPlugin { const requiredParameters = getRequiredParameters(query); if (requiredParameters.length === 0) { this.getDevice().then(device => { - device.navigateToLocation(query); + device.navigateToLocation(filterOptionalParameters(query)); }); } else { this.setState({ diff --git a/src/plugins/navigation/util/uri.js b/src/plugins/navigation/util/uri.js index f3559bbb4..22a939987 100644 --- a/src/plugins/navigation/util/uri.js +++ b/src/plugins/navigation/util/uri.js @@ -8,6 +8,10 @@ import querystring from 'querystring'; +export const filterOptionalParameters: string => string = (uri: string) => { + return uri.replace(/[/&]?([^&?={}\/]*=)?{\?.*?}/g, ''); +}; + export const parseURIParameters: string => Map = ( query: string, ) => {