2020-04-27 11:45:42 +08:00

80 lines
2.2 KiB
TypeScript

import { find } from 'lodash';
import {
BaseManager,
connectGeneralManager,
connectGeneralManagerList,
IDesignerController,
IManagerController,
} from './base';
import VisualDesigner from './visualDesigner';
export default class VisualManager extends BaseManager implements IManagerController, IDesignerController {
private visualManagerList: VisualManager[] = [];
private visualDesignerList: VisualDesigner[] = [];
getManager(): VisualManager {
return this.visualManagerList[0];
}
getManagerByName(name?: string): VisualManager[] {
return this.visualManagerList.filter((m) => m.getName() === name);
}
getManagerById(id?: string): VisualManager {
return find(this.visualManagerList, (m) => m.getId() === id) as VisualManager;
}
getManagerList(): VisualManager[] {
return this.visualManagerList;
}
getDesigner(): VisualDesigner {
return this.visualDesignerList[0];
}
getDesignerByName(name?: string): VisualDesigner[] {
return this.visualDesignerList.filter((m) => m.getName() === name);
}
getDesignerById(id?: string): VisualDesigner {
return find(this.visualDesignerList, (m) => m.getId() === id) as VisualDesigner;
}
getDesignerList() {
return this.visualDesignerList;
}
connectManager(manager: VisualManager) {
connectGeneralManager.call(this, manager, this.visualManagerList);
return this;
}
connectDesigner(manager: VisualDesigner): this {
connectGeneralManager.call(this, manager, this.visualDesignerList);
return this;
}
connectManagerList(managerList: VisualManager[]): this {
this.visualManagerList = connectGeneralManagerList.call(this, managerList, this.visualManagerList);
return this;
}
connectDesignerList(managerList: VisualDesigner[]): this {
this.visualDesignerList = connectGeneralManagerList.call(this, managerList, this.visualDesignerList);
return this;
}
notifyAllManagers(eventName: string | symbol, ...eventData: any[]): boolean {
return this.getManagerList()
.map((m) => m.emit(eventName, eventData))
.every((r) => r);
}
notifyAllDesigners(eventName: string | symbol, ...eventData: any[]): boolean {
return this.getDesignerList()
.map((m) => m.emit(eventName, eventData))
.every((r) => r);
}
}