Skip to content
Snippets Groups Projects
Commit b272c3a5 authored by David Sehnal's avatar David Sehnal
Browse files

mol-state: coarser StateAction syntax

parent ec1dc600
No related branches found
No related tags found
No related merge requests found
......@@ -60,7 +60,7 @@ const DownloadStructure = StateAction.create<PluginStateObject.Root, void, Downl
description: 'Load a structure from PDBe and create its default Assembly and visual'
},
params: () => ({ source: PD.Mapped('bcif-static', ObtainStructureHelpers.SourceOptions, ObtainStructureHelpers.getControls) }),
apply({ params, state }) {
run({ params, state }) {
const b = state.build();
// const query = MolScriptBuilder.struct.generator.atomGroups({
......@@ -85,12 +85,10 @@ export const OpenStructure = StateAction.build({
display: { name: 'Open Structure', description: 'Load a structure from file and create its default Assembly and visual' },
from: PluginStateObject.Root,
params: { file: PD.File({ accept: '.cif,.bcif' }) }
})({
apply({ params, state }) {
})(({ params, state }) => {
const b = state.build();
const data = b.toRoot().apply(StateTransforms.Data.ReadFile, { file: params.file, isBinary: /\.bcif$/i.test(params.file.name) });
return state.update(createStructureTree(data));
}
});
function createStructureTree(b: StateTreeBuilder.To<PluginStateObject.Data.Binary | PluginStateObject.Data.String>): StateTree {
......@@ -131,12 +129,10 @@ function complexRepresentation(root: StateTreeBuilder.To<PluginStateObject.Molec
export const CreateComplexRepresentation = StateAction.build({
display: { name: 'Create Complex', description: 'Split the structure into Sequence/Water/Ligands/... ' },
from: PluginStateObject.Molecule.Structure
})({
apply({ ref, state }) {
})(({ ref, state }) => {
const root = state.build().to(ref);
complexRepresentation(root);
return state.update(root.getTree());
}
});
export const UpdateTrajectory = StateAction.build({
......@@ -145,8 +141,7 @@ export const UpdateTrajectory = StateAction.build({
action: PD.Select<'advance' | 'reset'>('advance', [['advance', 'Advance'], ['reset', 'Reset']]),
by: PD.makeOptional(PD.Numeric(1, { min: -1, max: 1, step: 1 }))
}
})({
apply({ params, state }) {
})(({ params, state }) => {
const models = state.select(q => q.rootsOfType(PluginStateObject.Molecule.Model)
.filter(c => c.transform.transformer === StateTransforms.Model.ModelFromTrajectory));
......@@ -172,5 +167,4 @@ export const UpdateTrajectory = StateAction.build({
}
return state.update(update);
}
});
\ No newline at end of file
......@@ -42,7 +42,7 @@ namespace StateAction {
/**
* Apply an action that modifies the State specified in Params.
*/
apply(params: ApplyParams<A, P>, globalCtx: unknown): T | Task<T>,
run(params: ApplyParams<A, P>, globalCtx: unknown): T | Task<T>,
/** Test if the transform can be applied to a given node */
isApplicable?(a: A, globalCtx: unknown): boolean
......@@ -69,7 +69,7 @@ namespace StateAction {
from: def.from,
display: def.display,
params: def.params as Transformer.Definition<Transformer.From<T>, any, Transformer.Params<T>>['params'],
apply({ cell, state, params }) {
run({ cell, state, params }) {
const tree = state.build().to(cell.transform.ref).apply(transformer, params);
return state.update(tree);
}
......@@ -88,7 +88,7 @@ namespace StateAction {
}
export interface Define<A extends StateObject, P> {
<T>(def: DefinitionBase<A, T, P>): StateAction<A, T, P>,
<T>(def: DefinitionBase<A, T, P> | DefinitionBase<A, T, P>['run']): StateAction<A, T, P>,
}
function root(info: Type<any, any>): Define<any, any> {
......@@ -106,7 +106,9 @@ namespace StateAction {
: !!info.params
? info.params as any
: void 0,
...def
...(typeof def === 'function'
? { run: def }
: def)
});
}
......
......@@ -104,7 +104,7 @@ class State {
if (!cell) throw new Error(`'${ref}' does not exist.`);
if (cell.status !== 'ok') throw new Error(`Action cannot be applied to a cell with status '${cell.status}'`);
return runTask(action.definition.apply({ ref, cell, a: cell.obj!, params, state: this }, this.globalContext), ctx);
return runTask(action.definition.run({ ref, cell, a: cell.obj!, params, state: this }, this.globalContext), ctx);
});
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment