From fe5df63d41de4e12571abf2701e9b88e824f1f3b Mon Sep 17 00:00:00 2001 From: Benjamin Elo Date: Tue, 6 Aug 2019 03:06:26 -0700 Subject: [PATCH] Added AppMatchPatterns provider to nav bar Summary: This commit adds the match patterns that were parsed from the app into the nav bar. Planned for next commit: Alerting the user if they havn't filled in required parameters, and automatically excluding non-required parameters if not filled in. Reviewed By: danielbuechele Differential Revision: D16646774 fbshipit-source-id: 0f9130d659b6b635bfa1240dbd05c5956c6756ce --- .../__tests__/testNavigationPlugin.node.js | 4 ++++ src/plugins/navigation/flow-types.js | 2 ++ src/plugins/navigation/index.js | 20 +++++++++++++++++- .../navigation/util/autoCompleteProvider.js | 21 ++++++++++++++++++- 4 files changed, 45 insertions(+), 2 deletions(-) diff --git a/src/plugins/navigation/__tests__/testNavigationPlugin.node.js b/src/plugins/navigation/__tests__/testNavigationPlugin.node.js index f64fe3458..4dea66416 100644 --- a/src/plugins/navigation/__tests__/testNavigationPlugin.node.js +++ b/src/plugins/navigation/__tests__/testNavigationPlugin.node.js @@ -13,6 +13,8 @@ import type {Bookmark, PersistedState, URI} from '../flow-types'; function constructPersistedStateMock(): PersistedState { return { + appMatchPatterns: [], + appMatchPatternsProvider: new DefaultProvider(), bookmarksProvider: new DefaultProvider(), bookmarks: new Map(), navigationEvents: [], @@ -21,6 +23,8 @@ function constructPersistedStateMock(): PersistedState { function constructPersistedStateMockWithEvents(): PersistedState { return { + appMatchPatterns: [], + appMatchPatternsProvider: new DefaultProvider(), bookmarksProvider: new DefaultProvider(), bookmarks: new Map(), navigationEvents: [ diff --git a/src/plugins/navigation/flow-types.js b/src/plugins/navigation/flow-types.js index c9123b2ed..fed601373 100644 --- a/src/plugins/navigation/flow-types.js +++ b/src/plugins/navigation/flow-types.js @@ -17,6 +17,8 @@ export type PersistedState = {| bookmarks: Map, navigationEvents: Array, bookmarksProvider: AutoCompleteProvider, + appMatchPatterns: Array, + appMatchPatternsProvider: AutoCompleteProvider, |}; export type NavigationEvent = {| diff --git a/src/plugins/navigation/index.js b/src/plugins/navigation/index.js index 56ad37862..4d821b6f5 100644 --- a/src/plugins/navigation/index.js +++ b/src/plugins/navigation/index.js @@ -20,9 +20,11 @@ import { writeBookmarkToDB, } from './util/indexedDB'; import { + appMatchPatternsToAutoCompleteProvider, bookmarksToAutoCompleteProvider, DefaultProvider, } from './util/autoCompleteProvider'; +import {getAppMatchPatterns} from './util/appMatchPatterns'; import type { State, @@ -41,6 +43,8 @@ export default class extends FlipperPlugin { navigationEvents: [], bookmarks: new Map(), bookmarksProvider: new DefaultProvider(), + appMatchPatterns: [], + appMatchPatternsProvider: new DefaultProvider(), }; state = { @@ -73,6 +77,19 @@ export default class extends FlipperPlugin { }; componentDidMount = () => { + const {selectedApp} = this.props; + getAppMatchPatterns(selectedApp) + .then(patterns => { + this.props.setPersistedState({ + appMatchPatterns: patterns, + appMatchPatternsProvider: appMatchPatternsToAutoCompleteProvider( + patterns, + ), + }); + }) + .catch(() => { + /* Silently fail here. */ + }); readBookmarksFromDB().then(bookmarks => { this.props.setPersistedState({ bookmarks: bookmarks, @@ -128,9 +145,10 @@ export default class extends FlipperPlugin { const { bookmarks, bookmarksProvider, + appMatchPatternsProvider, navigationEvents, } = this.props.persistedState; - const autoCompleteProviders = [bookmarksProvider]; + const autoCompleteProviders = [bookmarksProvider, appMatchPatternsProvider]; return ( , +) => { + const autoCompleteProvider = { + icon: 'mobile', + matchPatterns: new Map(), + }; + appMatchPatterns.forEach(appMatchPattern => { + const matchPattern = + appMatchPattern.className + ' - ' + appMatchPattern.pattern; + autoCompleteProvider.matchPatterns.set( + matchPattern, + appMatchPattern.pattern, + ); + }); + return (autoCompleteProvider: AutoCompleteProvider); +}; + export const filterMatchPatterns: ( Map, string, @@ -70,7 +89,7 @@ export const filterProvidersToLineItems: ( for (const provider of providers) { const filteredProvider = filterProvider(provider, query, itemsLeft); filteredProvider.matchPatterns.forEach((uri, matchPattern) => { - lineItems.unshift({ + lineItems.push({ icon: provider.icon, matchPattern, uri,