From cf0d5673e66d40446a3b4f59795fa6122b0252eb Mon Sep 17 00:00:00 2001
From: David Sehnal <david.sehnal@gmail.com>
Date: Wed, 14 Nov 2018 17:44:35 +0100
Subject: [PATCH] wip, params

---
 src/mol-plugin/state/actions/basic.ts      |  2 +-
 src/mol-plugin/state/transforms/data.ts    |  2 +-
 src/mol-plugin/state/transforms/visuals.ts |  5 ++++-
 src/mol-plugin/ui/state/parameters.tsx     | 17 ++++++++++-------
 src/mol-state/action.ts                    |  2 +-
 src/mol-state/transformer.ts               | 11 ++++++++++-
 src/mol-util/param-definition.ts           | 12 +++---------
 7 files changed, 30 insertions(+), 21 deletions(-)

diff --git a/src/mol-plugin/state/actions/basic.ts b/src/mol-plugin/state/actions/basic.ts
index b8acbafe8..85c3814a8 100644
--- a/src/mol-plugin/state/actions/basic.ts
+++ b/src/mol-plugin/state/actions/basic.ts
@@ -22,7 +22,7 @@ export const CreateStructureFromPDBe = StateAction.create<PluginStateObject.Root
         definition: () => ({
             id: PD.Text('PDB id', '', '1grm'),
         }),
-        validate: p => !p.id || !p.id.trim() ? [['Enter id.', 'id']] : void 0
+        // validate: p => !p.id || !p.id.trim() ? [['Enter id.', 'id']] : void 0
     },
     apply({ params, state }) {
         const url = `http://www.ebi.ac.uk/pdbe/static/entry/${params.id.toLowerCase()}_updated.cif`;
diff --git a/src/mol-plugin/state/transforms/data.ts b/src/mol-plugin/state/transforms/data.ts
index 2f3e631cf..3c7c043fd 100644
--- a/src/mol-plugin/state/transforms/data.ts
+++ b/src/mol-plugin/state/transforms/data.ts
@@ -31,7 +31,7 @@ const Download = PluginStateTransform.Create<SO.Root, SO.Data.String | SO.Data.B
             label: PD.Text('Label', '', ''),
             isBinary: PD.Boolean('Binary', 'If true, download data as binary (string otherwise)', false)
         }),
-        validate: p => !p.url || !p.url.trim() ? [['Enter url.', 'url']] : void 0
+        // validate: p => !p.url || !p.url.trim() ? [['Enter url.', 'url']] : void 0
     },
     apply({ params: p }, globalCtx: PluginContext) {
         return Task.create('Download', async ctx => {
diff --git a/src/mol-plugin/state/transforms/visuals.ts b/src/mol-plugin/state/transforms/visuals.ts
index 6bc0aa12e..62eb11bc4 100644
--- a/src/mol-plugin/state/transforms/visuals.ts
+++ b/src/mol-plugin/state/transforms/visuals.ts
@@ -14,7 +14,10 @@ import { ParamDefinition as PD } from 'mol-util/param-definition';
 export { CreateStructureRepresentation }
 namespace CreateStructureRepresentation {
     export interface Params {
-        type: { name: string, params: any /** todo is there "common type" */ }
+        type: { name: string, params: any /** todo is there "common type" */ },
+        // TODO
+        // colorTheme: { name: string, params: any /** todo is there "common type" */ }
+        // sizeTheme: { name: string, params: any /** todo is there "common type" */ }
     }
 }
 const CreateStructureRepresentation = PluginStateTransform.Create<SO.Molecule.Structure, SO.Molecule.Representation3D, CreateStructureRepresentation.Params>({
diff --git a/src/mol-plugin/ui/state/parameters.tsx b/src/mol-plugin/ui/state/parameters.tsx
index 81f3e5915..86d6727bd 100644
--- a/src/mol-plugin/ui/state/parameters.tsx
+++ b/src/mol-plugin/ui/state/parameters.tsx
@@ -4,7 +4,7 @@
  * @author David Sehnal <david.sehnal@gmail.com>
  */
 
-import { StateObject, State, Transform, StateObjectCell } from 'mol-state';
+import { StateObject, State, Transform, StateObjectCell, Transformer } from 'mol-state';
 import { shallowEqual } from 'mol-util/object';
 import * as React from 'react';
 import { PurePluginComponent } from '../base';
@@ -23,11 +23,14 @@ class StateTransformParameters extends PurePluginComponent<StateTransformParamet
     }
 
     validate(params: any) {
-        const validate = this.props.info.definition.validate;
-        if (!validate) return void 0;
-        const result = validate(params, this.props.info.source, this.plugin);
-        if (!result || result.length === 0) return void 0;
-        return result.map(r => r[0]);
+        // TODO
+        return void 0;
+
+        // const validate = this.props.info.definition.validate;
+        // if (!validate) return void 0;
+        // const result = validate(params, this.props.info.source, this.plugin);
+        // if (!result || result.length === 0) return void 0;
+        // return result.map(r => r[0]);
     }
 
     areInitial(params: any) {
@@ -50,7 +53,7 @@ class StateTransformParameters extends PurePluginComponent<StateTransformParamet
 namespace StateTransformParameters {
     export interface Props {
         info: {
-            definition: PD.Provider,
+            definition: Transformer.ParamsProvider,
             params: PD.Params,
             initialValues: any,
             source: StateObject,
diff --git a/src/mol-state/action.ts b/src/mol-state/action.ts
index 4898eb6be..a4e6fb42b 100644
--- a/src/mol-state/action.ts
+++ b/src/mol-state/action.ts
@@ -46,7 +46,7 @@ namespace StateAction {
          */
         apply(params: ApplyParams<A, P>, globalCtx: unknown): T | Task<T>,
 
-        readonly params?: PD.Provider<A, P, unknown>
+        readonly params?: Transformer.ParamsProvider<A, P>
 
         /** Test if the transform can be applied to a given node */
         isApplicable?(a: A, globalCtx: unknown): boolean
diff --git a/src/mol-state/transformer.ts b/src/mol-state/transformer.ts
index 1bf6aacee..e9b8acfa2 100644
--- a/src/mol-state/transformer.ts
+++ b/src/mol-state/transformer.ts
@@ -47,6 +47,15 @@ export namespace Transformer {
 
     export enum UpdateResult { Unchanged, Updated, Recreate }
 
+    export interface ParamsProvider<A extends StateObject = StateObject, P = any> {
+        /** Check the parameters and return a list of errors if the are not valid. */
+        default?(a: A, globalCtx: unknown): P,
+        /** Specify default control descriptors for the parameters */
+        definition?(a: A, globalCtx: unknown): { [K in keyof P]?: PD.Any },
+        /** Optional custom parameter equality. Use shallow structural equal by default. */
+        areEqual?(oldParams: P, newParams: P): boolean
+    }
+
     export interface Definition<A extends StateObject = StateObject, B extends StateObject = StateObject, P = unknown> {
         readonly name: string,
         readonly from: StateObject.Ctor[],
@@ -66,7 +75,7 @@ export namespace Transformer {
          */
         update?(params: UpdateParams<A, B, P>, globalCtx: unknown): Task<UpdateResult> | UpdateResult,
 
-        readonly params?: PD.Provider<A, P, unknown>,
+        readonly params?: ParamsProvider<A, P>,
 
         /** Test if the transform can be applied to a given node */
         isApplicable?(a: A, globalCtx: unknown): boolean,
diff --git a/src/mol-util/param-definition.ts b/src/mol-util/param-definition.ts
index ffc2d93f5..c77857660 100644
--- a/src/mol-util/param-definition.ts
+++ b/src/mol-util/param-definition.ts
@@ -135,14 +135,8 @@ export namespace ParamDefinition {
      */
     export type ParamErrors = [string, string | string[]][]
 
-    export interface Provider<A = any, P = any, Ctx = any> {
-        /** Check the parameters and return a list of errors if the are not valid. */
-        default?(a: A, globalCtx: Ctx): P,
-        /** Specify default control descriptors for the parameters */
-        definition?(a: A, globalCtx: Ctx): { [K in keyof P]?: Any },
-        /** Check the parameters and return a list of errors if the are not valid. */
-        validate?(params: P, a: A, globalCtx: unknown): ParamErrors | undefined,
-        /** Optional custom parameter equality. Use shallow structural equal by default. */
-        areEqual?(oldParams: P, newParams: P): boolean
+    export function validate(params: Params, values: any): ParamErrors | undefined {
+        // TODO
+        return void 0;
     }
 }
\ No newline at end of file
-- 
GitLab