Rename star/unstar actions to enable/disable/switch

Summary:
Renamed actions "star" and "unstar" everywhere to "enable", "disable" and "switch". The logic behind original "star" action changed significantly, so this rename just makes everything much clearer.

Please note that as a part of rename persisted state fields "userStarredPlugins" and "userStarredDevicePlugins" were renamed. I've added a "redux-persist" migration for seamless transition.

Reviewed By: passy

Differential Revision: D26606459

fbshipit-source-id: 83ad475f9b0231194701c40a2cdbda36f02c3d10
This commit is contained in:
Anton Nikolaev
2021-02-24 05:28:25 -08:00
committed by Facebook GitHub Bot
parent e9bab76614
commit fa3ff83595
29 changed files with 230 additions and 201 deletions

View File

@@ -11,7 +11,7 @@ jest.mock('../plugins');
jest.mock('../../utils/electronModuleCache');
import {
loadPlugin,
starPlugin,
switchPlugin,
uninstallPlugin,
} from '../../reducers/pluginManager';
import {requirePlugin} from '../plugins';
@@ -189,35 +189,35 @@ test('star plugin', async () => {
loadPlugin({plugin: pluginDetails1, enable: false, notifyIfFailed: false}),
);
mockFlipper.dispatch(
starPlugin({
switchPlugin({
plugin: pluginDefinition1,
selectedApp: mockClient.query.app,
}),
);
expect(
mockFlipper.getState().connections.userStarredPlugins[mockClient.query.app],
mockFlipper.getState().connections.enabledPlugins[mockClient.query.app],
).toContain('plugin1');
expect(mockClient.sandyPluginStates.has('plugin1')).toBeTruthy();
});
test('unstar plugin', async () => {
test('disable plugin', async () => {
mockFlipper.dispatch(
loadPlugin({plugin: pluginDetails1, enable: false, notifyIfFailed: false}),
);
mockFlipper.dispatch(
starPlugin({
switchPlugin({
plugin: pluginDefinition1,
selectedApp: mockClient.query.app,
}),
);
mockFlipper.dispatch(
starPlugin({
switchPlugin({
plugin: pluginDefinition1,
selectedApp: mockClient.query.app,
}),
);
expect(
mockFlipper.getState().connections.userStarredPlugins[mockClient.query.app],
mockFlipper.getState().connections.enabledPlugins[mockClient.query.app],
).not.toContain('plugin1');
expect(mockClient.sandyPluginStates.has('plugin1')).toBeFalsy();
});
@@ -231,17 +231,17 @@ test('star device plugin', async () => {
}),
);
mockFlipper.dispatch(
starPlugin({
switchPlugin({
plugin: devicePluginDefinition,
}),
);
expect(
mockFlipper.getState().connections.userStarredDevicePlugins.has('device'),
mockFlipper.getState().connections.enabledDevicePlugins.has('device'),
).toBeTruthy();
expect(mockDevice.sandyPluginStates.has('device')).toBeTruthy();
});
test('unstar device plugin', async () => {
test('disable device plugin', async () => {
mockFlipper.dispatch(
loadPlugin({
plugin: devicePluginDetails,
@@ -250,17 +250,17 @@ test('unstar device plugin', async () => {
}),
);
mockFlipper.dispatch(
starPlugin({
switchPlugin({
plugin: devicePluginDefinition,
}),
);
mockFlipper.dispatch(
starPlugin({
switchPlugin({
plugin: devicePluginDefinition,
}),
);
expect(
mockFlipper.getState().connections.userStarredDevicePlugins.has('device'),
mockFlipper.getState().connections.enabledDevicePlugins.has('device'),
).toBeFalsy();
expect(mockDevice.sandyPluginStates.has('device')).toBeFalsy();
});

View File

@@ -242,7 +242,7 @@ export default (store: Store, logger: Logger) => {
androidDevice.loadDevicePlugins(
store.getState().plugins.devicePlugins,
store.getState().connections.userStarredDevicePlugins,
store.getState().connections.enabledDevicePlugins,
);
store.dispatch({
type: 'REGISTER_DEVICE',

View File

@@ -24,7 +24,7 @@ export default (store: Store, _logger: Logger) => {
}
device.loadDevicePlugins(
store.getState().plugins.devicePlugins,
store.getState().connections.userStarredDevicePlugins,
store.getState().connections.enabledDevicePlugins,
);
store.dispatch({
type: 'REGISTER_DEVICE',

View File

@@ -136,7 +136,7 @@ function processDevices(
const iOSDevice = new IOSDevice(udid, type, name);
iOSDevice.loadDevicePlugins(
store.getState().plugins.devicePlugins,
store.getState().connections.userStarredDevicePlugins,
store.getState().connections.enabledDevicePlugins,
);
store.dispatch({
type: 'REGISTER_DEVICE',

View File

@@ -59,7 +59,7 @@ export async function registerMetroDevice(
metroDevice.loadDevicePlugins(
store.getState().plugins.devicePlugins,
store.getState().connections.userStarredDevicePlugins,
store.getState().connections.enabledDevicePlugins,
);
store.dispatch({
type: 'REGISTER_DEVICE',

View File

@@ -165,7 +165,7 @@ function pluginIsDisabledForAllConnectedClients(
return (
!state.plugins.clientPlugins.has(plugin.id) ||
!state.connections.clients.some((c) =>
state.connections.userStarredPlugins[c.query.app]?.includes(plugin.id),
state.connections.enabledPlugins[c.query.app]?.includes(plugin.id),
)
);
}

View File

@@ -15,7 +15,7 @@ import {
UninstallPluginActionPayload,
UpdatePluginActionPayload,
pluginCommandsProcessed,
StarPluginActionPayload,
SwitchPluginActionPayload,
PluginCommand,
} from '../reducers/pluginManager';
import {
@@ -42,10 +42,10 @@ import {
} from '../reducers/plugins';
import {_SandyPluginDefinition} from 'flipper-plugin';
import {
devicePluginStarred,
devicePluginUnstarred,
pluginStarred,
pluginUnstarred,
setDevicePluginEnabled,
setDevicePluginDisabled,
setPluginEnabled,
setPluginDisabled,
} from '../reducers/connections';
import {deconstructClientId} from '../utils/clientUtils';
import {clearMessageQueue} from '../reducers/pluginMessageQueue';
@@ -112,8 +112,8 @@ export function processPluginCommandsQueue(
case 'UPDATE_PLUGIN':
updatePlugin(store, command.payload);
break;
case 'STAR_PLUGIN':
starPlugin(store, command.payload);
case 'SWITCH_PLUGIN':
switchPlugin(store, command.payload);
break;
default:
console.error('Unexpected plugin command', command);
@@ -181,18 +181,18 @@ function getSelectedAppId(store: Store) {
return selectedApp;
}
function starPlugin(
function switchPlugin(
store: Store,
{plugin, selectedApp}: StarPluginActionPayload,
{plugin, selectedApp}: SwitchPluginActionPayload,
) {
if (isDevicePluginDefinition(plugin)) {
starDevicePlugin(store, plugin);
switchDevicePlugin(store, plugin);
} else {
starClientPlugin(store, plugin, selectedApp);
switchClientPlugin(store, plugin, selectedApp);
}
}
function starClientPlugin(
function switchClientPlugin(
store: Store,
plugin: ClientPluginDefinition,
selectedApp: string | undefined,
@@ -205,7 +205,7 @@ function starClientPlugin(
const clients = connections.clients.filter(
(client) => client.query.app === selectedApp,
);
if (connections.userStarredPlugins[selectedApp]?.includes(plugin.id)) {
if (connections.enabledPlugins[selectedApp]?.includes(plugin.id)) {
clients.forEach((client) => {
stopPlugin(client, plugin.id);
const pluginKey = getPluginKey(
@@ -215,30 +215,30 @@ function starClientPlugin(
);
store.dispatch(clearMessageQueue(pluginKey));
});
store.dispatch(pluginUnstarred(plugin.id, selectedApp));
store.dispatch(setPluginDisabled(plugin.id, selectedApp));
} else {
clients.forEach((client) => {
startPlugin(client, plugin);
});
store.dispatch(pluginStarred(plugin.id, selectedApp));
store.dispatch(setPluginEnabled(plugin.id, selectedApp));
}
}
function starDevicePlugin(store: Store, plugin: DevicePluginDefinition) {
function switchDevicePlugin(store: Store, plugin: DevicePluginDefinition) {
const {connections} = store.getState();
const devicesWithPlugin = connections.devices.filter((d) =>
d.supportsPlugin(plugin.details),
);
if (connections.userStarredDevicePlugins.has(plugin.id)) {
if (connections.enabledDevicePlugins.has(plugin.id)) {
devicesWithPlugin.forEach((d) => {
d.unloadDevicePlugin(plugin.id);
});
store.dispatch(devicePluginUnstarred(plugin.id));
store.dispatch(setDevicePluginDisabled(plugin.id));
} else {
devicesWithPlugin.forEach((d) => {
d.loadDevicePlugin(plugin);
});
store.dispatch(devicePluginStarred(plugin.id));
store.dispatch(setDevicePluginEnabled(plugin.id));
}
}
@@ -251,7 +251,7 @@ function updateClientPlugin(
if (enable) {
const selectedApp = getSelectedAppId(store);
if (selectedApp) {
store.dispatch(pluginStarred(plugin.id, selectedApp));
store.dispatch(setPluginEnabled(plugin.id, selectedApp));
}
}
const clientsWithEnabledPlugin = clients.filter((c) => {
@@ -259,7 +259,7 @@ function updateClientPlugin(
c.supportsPlugin(plugin.id) &&
store
.getState()
.connections.userStarredPlugins[c.query.app]?.includes(plugin.id)
.connections.enabledPlugins[c.query.app]?.includes(plugin.id)
);
});
const previousVersion = store.getState().plugins.clientPlugins.get(plugin.id);
@@ -283,7 +283,7 @@ function updateDevicePlugin(
enable: boolean,
) {
if (enable) {
store.dispatch(devicePluginStarred(plugin.id));
store.dispatch(setDevicePluginEnabled(plugin.id));
}
const connections = store.getState().connections;
const devicesWithEnabledPlugin = connections.devices.filter((d) =>

View File

@@ -145,12 +145,18 @@ export default (store: Store, logger: Logger) => {
logger.track('usage', TIME_SPENT_EVENT, usageSummary[key], key);
}
Object.entries(state.connections.userStarredPlugins).forEach(
([app, plugins]) =>
Object.entries(state.connections.enabledPlugins).forEach(
([app, plugins]) => {
// TODO: remove "starred-plugns" event in favor of "enabled-plugins" after some transition period
logger.track('usage', 'starred-plugins', {
app: app,
app,
starredPlugins: plugins,
}),
});
logger.track('usage', 'enabled-plugins', {
app,
enabledPugins: plugins,
});
},
);
const bgStats = getPluginBackgroundStats();