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,