From bcaead92e91849b22ef10c09e16463b8c94f1628 Mon Sep 17 00:00:00 2001 From: David Sehnal <david.sehnal@gmail.com> Date: Fri, 16 Nov 2018 00:12:52 +0100 Subject: [PATCH] mol-state & plugin: transforms and actions must specify param definitions --- src/mol-plugin/behavior/behavior.ts | 2 +- src/mol-plugin/behavior/dynamic/representation.ts | 6 ++---- src/mol-plugin/state/transforms/data.ts | 1 - src/mol-plugin/state/transforms/model.ts | 1 - src/mol-plugin/ui/state/apply-action.tsx | 4 +++- src/mol-plugin/ui/state/common.tsx | 13 +++---------- src/mol-state/action.ts | 4 ++-- src/mol-state/transformer.ts | 7 ++----- 8 files changed, 13 insertions(+), 25 deletions(-) diff --git a/src/mol-plugin/behavior/behavior.ts b/src/mol-plugin/behavior/behavior.ts index dd23f7144..f97fedad1 100644 --- a/src/mol-plugin/behavior/behavior.ts +++ b/src/mol-plugin/behavior/behavior.ts @@ -37,7 +37,7 @@ namespace PluginBehavior { group: string, description?: string }, - params(a: Root, globalCtx: PluginContext): { [K in keyof P]: ParamDefinition.Any } + params?(a: Root, globalCtx: PluginContext): { [K in keyof P]: ParamDefinition.Any } } export function create<P>(params: CreateParams<P>) { diff --git a/src/mol-plugin/behavior/dynamic/representation.ts b/src/mol-plugin/behavior/dynamic/representation.ts index 2c23b793c..d9d211670 100644 --- a/src/mol-plugin/behavior/dynamic/representation.ts +++ b/src/mol-plugin/behavior/dynamic/representation.ts @@ -25,8 +25,7 @@ export const HighlightLoci = PluginBehavior.create({ }); } }, - display: { name: 'Highlight Loci on Canvas', group: 'Data' }, - params: () => ({}) + display: { name: 'Highlight Loci on Canvas', group: 'Data' } }); export const SelectLoci = PluginBehavior.create({ @@ -39,6 +38,5 @@ export const SelectLoci = PluginBehavior.create({ }); } }, - display: { name: 'Select Loci on Canvas', group: 'Data' }, - params: () => ({}) + display: { name: 'Select Loci on Canvas', group: 'Data' } }); \ No newline at end of file diff --git a/src/mol-plugin/state/transforms/data.ts b/src/mol-plugin/state/transforms/data.ts index f70d6a970..d2f76a919 100644 --- a/src/mol-plugin/state/transforms/data.ts +++ b/src/mol-plugin/state/transforms/data.ts @@ -56,7 +56,6 @@ const ParseCif = PluginStateTransform.Create<SO.Data.String | SO.Data.Binary, SO }, from: [SO.Data.String, SO.Data.Binary], to: [SO.Data.Cif], - params: () => ({}), apply({ a }) { return Task.create('Parse CIF', async ctx => { const parsed = await (SO.Data.String.is(a) ? CIF.parse(a.data) : CIF.parseBinary(a.data)).runInContext(ctx); diff --git a/src/mol-plugin/state/transforms/model.ts b/src/mol-plugin/state/transforms/model.ts index 35930a399..3a4a79639 100644 --- a/src/mol-plugin/state/transforms/model.ts +++ b/src/mol-plugin/state/transforms/model.ts @@ -76,7 +76,6 @@ const CreateStructure = PluginStateTransform.Create<SO.Molecule.Model, SO.Molecu }, from: [SO.Molecule.Model], to: [SO.Molecule.Structure], - params: () => ({}), apply({ a, params }) { let s = Structure.ofModel(a.data); if (params.transform3d) s = Structure.transform(s, params.transform3d); diff --git a/src/mol-plugin/ui/state/apply-action.tsx b/src/mol-plugin/ui/state/apply-action.tsx index ffa8768d5..0c6b7a8db 100644 --- a/src/mol-plugin/ui/state/apply-action.tsx +++ b/src/mol-plugin/ui/state/apply-action.tsx @@ -56,7 +56,9 @@ class ApplyActionContol extends TransformContolBase<ApplyActionContol.Props, App if (version === state.version) return null; const source = props.state.cells.get(props.nodeRef)!.obj!; - const params = PD.getDefaultValues(props.action.definition.params(source, props.plugin)); + const params = props.action.definition.params + ? PD.getDefaultValues(props.action.definition.params(source, props.plugin)) + : { }; const newState: Partial<ApplyActionContol.ComponentState> = { ref: props.nodeRef, diff --git a/src/mol-plugin/ui/state/common.tsx b/src/mol-plugin/ui/state/common.tsx index 5ef1e7144..7ccc7bc31 100644 --- a/src/mol-plugin/ui/state/common.tsx +++ b/src/mol-plugin/ui/state/common.tsx @@ -16,10 +16,6 @@ import { Subject } from 'rxjs'; export { StateTransformParameters, TransformContolBase }; class StateTransformParameters extends PurePluginComponent<StateTransformParameters.Props> { - getDefinition() { - return this.props.info.createDefinition(this.props.info.source, this.plugin) - } - validate(params: any) { // TODO return void 0; @@ -43,7 +39,6 @@ class StateTransformParameters extends PurePluginComponent<StateTransformParamet namespace StateTransformParameters { export interface Props { info: { - createDefinition: Transformer.ParamsDefinition, params: PD.Params, initialValues: any, source: StateObject, @@ -61,11 +56,10 @@ namespace StateTransformParameters { export function infoFromAction(plugin: PluginContext, state: State, action: StateAction, nodeRef: Transform.Ref): Props['info'] { const source = state.cells.get(nodeRef)!.obj!; - const params = action.definition.params(source, plugin); + const params = action.definition.params ? action.definition.params(source, plugin) : { }; const initialValues = PD.getDefaultValues(params); return { source, - createDefinition: action.definition.params, initialValues, params, isEmpty: Object.keys(params).length === 0 @@ -75,11 +69,10 @@ namespace StateTransformParameters { export function infoFromTransform(plugin: PluginContext, state: State, transform: Transform): Props['info'] { const cell = state.cells.get(transform.ref)!; const source: StateObjectCell | undefined = (cell.sourceRef && state.cells.get(cell.sourceRef)!) || void 0; - const createDefinition = transform.transformer.definition.params; - const params = createDefinition((source && source.obj) as any, plugin); + const create = transform.transformer.definition.params; + const params = create ? create((source && source.obj) as any, plugin) : { }; return { source: (source && source.obj) as any, - createDefinition, initialValues: transform.params, params, isEmpty: Object.keys(params).length === 0 diff --git a/src/mol-state/action.ts b/src/mol-state/action.ts index 321a7092b..64826d3b6 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>, - params(a: A, globalCtx: unknown): { [K in keyof P]: PD.Any }, + params?(a: A, globalCtx: unknown): { [K in keyof P]: PD.Any }, /** Test if the transform can be applied to a given node */ isApplicable?(a: A, globalCtx: unknown): boolean @@ -66,7 +66,7 @@ namespace StateAction { return create<Transformer.From<T>, void, Transformer.Params<T>>({ from: def.from, display: def.display, - params: def.params as Transformer.ParamsDefinition<Transformer.From<T>, Transformer.Params<T>>, + params: def.params as Transformer.Definition<Transformer.From<T>, any, Transformer.Params<T>>['params'], apply({ cell, state, params }) { const tree = state.build().to(cell.transform.ref).apply(transformer, params); return state.update(tree); diff --git a/src/mol-state/transformer.ts b/src/mol-state/transformer.ts index c6ce1ce72..950e1b376 100644 --- a/src/mol-state/transformer.ts +++ b/src/mol-state/transformer.ts @@ -46,10 +46,8 @@ export namespace Transformer { export enum UpdateResult { Unchanged, Updated, Recreate } - export const EmptyParams = () => ({}); - /** Specify default control descriptors for the parameters */ - export type ParamsDefinition<A extends StateObject = StateObject, P = any> = (a: A, globalCtx: unknown) => { [K in keyof P]: PD.Any } + // export type ParamsDefinition<A extends StateObject = StateObject, P = any> = (a: A, globalCtx: unknown) => { [K in keyof P]: PD.Any } export interface Definition<A extends StateObject = StateObject, B extends StateObject = StateObject, P extends {} = {}> { readonly name: string, @@ -70,7 +68,7 @@ export namespace Transformer { */ update?(params: UpdateParams<A, B, P>, globalCtx: unknown): Task<UpdateResult> | UpdateResult, - params(a: A, globalCtx: unknown): { [K in keyof P]: PD.Any }, + params?(a: A, globalCtx: unknown): { [K in keyof P]: PD.Any }, /** Test if the transform can be applied to a given node */ isApplicable?(a: A, globalCtx: unknown): boolean, @@ -136,7 +134,6 @@ export namespace Transformer { name: 'root', from: [], to: [], - params: EmptyParams, apply() { throw new Error('should never be applied'); }, update() { return UpdateResult.Unchanged; } }) -- GitLab