import isPlainObject from 'lodash/isPlainObject'; import isFunction from 'lodash/isFunction'; import type { localPluginType } from './types'; import { PluginManager } from './plugin-manager'; export class Plugin { componentName = ''; plugin = {}; basicsPlugin = []; localPlugin = []; globalPlugin = []; pluginManager: PluginManager; constructor(componentName, pluginManager: PluginManager) { this.pluginManager = pluginManager; this.componentName = componentName; pluginManager.getGlobalPlugin(); } // 设置内置插件 setBasicsPlugin(basicsPlugin) { if (Array.isArray(basicsPlugin)) { this.basicsPlugin = this.basicsPlugin.concat(basicsPlugin); } else if (isPlainObject(basicsPlugin)) { this.basicsPlugin = this.basicsPlugin.concat(Object.values(basicsPlugin)); } } setLocalPlugin(localPlugin: localPluginType = []) { if (typeof localPlugin === 'string') { const plugin = this.pluginManager.getPluginByPluginName( localPlugin, this.componentName, ); if (isFunction(plugin?.method)) { this.localPlugin = [plugin.method]; } } if (Array.isArray(localPlugin)) { this.localPlugin = localPlugin.reduce((pre, item) => { if (isFunction(item)) { pre.push(item); } else if (isPlainObject(localPlugin)) { pre.push(...Object.values(localPlugin)); } else if (typeof item === 'string') { const plugin = this.pluginManager.getPluginByPluginName( item, this.componentName, ); if (isFunction(plugin?.method)) { pre.push(plugin.method); } } return pre; }, []); } else if (isPlainObject(localPlugin)) { this.localPlugin = Object.values(localPlugin); } } setGlobalPlugin = (globalPlugin = []) => { if (Array.isArray(globalPlugin)) { this.globalPlugin = globalPlugin; } else if (isPlainObject(globalPlugin)) { this.globalPlugin = Object.values(globalPlugin); } }; getPlugin() { return this.basicsPlugin.concat(this.localPlugin).concat(this.globalPlugin); } }