Browse Source

mol-state: StateObjectSelector.update

David Sehnal 5 years ago
parent
commit
9d97e56f03
2 changed files with 12 additions and 1 deletions
  1. 11 0
      src/mol-state/object.ts
  2. 1 1
      src/mol-state/state/builder.ts

+ 11 - 0
src/mol-state/object.ts

@@ -9,6 +9,7 @@ import { StateTransform } from './transform';
 import { ParamDefinition } from '../mol-util/param-definition';
 import { State } from './state';
 import { StateSelection, StateTransformer } from '../mol-state';
+import { StateBuilder } from './state/builder';
 
 export { StateObject, StateObjectCell }
 
@@ -143,6 +144,16 @@ export class StateObjectSelector<S extends StateObject = StateObject, T extends
         return this.obj?.data;
     }
 
+    /** Create a new build and apply update or use the provided one. */
+    update(params: StateTransformer.Params<T>, builder?: StateBuilder.Root | StateBuilder.To<any>): StateBuilder
+    update(params: (old: StateTransformer.Params<T>) => StateTransformer.Params<T>, builder?: StateBuilder.Root | StateBuilder.To<any>): StateBuilder
+    update(params: ((old: StateTransformer.Params<T>) => StateTransformer.Params<T>) | StateTransformer.Params<T>, builder?: StateBuilder.Root | StateBuilder.To<any>): StateBuilder {
+        if (!this.state) throw new Error(`To use update() from StateObjectSelector, 'state' must be defined.`);
+        if (!builder) builder = this.state.build();
+        (builder || this.state.build()).to(this).update(params);
+        return builder;
+    }
+
     /** Checks if the object exists. If not throw an error. */
     checkValid() {
         if (!this.state) {

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

@@ -235,7 +235,7 @@ namespace StateBuilder {
                 params = produce(old.params, provider);
             } else {
                 params = typeof paramsOrTransformer === 'function'
-                    ? paramsOrTransformer(this.state.tree.transforms.get(this.ref)!.params)
+                    ? produce(this.state.tree.transforms.get(this.ref)!.params, paramsOrTransformer)
                     : paramsOrTransformer;
             }