diff --git a/packages/plugin-outline-pane/src/controllers/tree-node.ts b/packages/plugin-outline-pane/src/controllers/tree-node.ts index 2a6bc0aca..af82904ee 100644 --- a/packages/plugin-outline-pane/src/controllers/tree-node.ts +++ b/packages/plugin-outline-pane/src/controllers/tree-node.ts @@ -35,6 +35,8 @@ enum EVENT_NAMES { titleLabelChanged = 'titleLabelChanged', expandableChanged = 'expandableChanged', + + conditionChanged = 'conditionChanged', } export default class TreeNode { @@ -152,6 +154,10 @@ export default class TreeNode { return this.node.slots.map((node) => this.tree.getTreeNode(node)); } + get condition(): boolean { + return this.node.hasCondition() && !this.node.conditionGroup; + } + get children(): TreeNode[] | null { return this.node.children?.map((node) => this.tree.getTreeNode(node)) || null; } @@ -203,6 +209,15 @@ export default class TreeNode { this.event.off(EVENT_NAMES.titleLabelChanged, fn); }; } + + onConditionChanged(fn: (treeNode: TreeNode) => void): IPublicTypeDisposable { + this.event.on(EVENT_NAMES.conditionChanged, fn); + + return () => { + this.event.off(EVENT_NAMES.conditionChanged, fn); + }; + } + onExpandableChanged(fn: (expandable: boolean) => void): IPublicTypeDisposable { this.event.on(EVENT_NAMES.expandableChanged, fn); return () => { @@ -221,6 +236,10 @@ export default class TreeNode { this.event.emit(EVENT_NAMES.titleLabelChanged, this.title); } + notifyConditionChanged(): void { + this.event.emit(EVENT_NAMES.conditionChanged, this.condition); + } + setHidden(flag: boolean) { if (this.node.conditionGroup) { return; diff --git a/packages/plugin-outline-pane/src/controllers/tree.ts b/packages/plugin-outline-pane/src/controllers/tree.ts index 94cab7879..7b9ad0593 100644 --- a/packages/plugin-outline-pane/src/controllers/tree.ts +++ b/packages/plugin-outline-pane/src/controllers/tree.ts @@ -35,6 +35,9 @@ export class Tree { if (key === '___title___') { const treeNode = this.getTreeNodeById(node.id); treeNode?.notifyTitleLabelChanged(); + } else if (key === '___condition___') { + const treeNode = this.getTreeNodeById(node.id); + treeNode?.notifyConditionChanged(); } }); } diff --git a/packages/plugin-outline-pane/src/views/tree-title.tsx b/packages/plugin-outline-pane/src/views/tree-title.tsx index 96a3dfa7b..923213238 100644 --- a/packages/plugin-outline-pane/src/views/tree-title.tsx +++ b/packages/plugin-outline-pane/src/views/tree-title.tsx @@ -27,6 +27,7 @@ export default class TreeTitle extends PureComponent<{ state: { editing: boolean; title: string; + condition?: boolean; } = { editing: false, title: '', @@ -80,12 +81,18 @@ export default class TreeTitle extends PureComponent<{ this.setState({ editing: false, title: treeNode.titleLabel, + condition: treeNode.condition, }); treeNode.onTitleLabelChanged(() => { this.setState({ title: treeNode.titleLabel, }); }); + treeNode.onConditionChanged(() => { + this.setState({ + condition: treeNode.condition, + }); + }); } render() { @@ -188,7 +195,7 @@ export default class TreeTitle extends PureComponent<{ {intlNode('Loop')} )} - {node.hasCondition() && !node.conditionGroup && ( + {this.state.condition && ( {/* todo: click todo something */}