@@ -3,8 +3,10 @@ import {
33 IPublicTypeLocationChildrenDetail ,
44 IPublicModelNode ,
55 IPublicModelPluginContext ,
6+ IPublicTypeDisposable ,
67} from '@alilc/lowcode-types' ;
78import { isI18nData , isLocationChildrenDetail } from '@alilc/lowcode-utils' ;
9+ import EventEmitter from 'events' ;
810import { Tree } from './tree' ;
911
1012/**
@@ -21,14 +23,61 @@ export interface FilterResult {
2123 keywords : string ;
2224}
2325
26+ enum EVENT_NAMES {
27+ filterResultChanged = 'filterResultChanged' ,
28+
29+ expandedChanged = 'expandedChanged' ,
30+
31+ hiddenChanged = 'hiddenChanged' ,
32+
33+ lockedChanged = 'lockedChanged' ,
34+
35+ titleLabelChanged = 'titleLabelChanged' ,
36+
37+ expandableChanged = 'expandableChanged' ,
38+ }
39+
2440export default class TreeNode {
2541 readonly pluginContext : IPublicModelPluginContext ;
26- onFilterResultChanged : ( ) => void ;
27- onExpandedChanged : ( expanded : boolean ) => void ;
28- onHiddenChanged : ( hidden : boolean ) => void ;
29- onLockedChanged : ( locked : boolean ) => void ;
30- onTitleLabelChanged : ( treeNode : TreeNode ) => void ;
31- onExpandableChanged : ( expandable : boolean ) => void ;
42+ event = new EventEmitter ( ) ;
43+
44+ onFilterResultChanged ( fn : ( ) => void ) : IPublicTypeDisposable {
45+ this . event . on ( EVENT_NAMES . filterResultChanged , fn ) ;
46+ return ( ) => {
47+ this . event . off ( EVENT_NAMES . filterResultChanged , fn ) ;
48+ }
49+ } ;
50+ onExpandedChanged ( fn : ( expanded : boolean ) => void ) : IPublicTypeDisposable {
51+ this . event . on ( EVENT_NAMES . expandedChanged , fn ) ;
52+ return ( ) => {
53+ this . event . off ( EVENT_NAMES . expandedChanged , fn ) ;
54+ }
55+ } ;
56+ onHiddenChanged ( fn : ( hidden : boolean ) => void ) : IPublicTypeDisposable {
57+ this . event . on ( EVENT_NAMES . hiddenChanged , fn ) ;
58+ return ( ) => {
59+ this . event . off ( EVENT_NAMES . hiddenChanged , fn ) ;
60+ }
61+ } ;
62+ onLockedChanged ( fn : ( locked : boolean ) => void ) : IPublicTypeDisposable {
63+ this . event . on ( EVENT_NAMES . lockedChanged , fn ) ;
64+ return ( ) => {
65+ this . event . off ( EVENT_NAMES . lockedChanged , fn ) ;
66+ }
67+ } ;
68+ onTitleLabelChanged ( fn : ( treeNode : TreeNode ) => void ) : IPublicTypeDisposable {
69+ this . event . on ( EVENT_NAMES . titleLabelChanged , fn ) ;
70+
71+ return ( ) => {
72+ this . event . off ( EVENT_NAMES . titleLabelChanged , fn ) ;
73+ }
74+ } ;
75+ onExpandableChanged ( fn : ( expandable : boolean ) => void ) : IPublicTypeDisposable {
76+ this . event . on ( EVENT_NAMES . expandableChanged , fn ) ;
77+ return ( ) => {
78+ this . event . off ( EVENT_NAMES . expandableChanged , fn ) ;
79+ }
80+ }
3281
3382 get id ( ) : string {
3483 return this . node . id ;
@@ -46,7 +95,7 @@ export default class TreeNode {
4695 * 触发 onExpandableChanged 回调
4796 */
4897 notifyExpandableChanged ( ) : void {
49- this . onExpandableChanged && this . onExpandableChanged ( this . expandable ) ;
98+ this . event . emit ( EVENT_NAMES . expandableChanged , this . expandable ) ;
5099 }
51100
52101 /**
@@ -99,7 +148,7 @@ export default class TreeNode {
99148
100149 setExpanded ( value : boolean ) {
101150 this . _expanded = value ;
102- this . onExpandedChanged && this . onExpandedChanged ( value ) ;
151+ this . event . emit ( EVENT_NAMES . expandedChanged , value ) ;
103152 }
104153
105154 get detecting ( ) {
@@ -120,7 +169,7 @@ export default class TreeNode {
120169 return ;
121170 }
122171 this . node . visible = ! flag ;
123- this . onHiddenChanged && this . onHiddenChanged ( flag ) ;
172+ this . event . emit ( EVENT_NAMES . hiddenChanged , flag ) ;
124173 }
125174
126175 get locked ( ) : boolean {
@@ -129,7 +178,7 @@ export default class TreeNode {
129178
130179 setLocked ( flag : boolean ) {
131180 this . node . lock ( flag ) ;
132- this . onLockedChanged && this . onLockedChanged ( flag ) ;
181+ this . event . emit ( EVENT_NAMES . lockedChanged , flag ) ;
133182 }
134183
135184 get selected ( ) : boolean {
@@ -174,11 +223,11 @@ export default class TreeNode {
174223 } else {
175224 this . node . getExtraProp ( 'title' , true ) ?. setValue ( label ) ;
176225 }
177- this . onTitleLabelChanged && this . onTitleLabelChanged ( this ) ;
226+ this . event . emit ( EVENT_NAMES . titleLabelChanged , this ) ;
178227 }
179228
180229 get icon ( ) {
181- return this . node . componentMeta . icon ;
230+ return this . node . componentMeta ? .icon ;
182231 }
183232
184233 get parent ( ) : TreeNode | null {
@@ -282,8 +331,6 @@ export default class TreeNode {
282331
283332 setFilterReult ( val : FilterResult ) {
284333 this . _filterResult = val ;
285- if ( this . onFilterResultChanged ) {
286- this . onFilterResultChanged ( ) ;
287- }
334+ this . event . emit ( EVENT_NAMES . filterResultChanged )
288335 }
289336}
0 commit comments