@@ -11,16 +11,26 @@ import { VNode } from '../../core/src/VNodes/VNode';
1111import { LabelNode } from '../../plugin-layout/src/LabelNode' ;
1212import { ZoneNode } from '../../plugin-layout/src/ZoneNode' ;
1313import { DomObjectActionable } from './ActionableDomObjectRenderer' ;
14+ import { RenderingEngine } from '../../plugin-renderer/src/RenderingEngine' ;
1415
1516export class ActionableGroupSelectItemDomObjectRenderer extends AbstractRenderer < DomObject > {
1617 static id = DomObjectRenderingEngine . id ;
1718 engine : DomObjectRenderingEngine ;
1819 predicate = ( node : VNode ) : boolean => node . ancestors ( ActionableGroupNode ) . length >= 2 ;
1920
21+ actionableNodes = new Map < ActionableNode , HTMLElement > ( ) ;
22+
23+ constructor ( engine : DomObjectRenderingEngine ) {
24+ super ( engine ) ;
25+ this . engine . editor . dispatcher . registerCommandHook (
26+ 'commit' ,
27+ this . _updateActionables . bind ( this ) ,
28+ ) ;
29+ }
30+
2031 async render ( item : VNode ) : Promise < DomObject > {
2132 let domObject : DomObject ;
2233 if ( item instanceof ActionableNode ) {
23- let updateOption : ( ) => void ;
2434 let handler : ( ev : Event ) => void ;
2535 const domObjectActionable : DomObjectActionable = {
2636 tag : 'OPTION' ,
@@ -43,14 +53,12 @@ export class ActionableGroupSelectItemDomObjectRenderer extends AbstractRenderer
4353 }
4454 } ;
4555 select . addEventListener ( 'change' , handler ) ;
46- updateOption = this . _updateOption . bind ( this , item , el ) ;
47- updateOption ( ) ;
48- this . engine . editor . dispatcher . registerCommandHook ( 'commit' , updateOption ) ;
56+ this . actionableNodes . set ( item , el ) ;
4957 } ,
5058 detach : ( el : HTMLOptionElement ) : void => {
5159 const select = el . closest ( 'select' ) || el . parentElement ;
5260 select . removeEventListener ( 'change' , handler ) ;
53- this . engine . editor . dispatcher . removeCommandHook ( 'commit' , updateOption ) ;
61+ this . actionableNodes . delete ( item ) ;
5462 } ,
5563 } ;
5664 domObject = domObjectActionable ;
@@ -105,17 +113,26 @@ export class ActionableGroupSelectItemDomObjectRenderer extends AbstractRenderer
105113
106114 return domObject ;
107115 }
116+
117+ protected _updateActionables ( ) : void {
118+ const pathChanges = this . engine . editor . memory . getChangedVersionables ( ) ;
119+ console . log ( pathChanges ) ;
120+
121+ for ( const [ button , element ] of this . actionableNodes ) {
122+ this . _updateActionable ( button , element ) ;
123+ }
124+ }
108125 /**
109126 * Update option rendering after the command if the value of selected or
110127 * enabled change.
111128 *
112- * @param button
129+ * @param aactionable
113130 * @param element
114131 */
115- private _updateOption ( button : ActionableNode , element : HTMLOptionElement ) : void {
132+ protected _updateActionable ( aactionable : ActionableNode , element : HTMLElement ) : void {
116133 const editor = this . engine . editor ;
117- const select = button . selected ( editor ) ;
118- const enable = button . enabled ( editor ) ;
134+ const select = aactionable . selected ( editor ) ;
135+ const enable = aactionable . enabled ( editor ) ;
119136 const attrSelected = element . getAttribute ( 'selected' ) ;
120137 if ( select . toString ( ) !== attrSelected ) {
121138 if ( select ) {
0 commit comments