Auto-install favorite plugins

Summary: After unbudling plugins users will need to manually install them. To simlify this transition we can auto-install favorite plugins on every app connection, so users won't need to install plugins which they marked as favorite before.

Reviewed By: passy

Differential Revision: D25538638

fbshipit-source-id: 4ac3ad0c8c026d149f7ce0c4af07da3e8b909772
This commit is contained in:
Anton Nikolaev
2020-12-15 09:28:58 -08:00
committed by Facebook GitHub Bot
parent bd01b58566
commit 965559ee65
6 changed files with 84 additions and 15 deletions

View File

@@ -27,6 +27,7 @@ import {deconstructPluginKey} from './utils/clientUtils';
import {_SandyPluginDefinition} from 'flipper-plugin';
import BaseDevice from './devices/BaseDevice';
import {State as PluginStates} from './reducers/pluginStates';
import {ActivatablePluginDetails} from 'flipper-plugin-lib';
export const store: Store = createStore<StoreState, Actions, any, any>(
rootReducer,
@@ -173,7 +174,7 @@ function updateClientPlugin(
clientsWithEnabledPlugin.forEach((client) => {
startPlugin(client, plugin, true);
});
draft.pluginManager.uninstalledPlugins.delete(plugin.details.name);
registerLoadedPlugin(draft, plugin.details);
});
}
@@ -191,6 +192,7 @@ function uninstallPlugin(state: StoreState, plugin: PluginDefinition) {
});
cleanupPluginStates(draft.pluginStates, plugin.id);
draft.plugins.clientPlugins.delete(plugin.id);
draft.plugins.devicePlugins.delete(plugin.id);
draft.pluginManager.uninstalledPlugins.add(plugin.details.name);
});
}
@@ -209,9 +211,21 @@ function updateDevicePlugin(state: StoreState, plugin: DevicePluginDefinition) {
devicesWithEnabledPlugin.forEach((d) => {
d.loadDevicePlugin(plugin);
});
registerLoadedPlugin(draft, plugin.details);
});
}
function registerLoadedPlugin(
draft: {
pluginManager: StoreState['pluginManager'];
plugins: StoreState['plugins'];
},
plugin: ActivatablePluginDetails,
) {
draft.pluginManager.uninstalledPlugins.delete(plugin.name);
draft.plugins.loadedPlugins.set(plugin.id, plugin);
}
function supportsDevice(plugin: DevicePluginDefinition, device: BaseDevice) {
if (plugin instanceof _SandyPluginDefinition) {
return (