Web:Client:Plugins: refactoring plugin store and helplers

This commit is contained in:
TimofeyBoyko 2022-08-10 17:47:15 +03:00
parent 10e20b9f17
commit 7e16507b41
2 changed files with 43 additions and 5 deletions

View File

@ -1,7 +1,10 @@
import { PluginType } from "./constants";
class PluginStore {
plugins = null;
contextMenuItems = null;
mainButtonItems = null;
profileMenuItems = null;
constructor() {
this.plugins = new Map();
@ -11,8 +14,6 @@ class PluginStore {
}
installPlugin(id, plugin) {
plugin.init(this);
this.plugins.set(+id, plugin);
if (plugin.isActive) {
@ -30,12 +31,48 @@ class PluginStore {
activatePlugin(id) {
this.plugins.get(+id).isActive = true;
this.plugins.get(+id).activate();
const pluginItems = this.plugins.get(+id).activate();
if (!pluginItems) return;
Array.from(itemsMap, ([key, value]) => {
switch (key) {
case PluginType.CONTEXT_MENU:
Array.from(value, ([key, item]) =>
this.addContextMenuItem(key, item)
);
return;
case PluginType.ACTION_BUTTON:
Array.from(value, ([key, item]) => this.addMainButtonItem(key, item));
return;
case PluginType.PROFILE_MENU:
Array.from(value, ([key, item]) =>
this.addProfileMenuItem(key, item)
);
return;
}
});
}
deactivatePlugin(id) {
this.plugins.get(+id).isActive = false;
this.plugins.get(+id).deactivate();
const pluginItems = this.plugins.get(+id).deactivate();
if (!pluginItems) return;
Array.from(itemsMap, ([key, value]) => {
switch (key) {
case PluginType.CONTEXT_MENU:
value.map((key) => this.deleteContextMenuItem(key));
return;
case PluginType.ACTION_BUTTON:
value.map((key) => this.deleteMainButtonItem(key));
return;
case PluginType.PROFILE_MENU:
value.map((key) => this.deleteProfileMenuItem(key));
return;
}
});
}
addContextMenuItem(key, contextMenuItem) {

View File

@ -6,6 +6,7 @@ import { loadScript } from "@docspace/common/utils";
import { PluginContextMenuItemType } from "./constants";
export const initPluginStore = async () => {
window.Plugins = {};
window.PluginStore = new PluginStore();
const plugins = await api.getPlugins();
@ -15,7 +16,7 @@ export const initPluginStore = async () => {
export const initPlugin = (plugin, callback) => {
const onLoad = () => {
const newPlugin = eval(`${plugin.name}`); //window.DocSpace.plugins[plugin.name]
const newPlugin = window?.Plugins[plugin.name];
newPlugin.isActive = plugin.isActive;
newPlugin.id = plugin.id;