浏览代码

added/removed events for StateActionManager

Alexander Rose 5 年之前
父节点
当前提交
4901ec3b5d
共有 3 个文件被更改,包括 19 次插入0 次删除
  1. 3 0
      src/mol-plugin-ui/state/actions.tsx
  2. 15 0
      src/mol-state/action/manager.ts
  3. 1 0
      src/mol-state/state.ts

+ 3 - 0
src/mol-plugin-ui/state/actions.tsx

@@ -26,6 +26,9 @@ export class StateObjectActions extends PluginUIComponent<{ state: State, nodeRe
             if (current.ref !== ref || current.state !== state) return;
             this.forceUpdate();
         });
+
+        this.subscribe(this.plugin.state.data.actions.events.added, () => this.forceUpdate());
+        this.subscribe(this.plugin.state.data.actions.events.removed, () => this.forceUpdate());
     }
 
     render() {

+ 15 - 0
src/mol-state/action/manager.ts

@@ -9,13 +9,20 @@ import { StateObject, StateObjectCell } from '../object';
 import { StateTransformer } from '../transformer';
 import { UUID } from '../../mol-util';
 import { arraySetRemove } from '../../mol-util/array';
+import { RxEventHelper } from '../../mol-util/rx-event-helper';
 
 export { StateActionManager };
 
 class StateActionManager {
+    private ev = RxEventHelper.create();
     private actions: Map<StateAction['id'], StateAction> = new Map();
     private fromTypeIndex = new Map<StateObject.Type, StateAction[]>();
 
+    readonly events = {
+        added: this.ev<undefined>(),
+        removed: this.ev<undefined>(),
+    }
+
     add(actionOrTransformer: StateAction | StateTransformer) {
         const action = StateTransformer.is(actionOrTransformer) ? actionOrTransformer.toAction() : actionOrTransformer;
 
@@ -31,6 +38,8 @@ class StateActionManager {
             }
         }
 
+        this.events.added.next();
+
         return this;
     }
 
@@ -53,6 +62,8 @@ class StateActionManager {
             if (xs.length === 0) this.fromTypeIndex.delete(t.type);
         }
 
+        this.events.removed.next();
+
         return this;
     }
 
@@ -83,4 +94,8 @@ class StateActionManager {
         }
         return ret;
     }
+
+    dispose() {
+        this.ev.dispose();
+    }
 }

+ 1 - 0
src/mol-state/state.ts

@@ -138,6 +138,7 @@ class State {
 
     dispose() {
         this.ev.dispose();
+        this.actions.dispose();
     }
 
     /**