Files
flipper/desktop/flipper-ui-core/src/reducers/pluginManager.tsx
Andres Suarez 79023ee190 Update copyright headers from Facebook to Meta
Reviewed By: bhamodi

Differential Revision: D33331422

fbshipit-source-id: 016e8dcc0c0c7f1fc353a348b54fda0d5e2ddc01
2021-12-27 14:31:45 -08:00

125 lines
2.6 KiB
TypeScript

/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
*/
import type {Actions} from './';
import type {ActivatablePluginDetails} from 'flipper-common';
import type {PluginDefinition} from '../plugin';
import {produce} from 'immer';
export type State = {
pluginCommandsQueue: PluginCommand[];
};
export type PluginCommand =
| LoadPluginAction
| UninstallPluginAction
| UpdatePluginAction
| SwitchPluginAction;
export type LoadPluginActionPayload = {
plugin: ActivatablePluginDetails;
enable: boolean;
notifyIfFailed: boolean;
};
export type LoadPluginAction = {
type: 'LOAD_PLUGIN';
payload: LoadPluginActionPayload;
};
export type UninstallPluginActionPayload = {
plugin: PluginDefinition;
};
export type UninstallPluginAction = {
type: 'UNINSTALL_PLUGIN';
payload: UninstallPluginActionPayload;
};
export type UpdatePluginActionPayload = {
plugin: PluginDefinition;
enablePlugin: boolean;
};
export type UpdatePluginAction = {
type: 'UPDATE_PLUGIN';
payload: UpdatePluginActionPayload;
};
export type SwitchPluginActionPayload = {
plugin: PluginDefinition;
selectedApp?: string;
};
export type SwitchPluginAction = {
type: 'SWITCH_PLUGIN';
payload: SwitchPluginActionPayload;
};
export type Action =
| {
type: 'PLUGIN_COMMANDS_PROCESSED';
payload: number;
}
| PluginCommand;
const INITIAL_STATE: State = {
pluginCommandsQueue: [],
};
export default function reducer(
state: State = INITIAL_STATE,
action: Actions,
): State {
switch (action.type) {
case 'LOAD_PLUGIN':
case 'UNINSTALL_PLUGIN':
case 'UPDATE_PLUGIN':
case 'SWITCH_PLUGIN':
return produce(state, (draft) => {
draft.pluginCommandsQueue.push(action);
});
case 'PLUGIN_COMMANDS_PROCESSED':
return produce(state, (draft) => {
draft.pluginCommandsQueue.splice(0, action.payload);
});
default:
return state;
}
}
export const uninstallPlugin = (
payload: UninstallPluginActionPayload,
): Action => ({
type: 'UNINSTALL_PLUGIN',
payload,
});
export const loadPlugin = (payload: LoadPluginActionPayload): Action => ({
type: 'LOAD_PLUGIN',
payload,
});
export const pluginCommandsProcessed = (payload: number): Action => ({
type: 'PLUGIN_COMMANDS_PROCESSED',
payload,
});
export const registerPluginUpdate = (
payload: UpdatePluginActionPayload,
): Action => ({
type: 'UPDATE_PLUGIN',
payload,
});
export const switchPlugin = (payload: SwitchPluginActionPayload): Action => ({
type: 'SWITCH_PLUGIN',
payload,
});