Browse Source

do not include optional params in default values; interval range support

David Sehnal 6 years ago
parent
commit
860a1fa52e
1 changed files with 17 additions and 11 deletions
  1. 17 11
      src/mol-util/param-definition.ts

+ 17 - 11
src/mol-util/param-definition.ts

@@ -75,8 +75,7 @@ export namespace ParamDefinition {
         return setInfo<Color>({ type: 'color', defaultValue }, info)
     }
 
-    export interface Numeric extends Base<number> {
-        type: 'number'
+    export interface Range {
         /** If given treat as a range. */
         min?: number
         /** If given treat as a range. */
@@ -87,10 +86,7 @@ export namespace ParamDefinition {
          */
         step?: number
     }
-    export function Numeric(defaultValue: number, range?: { min?: number, max?: number, step?: number }, info?: Info): Numeric {
-        return setInfo<Numeric>(setRange({ type: 'number', defaultValue }, range), info)
-    }
-    function setRange(p: Numeric, range?: { min?: number, max?: number, step?: number }) {
+    function setRange<T extends Numeric | Interval>(p: T, range?: { min?: number, max?: number, step?: number }) {
         if (!range) return p;
         if (typeof range.min !== 'undefined') p.min = range.min;
         if (typeof range.max !== 'undefined') p.max = range.max;
@@ -98,11 +94,18 @@ export namespace ParamDefinition {
         return p;
     }
 
-    export interface Interval extends Base<[number, number]> {
+    export interface Numeric extends Base<number>, Range {
+        type: 'number'
+    }
+    export function Numeric(defaultValue: number, range?: { min?: number, max?: number, step?: number }, info?: Info): Numeric {
+        return setInfo<Numeric>(setRange({ type: 'number', defaultValue }, range), info)
+    }
+
+    export interface Interval extends Base<[number, number]>, Range {
         type: 'interval'
     }
-    export function Interval(defaultValue: [number, number], info?: Info): Interval {
-        return setInfo<Interval>({ type: 'interval', defaultValue }, info)
+    export function Interval(defaultValue: [number, number], range?: { min?: number, max?: number, step?: number }, info?: Info): Interval {
+        return setInfo<Interval>(setRange({ type: 'interval', defaultValue }, range), info)
     }
 
     export interface LineGraph extends Base<Vec2[]> {
@@ -151,8 +154,11 @@ export namespace ParamDefinition {
 
     export function getDefaultValues<T extends Params>(params: T) {
         const d: { [k: string]: any } = {}
-        Object.keys(params).forEach(k => d[k] = params[k].defaultValue)
-        return d as Values<T>
+        for (const k of Object.keys(params)) {
+            if (params[k].isOptional) continue;
+            d[k] = params[k].defaultValue;
+        }
+        return d as Values<T>;
     }
 
     export function getLabels<T extends Params>(params: T) {