Browse Source

mol-plugin: added PluginContext.state.updateBehavior

David Sehnal 5 years ago
parent
commit
0c459b98db
2 changed files with 12 additions and 1 deletions
  1. 0 1
      src/mol-plugin-ui/state/tree.tsx
  2. 12 0
      src/mol-plugin/state.ts

+ 0 - 1
src/mol-plugin-ui/state/tree.tsx

@@ -112,7 +112,6 @@ class StateTreeNode extends PluginUIComponent<{ cell: StateObjectCell, depth: nu
 
     render() {
         if (this.state.isNull) {
-            console.log('null');
             return null;
         }
 

+ 12 - 0
src/mol-plugin/state.ts

@@ -17,6 +17,7 @@ import { PluginAnimationManager } from '../mol-plugin-state/animation/manager';
 import { ParamDefinition as PD } from '../mol-util/param-definition';
 import { UUID } from '../mol-util';
 import { InteractivityManager } from '../mol-plugin-state/manager/interactivity';
+import { produce } from 'immer';
 export { PluginState }
 
 class PluginState {
@@ -86,6 +87,17 @@ class PluginState {
         return PluginCommands.State.Update(this.plugin, { state, tree, options: { canUndo } });
     }
 
+    updateBehavior<T extends StateTransformer>(behavior: T, params: (old: StateTransformer.Params<T>) => (void | StateTransformer.Params<T>)) {
+        const tree = this.behaviors.build()
+        if (!this.behaviors.tree.transforms.has(behavior.id)) {
+            const defaultParams = behavior.createDefaultParams(void 0 as any, this.plugin);
+            tree.to(PluginBehavior.getCategoryId(behavior)).apply(behavior, produce(defaultParams, params) as any, { ref: behavior.id });
+        } else {
+            tree.to(behavior.id).update(params);
+        }
+        return this.plugin.runTask(this.behaviors.updateTree(tree));
+    }
+
     dispose() {
         this.ev.dispose();
         this.data.dispose();