Refactor plugin lists computations
Summary: This is purely refactoring change. Before that we computed plugin lists in-place in PluginList component. Now we will be re-computing them as side effect and will keep computed lists in redux. This makes it easier to re-use plugin lists in other places outside of PluginList component, e.g. in the upcoming Marketplace UI. Reviewed By: mweststrate Differential Revision: D29161719 fbshipit-source-id: 5cb06d4d8a553aa856101c78b2311fbc078c6bd7
This commit is contained in:
committed by
Facebook GitHub Bot
parent
0d6262aa5e
commit
ac9ef7620a
@@ -83,15 +83,7 @@ export function getExportablePlugins(
|
||||
device: BaseDevice | undefined | null,
|
||||
client?: Client,
|
||||
): {id: string; label: string}[] {
|
||||
const availablePlugins = computePluginLists(
|
||||
device ?? undefined,
|
||||
undefined,
|
||||
client,
|
||||
state.plugins,
|
||||
state.connections.enabledPlugins,
|
||||
state.connections.enabledDevicePlugins,
|
||||
);
|
||||
|
||||
const availablePlugins = computePluginLists(state.connections, state.plugins);
|
||||
return [
|
||||
...availablePlugins.devicePlugins.filter((plugin) => {
|
||||
return isExportablePlugin(state, device, client, plugin);
|
||||
@@ -180,14 +172,38 @@ export function getPluginTooltip(details: PluginDetails): string {
|
||||
}
|
||||
|
||||
export function computePluginLists(
|
||||
device: BaseDevice | undefined,
|
||||
metroDevice: BaseDevice | undefined,
|
||||
client: Client | undefined,
|
||||
plugins: State['plugins'],
|
||||
enabledPluginsState: State['connections']['enabledPlugins'],
|
||||
enabledDevicePluginsState: Set<string>,
|
||||
_pluginsChanged?: number, // this argument is purely used to invalidate the memoization cache
|
||||
) {
|
||||
connections: Pick<
|
||||
State['connections'],
|
||||
| 'activeDevice'
|
||||
| 'activeClient'
|
||||
| 'metroDevice'
|
||||
| 'enabledDevicePlugins'
|
||||
| 'enabledPlugins'
|
||||
>,
|
||||
plugins: Pick<
|
||||
State['plugins'],
|
||||
| 'bundledPlugins'
|
||||
| 'marketplacePlugins'
|
||||
| 'loadedPlugins'
|
||||
| 'devicePlugins'
|
||||
| 'disabledPlugins'
|
||||
| 'gatekeepedPlugins'
|
||||
| 'failedPlugins'
|
||||
| 'clientPlugins'
|
||||
>,
|
||||
): {
|
||||
devicePlugins: DevicePluginDefinition[];
|
||||
metroPlugins: DevicePluginDefinition[];
|
||||
enabledPlugins: ClientPluginDefinition[];
|
||||
disabledPlugins: PluginDefinition[];
|
||||
unavailablePlugins: [plugin: PluginDetails, reason: string][];
|
||||
downloadablePlugins: (DownloadablePluginDetails | BundledPluginDetails)[];
|
||||
} {
|
||||
const device = connections.activeDevice;
|
||||
const client = connections.activeClient;
|
||||
const metroDevice = connections.metroDevice;
|
||||
const enabledDevicePluginsState = connections.enabledDevicePlugins;
|
||||
const enabledPluginsState = connections.enabledPlugins;
|
||||
const uninstalledMarketplacePlugins = getLatestCompatibleVersionOfEachPlugin([
|
||||
...plugins.bundledPlugins.values(),
|
||||
...plugins.marketplacePlugins,
|
||||
|
||||
Reference in New Issue
Block a user