mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2025-12-12 03:01:16 +00:00
71 lines
2.0 KiB
TypeScript
71 lines
2.0 KiB
TypeScript
import { IPublicTypeCustomView, IPublicApiSetters, IPublicTypeRegisteredSetter } from '@alilc/lowcode-types';
|
|
import { Setters as InnerSetters, globalContext } from '@alilc/lowcode-editor-core';
|
|
import { ReactNode } from 'react';
|
|
import { getLogger } from '@alilc/lowcode-utils';
|
|
|
|
const innerSettersSymbol = Symbol('setters');
|
|
const settersSymbol = Symbol('setters');
|
|
|
|
const logger = getLogger({ level: 'warn', bizName: 'shell-setters' });
|
|
|
|
export class Setters implements IPublicApiSetters {
|
|
readonly [innerSettersSymbol]: InnerSetters;
|
|
|
|
get [settersSymbol](): InnerSetters {
|
|
if (this.workspaceMode) {
|
|
return this[innerSettersSymbol];
|
|
}
|
|
|
|
const workspace = globalContext.get('workspace');
|
|
if (workspace.isActive) {
|
|
if (!workspace.window.innerSetters) {
|
|
logger.error('setter api 调用时机出现问题,请检查');
|
|
return this[innerSettersSymbol];
|
|
}
|
|
return workspace.window.innerSetters;
|
|
}
|
|
|
|
return this[innerSettersSymbol];
|
|
}
|
|
|
|
constructor(innerSetters: InnerSetters, readonly workspaceMode = false) {
|
|
this[innerSettersSymbol] = innerSetters;
|
|
}
|
|
|
|
/**
|
|
* 获取指定 setter
|
|
* @param type
|
|
* @returns
|
|
*/
|
|
getSetter = (type: string) => {
|
|
return this[settersSymbol].getSetter(type);
|
|
};
|
|
|
|
/**
|
|
* 获取已注册的所有 settersMap
|
|
* @returns
|
|
*/
|
|
getSettersMap(): Map<string, IPublicTypeRegisteredSetter & {
|
|
type: string;
|
|
}> {
|
|
return this[settersSymbol].getSettersMap();
|
|
}
|
|
|
|
/**
|
|
* 注册一个 setter
|
|
* @param typeOrMaps
|
|
* @param setter
|
|
* @returns
|
|
*/
|
|
registerSetter = (
|
|
typeOrMaps: string | { [key: string]: IPublicTypeCustomView | IPublicTypeRegisteredSetter },
|
|
setter?: IPublicTypeCustomView | IPublicTypeRegisteredSetter | undefined,
|
|
) => {
|
|
return this[settersSymbol].registerSetter(typeOrMaps, setter);
|
|
};
|
|
|
|
createSetterContent = (setter: any, props: Record<string, any>): ReactNode => {
|
|
return this[settersSymbol].createSetterContent(setter, props);
|
|
};
|
|
}
|