mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2026-01-27 21:28:14 +00:00
87 lines
2.7 KiB
TypeScript
87 lines
2.7 KiB
TypeScript
/* eslint-disable no-multi-assign */
|
|
import { Editor, EngineConfig, engineConfig } from '@alilc/lowcode-editor-core';
|
|
import { Designer, ILowCodePluginManager } from '@alilc/lowcode-designer';
|
|
import { Skeleton as InnerSkeleton } from '@alilc/lowcode-editor-skeleton';
|
|
import {
|
|
Hotkey,
|
|
Project,
|
|
Skeleton,
|
|
Setters,
|
|
Material,
|
|
Event,
|
|
editorSymbol,
|
|
designerSymbol,
|
|
skeletonSymbol,
|
|
} from '@alilc/lowcode-shell';
|
|
import { getLogger, Logger } from '@alilc/lowcode-utils';
|
|
import {
|
|
ILowCodePluginContext,
|
|
IPluginContextOptions,
|
|
ILowCodePluginPreferenceDeclaration,
|
|
PreferenceValueType,
|
|
IPluginPreferenceMananger,
|
|
} from './plugin-types';
|
|
import { isValidPreferenceKey } from './plugin-utils';
|
|
|
|
export default class PluginContext implements ILowCodePluginContext {
|
|
private readonly [editorSymbol]: Editor;
|
|
private readonly [designerSymbol]: Designer;
|
|
private readonly [skeletonSymbol]: InnerSkeleton;
|
|
hotkey: Hotkey;
|
|
project: Project;
|
|
skeleton: Skeleton;
|
|
logger: Logger;
|
|
setters: Setters;
|
|
material: Material;
|
|
config: EngineConfig;
|
|
event: Event;
|
|
plugins: ILowCodePluginManager;
|
|
preference: IPluginPreferenceMananger;
|
|
|
|
constructor(plugins: ILowCodePluginManager, options: IPluginContextOptions) {
|
|
const editor = this[editorSymbol] = plugins.editor;
|
|
const designer = this[designerSymbol] = editor.get('designer')!;
|
|
const skeleton = this[skeletonSymbol] = editor.get('skeleton')!;
|
|
|
|
const { pluginName = 'anonymous' } = options;
|
|
const project = designer?.project;
|
|
this.hotkey = new Hotkey();
|
|
this.project = new Project(project);
|
|
this.skeleton = new Skeleton(skeleton);
|
|
this.setters = new Setters();
|
|
this.material = new Material(editor);
|
|
this.config = engineConfig;
|
|
this.plugins = plugins;
|
|
this.event = new Event(editor, { prefix: 'common' });
|
|
this.logger = getLogger({ level: 'warn', bizName: `designer:plugin:${pluginName}` });
|
|
|
|
const enhancePluginContextHook = engineConfig.get('enhancePluginContextHook');
|
|
if (enhancePluginContextHook) {
|
|
enhancePluginContextHook(this);
|
|
}
|
|
}
|
|
|
|
setPreference(
|
|
pluginName: string,
|
|
preferenceDeclaration: ILowCodePluginPreferenceDeclaration,
|
|
): void {
|
|
const getPreferenceValue = (
|
|
key: string,
|
|
defaultValue?: PreferenceValueType,
|
|
): PreferenceValueType | undefined => {
|
|
if (!isValidPreferenceKey(key, preferenceDeclaration)) {
|
|
return undefined;
|
|
}
|
|
const pluginPreference = this.plugins.getPluginPreference(pluginName) || {};
|
|
if (pluginPreference[key] === undefined || pluginPreference[key] === null) {
|
|
return defaultValue;
|
|
}
|
|
return pluginPreference[key];
|
|
};
|
|
|
|
this.preference = {
|
|
getPreferenceValue,
|
|
};
|
|
}
|
|
}
|