lowcode-engine/packages/shell/src/model/modal-nodes-manager.ts

76 lines
2.0 KiB
TypeScript

import {
IModalNodesManager as InnerModalNodesManager,
INode as InnerNode,
} from '@alilc/lowcode-designer';
import { IPublicModelModalNodesManager, IPublicModelNode } from '@alilc/lowcode-types';
import { Node as ShellNode } from './node';
import { nodeSymbol, modalNodesManagerSymbol } from '../symbols';
export class ModalNodesManager implements IPublicModelModalNodesManager {
private readonly [modalNodesManagerSymbol]: InnerModalNodesManager;
constructor(modalNodesManager: InnerModalNodesManager) {
this[modalNodesManagerSymbol] = modalNodesManager;
}
static create(
modalNodesManager: InnerModalNodesManager | null,
): IPublicModelModalNodesManager | null {
if (!modalNodesManager) {
return null;
}
return new ModalNodesManager(modalNodesManager);
}
/**
* 设置模态节点,触发内部事件
*/
setNodes(): void {
this[modalNodesManagerSymbol].setNodes();
}
/**
* 获取模态节点(们)
*/
getModalNodes(): IPublicModelNode[] {
const innerNodes = this[modalNodesManagerSymbol].getModalNodes();
const shellNodes: IPublicModelNode[] = [];
innerNodes?.forEach((node: InnerNode) => {
const shellNode = ShellNode.create(node);
if (shellNode) {
shellNodes.push(shellNode);
}
});
return shellNodes;
}
/**
* 获取当前可见的模态节点
*/
getVisibleModalNode(): IPublicModelNode | null {
return ShellNode.create(this[modalNodesManagerSymbol].getVisibleModalNode());
}
/**
* 隐藏模态节点(们)
*/
hideModalNodes(): void {
this[modalNodesManagerSymbol].hideModalNodes();
}
/**
* 设置指定节点为可见态
* @param node Node
*/
setVisible(node: IPublicModelNode): void {
this[modalNodesManagerSymbol].setVisible((node as any)[nodeSymbol]);
}
/**
* 设置指定节点为不可见态
* @param node Node
*/
setInvisible(node: IPublicModelNode): void {
this[modalNodesManagerSymbol].setInvisible((node as any)[nodeSymbol]);
}
}