diff --git a/src/mol-plugin/state/transforms/model.ts b/src/mol-plugin/state/transforms/model.ts index 052ec2ba9062abd764c376c9c4db4e8d1c70f87d..679db9b707b530229f6cce36e75092d5c939a13f 100644 --- a/src/mol-plugin/state/transforms/model.ts +++ b/src/mol-plugin/state/transforms/model.ts @@ -264,6 +264,7 @@ const StructureSelection = PluginStateTransform.BuiltIn({ apply({ a, params, cache }) { const compiled = compile<Sel>(params.query); (cache as { compiled: QueryFn<Sel> }).compiled = compiled; + (cache as { source: Structure }).source = a.data; const result = compiled(new QueryContext(a.data)); const s = Sel.unionStructure(result); @@ -274,6 +275,11 @@ const StructureSelection = PluginStateTransform.BuiltIn({ update: ({ a, b, oldParams, newParams, cache }) => { if (oldParams.query !== newParams.query) return StateTransformer.UpdateResult.Recreate; + if ((cache as { source: Structure }).source === a.data) { + return StateTransformer.UpdateResult.Unchanged; + } + (cache as { source: Structure }).source === a.data; + if (updateStructureFromQuery((cache as { compiled: QueryFn<Sel> }).compiled, a.data, b, newParams.label)) { return StateTransformer.UpdateResult.Updated; } @@ -298,6 +304,7 @@ const UserStructureSelection = PluginStateTransform.BuiltIn({ const query = transpileMolScript(parsed[0]); const compiled = compile<Sel>(query); (cache as { compiled: QueryFn<Sel> }).compiled = compiled; + (cache as { source: Structure }).source = a.data; const result = compiled(new QueryContext(a.data)); const s = Sel.unionStructure(result); const props = { label: `${params.label || 'Selection'}`, description: structureDesc(s) }; @@ -308,6 +315,11 @@ const UserStructureSelection = PluginStateTransform.BuiltIn({ return StateTransformer.UpdateResult.Recreate; } + if ((cache as { source: Structure }).source === a.data) { + return StateTransformer.UpdateResult.Unchanged; + } + (cache as { source: Structure }).source === a.data; + updateStructureFromQuery((cache as { compiled: QueryFn<Sel> }).compiled, a.data, b, newParams.label); return StateTransformer.UpdateResult.Updated; }