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
This commit is contained in:
Pritesh Nandgaonkar
2020-02-03 04:35:49 -08:00
committed by Facebook Github Bot
parent de1d116806
commit c51797d194
3 changed files with 65 additions and 7 deletions

View File

@@ -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,
),
),
);

View File

@@ -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<string>},
): Array<string> {
return [];
}

View File

@@ -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<PersistedState>(
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.