From c51797d194e74a6c6033945a3c98a4e5da6ff9d5 Mon Sep 17 00:00:00 2001 From: Pritesh Nandgaonkar Date: Mon, 3 Feb 2020 04:35:49 -0800 Subject: [PATCH] Fix the plugin display logic to show enabled and device plugins Summary: Changed the plugin display logic in SupportForm to show plugins which are enabled(includes device plugins) and plugins which has `exportPersistedState` defined. Reviewed By: mweststrate Differential Revision: D19643857 fbshipit-source-id: 7a4a5882507c06c6b6f9c481ee2c5c36ecc32ac6 --- src/dispatcher/application.tsx | 3 +- src/fb-stubs/utils/supportForm.tsx | 5 +-- src/utils/pluginUtils.tsx | 64 +++++++++++++++++++++++++++++- 3 files changed, 65 insertions(+), 7 deletions(-) diff --git a/src/dispatcher/application.tsx b/src/dispatcher/application.tsx index 890461fa0..cc9911795 100644 --- a/src/dispatcher/application.tsx +++ b/src/dispatcher/application.tsx @@ -191,10 +191,9 @@ export default (store: Store, logger: Logger) => { setSelectedPlugins( defaultSelectedPluginsForGroup( grp, - store.getState().pluginStates, - store.getState().pluginMessageQueue, store.getState().plugins, selectedClient, + store.getState().connections.userStarredPlugins, ), ), ); diff --git a/src/fb-stubs/utils/supportForm.tsx b/src/fb-stubs/utils/supportForm.tsx index 87bf89cdd..d22968992 100644 --- a/src/fb-stubs/utils/supportForm.tsx +++ b/src/fb-stubs/utils/supportForm.tsx @@ -8,17 +8,14 @@ */ import {Groups} from '../../reducers/supportForm'; -import {State as PluginStatesState} from '../../reducers/pluginStates'; -import {State as PluginMessageQueueState} from '../../reducers/pluginMessageQueue'; import {State as PluginState} from '../../reducers/plugins'; import Client from '../../Client'; export function defaultSelectedPluginsForGroup( _grp: Groups, - _pluginStates: PluginStatesState, - _pluginMessageQueue: PluginMessageQueueState, _plugins: PluginState, _selectedClient: Client | undefined, + _userStarredPlugins: {[client: string]: Array}, ): Array { return []; } diff --git a/src/utils/pluginUtils.tsx b/src/utils/pluginUtils.tsx index 9803e94df..6bbce5e87 100644 --- a/src/utils/pluginUtils.tsx +++ b/src/utils/pluginUtils.tsx @@ -13,7 +13,7 @@ import {State as PluginStatesState} from '../reducers/pluginStates'; import {State as PluginsState} from '../reducers/plugins'; import {State as PluginMessageQueueState} from '../reducers/pluginMessageQueue'; import {PluginDefinition} from '../dispatcher/plugins'; -import {deconstructPluginKey} from './clientUtils'; +import {deconstructPluginKey, deconstructClientId} from './clientUtils'; type Client = import('../Client').default; @@ -64,6 +64,68 @@ export function getPersistedState( return persistedState; } +/** + * + * @param starredPlugin starredPlugin is the dictionary of client and its enabled plugin + * @param client Optional paramater indicating the selected client. + * @param plugins Plugins from the state which has the mapping to Plugin's Class. + + * Returns plugins which are enabled or which has exportPersistedState function defined for the passed client. + * Note all device plugins are enabled. + */ + +export function getEnabledOrExportPersistedStatePlugins( + starredPlugin: { + [client: string]: string[]; + }, + client: Client, + plugins: PluginsState, +): Array<{id: string; label: string}> { + const appName = deconstructClientId(client.id).app; + const pluginsMap: Map< + string, + typeof FlipperDevicePlugin | typeof FlipperPlugin + > = pluginsClassMap(plugins); + // Enabled Plugins with no exportPersistedState function defined + const enabledPlugins = starredPlugin[appName] + ? starredPlugin[appName] + .map(pluginName => pluginsMap.get(pluginName)!) + .filter(plugin => { + return !plugin.exportPersistedState; + }) + .sort(sortPluginsByName) + .map(plugin => { + return {id: plugin.id, label: getPluginTitle(plugin)}; + }) + : []; + // Device Plugins + const devicePlugins = Array.from(plugins.devicePlugins.keys()) + .filter(plugin => { + return client.plugins.includes(plugin); + }) + .map(plugin => { + return { + id: plugin, + label: getPluginTitle(plugins.devicePlugins.get(plugin)!), + }; + }); + // Plugins which have defined exportPersistedState. + const exportPersistedStatePlugins = client.plugins + .filter(name => { + return pluginsMap.get(name)?.exportPersistedState != null; + }) + .map(name => { + const plugin = pluginsMap.get(name)!; + return {id: plugin.id, label: getPluginTitle(plugin)}; + }); + return [ + ...devicePlugins, + ...enabledPlugins, + ...exportPersistedStatePlugins, + {id: 'DeviceLogs', label: 'Logs'}, + ]; +} + /** * * @param pluginsState PluginsState of the Redux Store.