Browse Source

PD.normalizeParams update

dsehnal 4 years ago
parent
commit
8fbba52de8

+ 1 - 1
src/mol-canvas3d/canvas3d.ts

@@ -694,7 +694,7 @@ namespace Canvas3D {
                     ? produce(getProps(), properties)
                     : properties;
 
-                props = PD.normalizeParams(Canvas3DParams, props, 'children', true);
+                props = PD.normalizeParams(Canvas3DParams, props, 'children');
 
                 const cameraState: Partial<Camera.Snapshot> = Object.create(null);
                 if (props.camera && props.camera.mode !== undefined && props.camera.mode !== camera.state.mode) {

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

@@ -80,7 +80,7 @@ interface StateObjectCell<T extends StateObject = StateObject, F extends StateTr
         values: any
     } | undefined,
 
-    paramsNormalized: boolean,
+    paramsNormalizedVersion: string,
 
     dependencies: {
         dependentBy: StateObjectCell[],

+ 5 - 5
src/mol-state/state.ts

@@ -378,7 +378,7 @@ class State {
                 definition: {},
                 values: {}
             },
-            paramsNormalized: true,
+            paramsNormalizedVersion: root.version,
             dependencies: { dependentBy: [], dependsOn: [] },
             cache: { }
         });
@@ -663,7 +663,7 @@ function addCellsVisitor(transform: StateTransform, _: any, { ctx, added, visite
         state: { ...transform.state },
         errorText: void 0,
         params: void 0,
-        paramsNormalized: false,
+        paramsNormalizedVersion: '',
         dependencies: { dependentBy: [], dependsOn: [] },
         cache: void 0
     };
@@ -846,9 +846,9 @@ function resolveParams(ctx: UpdateContext, transform: StateTransform, src: State
     const prms = transform.transformer.definition.params;
     const definition = prms ? prms(src, ctx.parent.globalContext) : {};
 
-    if (!cell.paramsNormalized) {
-        (transform.params as any) = ParamDefinition.normalizeParams(definition, transform.params, 'all', false);
-        cell.paramsNormalized = true;
+    if (cell.paramsNormalizedVersion !== transform.version) {
+        (transform.params as any) = ParamDefinition.normalizeParams(definition, transform.params, 'all');
+        cell.paramsNormalizedVersion = transform.version;
     } else {
         const defaultValues = ParamDefinition.getDefaultValues(definition);
         (transform.params as any) = transform.params

+ 8 - 8
src/mol-util/param-definition.ts

@@ -555,7 +555,7 @@ export namespace ParamDefinition {
         return false;
     }
 
-    function normalizeParam(p: Any, value: any, defaultIfUndefined: boolean, prune: boolean): any {
+    function normalizeParam(p: Any, value: any, defaultIfUndefined: boolean): any {
         if (value === void 0 || value === null) {
             return defaultIfUndefined ? p.defaultValue : void 0;
         }
@@ -568,13 +568,13 @@ export namespace ParamDefinition {
         if (p.type === 'value') {
             return value;
         } else if (p.type === 'group') {
-            const ret = prune ? Object.create(null) : { ...value };
+            const ret = Object.create(null);
             for (const key of Object.keys(p.params)) {
                 const param = p.params[key];
                 if (value[key] === void 0) {
                     if (defaultIfUndefined) ret[key] = param.defaultValue;
                 } else {
-                    ret[key] = normalizeParam(param, value[key], defaultIfUndefined, prune);
+                    ret[key] = normalizeParam(param, value[key], defaultIfUndefined);
                 }
             }
             return ret;
@@ -594,7 +594,7 @@ export namespace ParamDefinition {
             const param = p.map(v.name);
             return {
                 name: v.name,
-                params: normalizeParam(param, v.params, defaultIfUndefined, prune)
+                params: normalizeParam(param, v.params, defaultIfUndefined)
             };
         } else if (p.type === 'select') {
             if (!selectHasOption(p, value)) return p.defaultValue;
@@ -606,7 +606,7 @@ export namespace ParamDefinition {
             return ret;
         } else if (p.type === 'object-list') {
             if (!Array.isArray(value)) return p.defaultValue;
-            return value.map(v => normalizeParams(p.element, v, defaultIfUndefined ? 'all' : 'skip', prune));
+            return value.map(v => normalizeParams(p.element, v, defaultIfUndefined ? 'all' : 'skip'));
         }
 
         // TODO: validate/normalize all param types "properly"??
@@ -614,18 +614,18 @@ export namespace ParamDefinition {
         return value;
     }
 
-    export function normalizeParams(p: Params, value: any, defaultIfUndefined: 'all' | 'children' | 'skip', prune: boolean) {
+    export function normalizeParams(p: Params, value: any, defaultIfUndefined: 'all' | 'children' | 'skip') {
         if (typeof value !== 'object' || value === null) {
             return defaultIfUndefined ? getDefaultValues(p) : value;
         }
 
-        const ret = prune ? Object.create(null) : { ...value };
+        const ret = Object.create(null);
         for (const key of Object.keys(p)) {
             const param = p[key];
             if (value[key] === void 0) {
                 if (defaultIfUndefined === 'all') ret[key] = param.defaultValue;
             } else {
-                ret[key] = normalizeParam(param, value[key], defaultIfUndefined !== 'skip', prune);
+                ret[key] = normalizeParam(param, value[key], defaultIfUndefined !== 'skip');
             }
         }
         return ret;