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
This commit is contained in:
Benjamin Elo
2019-08-06 03:06:26 -07:00
committed by Facebook Github Bot
parent c3b266c925
commit fe5df63d41
4 changed files with 45 additions and 2 deletions

View File

@@ -13,6 +13,8 @@ import type {Bookmark, PersistedState, URI} from '../flow-types';
function constructPersistedStateMock(): PersistedState { function constructPersistedStateMock(): PersistedState {
return { return {
appMatchPatterns: [],
appMatchPatternsProvider: new DefaultProvider(),
bookmarksProvider: new DefaultProvider(), bookmarksProvider: new DefaultProvider(),
bookmarks: new Map<URI, Bookmark>(), bookmarks: new Map<URI, Bookmark>(),
navigationEvents: [], navigationEvents: [],
@@ -21,6 +23,8 @@ function constructPersistedStateMock(): PersistedState {
function constructPersistedStateMockWithEvents(): PersistedState { function constructPersistedStateMockWithEvents(): PersistedState {
return { return {
appMatchPatterns: [],
appMatchPatternsProvider: new DefaultProvider(),
bookmarksProvider: new DefaultProvider(), bookmarksProvider: new DefaultProvider(),
bookmarks: new Map<URI, Bookmark>(), bookmarks: new Map<URI, Bookmark>(),
navigationEvents: [ navigationEvents: [

View File

@@ -17,6 +17,8 @@ export type PersistedState = {|
bookmarks: Map<URI, Bookmark>, bookmarks: Map<URI, Bookmark>,
navigationEvents: Array<NavigationEvent>, navigationEvents: Array<NavigationEvent>,
bookmarksProvider: AutoCompleteProvider, bookmarksProvider: AutoCompleteProvider,
appMatchPatterns: Array<AppMatchPattern>,
appMatchPatternsProvider: AutoCompleteProvider,
|}; |};
export type NavigationEvent = {| export type NavigationEvent = {|

View File

@@ -20,9 +20,11 @@ import {
writeBookmarkToDB, writeBookmarkToDB,
} from './util/indexedDB'; } from './util/indexedDB';
import { import {
appMatchPatternsToAutoCompleteProvider,
bookmarksToAutoCompleteProvider, bookmarksToAutoCompleteProvider,
DefaultProvider, DefaultProvider,
} from './util/autoCompleteProvider'; } from './util/autoCompleteProvider';
import {getAppMatchPatterns} from './util/appMatchPatterns';
import type { import type {
State, State,
@@ -41,6 +43,8 @@ export default class extends FlipperPlugin<State, {}, PersistedState> {
navigationEvents: [], navigationEvents: [],
bookmarks: new Map<string, Bookmark>(), bookmarks: new Map<string, Bookmark>(),
bookmarksProvider: new DefaultProvider(), bookmarksProvider: new DefaultProvider(),
appMatchPatterns: [],
appMatchPatternsProvider: new DefaultProvider(),
}; };
state = { state = {
@@ -73,6 +77,19 @@ export default class extends FlipperPlugin<State, {}, PersistedState> {
}; };
componentDidMount = () => { componentDidMount = () => {
const {selectedApp} = this.props;
getAppMatchPatterns(selectedApp)
.then(patterns => {
this.props.setPersistedState({
appMatchPatterns: patterns,
appMatchPatternsProvider: appMatchPatternsToAutoCompleteProvider(
patterns,
),
});
})
.catch(() => {
/* Silently fail here. */
});
readBookmarksFromDB().then(bookmarks => { readBookmarksFromDB().then(bookmarks => {
this.props.setPersistedState({ this.props.setPersistedState({
bookmarks: bookmarks, bookmarks: bookmarks,
@@ -128,9 +145,10 @@ export default class extends FlipperPlugin<State, {}, PersistedState> {
const { const {
bookmarks, bookmarks,
bookmarksProvider, bookmarksProvider,
appMatchPatternsProvider,
navigationEvents, navigationEvents,
} = this.props.persistedState; } = this.props.persistedState;
const autoCompleteProviders = [bookmarksProvider]; const autoCompleteProviders = [bookmarksProvider, appMatchPatternsProvider];
return ( return (
<ScrollableFlexColumn> <ScrollableFlexColumn>
<SearchBar <SearchBar

View File

@@ -11,6 +11,7 @@ import type {
Bookmark, Bookmark,
AutoCompleteProvider, AutoCompleteProvider,
AutoCompleteLineItem, AutoCompleteLineItem,
AppMatchPattern,
} from '../flow-types'; } from '../flow-types';
export function DefaultProvider(): AutoCompleteProvider { export function DefaultProvider(): AutoCompleteProvider {
@@ -33,6 +34,24 @@ export const bookmarksToAutoCompleteProvider: (
return autoCompleteProvider; return autoCompleteProvider;
}; };
export const appMatchPatternsToAutoCompleteProvider = (
appMatchPatterns: Array<AppMatchPattern>,
) => {
const autoCompleteProvider = {
icon: 'mobile',
matchPatterns: new Map<string, URI>(),
};
appMatchPatterns.forEach(appMatchPattern => {
const matchPattern =
appMatchPattern.className + ' - ' + appMatchPattern.pattern;
autoCompleteProvider.matchPatterns.set(
matchPattern,
appMatchPattern.pattern,
);
});
return (autoCompleteProvider: AutoCompleteProvider);
};
export const filterMatchPatterns: ( export const filterMatchPatterns: (
Map<string, URI>, Map<string, URI>,
string, string,
@@ -70,7 +89,7 @@ export const filterProvidersToLineItems: (
for (const provider of providers) { for (const provider of providers) {
const filteredProvider = filterProvider(provider, query, itemsLeft); const filteredProvider = filterProvider(provider, query, itemsLeft);
filteredProvider.matchPatterns.forEach((uri, matchPattern) => { filteredProvider.matchPatterns.forEach((uri, matchPattern) => {
lineItems.unshift({ lineItems.push({
icon: provider.icon, icon: provider.icon,
matchPattern, matchPattern,
uri, uri,