feat: ModularPanel add message channel

This commit is contained in:
pengfei.zhou
2021-05-13 16:57:21 +08:00
committed by osborn
parent 546af79534
commit eb7fc6c137
10 changed files with 375 additions and 20 deletions

View File

@@ -1,11 +1,18 @@
import { Panel } from "../ui/panel";
import { Group } from "../ui/view";
import { ClassType } from "../util/types";
export declare abstract class ModularPanel extends Panel {
export declare abstract class Module extends Panel {
superPanel?: ModularPanel;
dispatchMessage(message: any): void;
onMessage(message: any): void;
}
export declare abstract class ModularPanel extends Module {
private modules;
constructor();
abstract setupModules(): ClassType<Panel>[];
abstract setupShelf(root: Group): Group;
dispatchMessage(message: any): void;
onMessage(message: any): void;
build(root: Group): void;
onCreate(): void;
onDestroy(): void;

View File

@@ -1,8 +1,36 @@
import { Panel } from "../ui/panel";
export class ModularPanel extends Panel {
export class Module extends Panel {
dispatchMessage(message) {
var _a;
(_a = this.superPanel) === null || _a === void 0 ? void 0 : _a.dispatchMessage(message);
}
onMessage(message) { }
}
export class ModularPanel extends Module {
constructor() {
super();
this.modules = this.setupModules().map(e => new e);
this.modules = this.setupModules().map(e => {
const instance = new e;
if (instance instanceof Module) {
instance.superPanel = this;
}
return instance;
});
}
dispatchMessage(message) {
if (this.superPanel) {
this.superPanel.dispatchMessage(message);
}
else {
this.onMessage(message);
}
}
onMessage(message) {
this.modules.forEach(e => {
if (e instanceof Module) {
e.onMessage(message);
}
});
}
build(root) {
const groupView = this.setupShelf(root);