From d99b5bd505df0b236e4ba62d17c756cc58934054 Mon Sep 17 00:00:00 2001 From: David Sehnal <david.sehnal@gmail.com> Date: Fri, 10 Apr 2020 15:47:40 +0200 Subject: [PATCH] mol-state: throw error when trying to reuse StateBuilder --- src/mol-state/state.ts | 5 +++++ src/mol-state/state/builder.ts | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/mol-state/state.ts b/src/mol-state/state.ts index a6cd627cc..b72476c25 100644 --- a/src/mol-state/state.ts +++ b/src/mol-state/state.ts @@ -249,6 +249,11 @@ class State { if (!this.inTransaction) this.behaviors.isUpdating.next(true); try { + if (StateBuilder.is(tree)) { + if (tree.editInfo.applied) throw new Error('This builder has already been applied. Create a new builder for further state updates'); + tree.editInfo.applied = true; + } + this.reverted = false; const ret = options && (options.revertIfAborted || options.revertOnError) ? await this._revertibleTreeUpdate(taskCtx, params, options) diff --git a/src/mol-state/state/builder.ts b/src/mol-state/state/builder.ts index c1fd8cbaf..e249ee738 100644 --- a/src/mol-state/state/builder.ts +++ b/src/mol-state/state/builder.ts @@ -21,6 +21,7 @@ interface StateBuilder { namespace StateBuilder { export interface EditInfo { + applied: boolean, sourceTree: StateTree, count: number, lastUpdate?: StateTransform.Ref @@ -108,7 +109,7 @@ namespace StateBuilder { return this.state.state.runTask(this.state.state.updateTree(this, options)); } - constructor(tree: StateTree, state?: State) { this.state = { state, tree: tree.asTransient(), actions: [], editInfo: { sourceTree: tree, count: 0, lastUpdate: void 0 } } } + constructor(tree: StateTree, state?: State) { this.state = { state, tree: tree.asTransient(), actions: [], editInfo: { applied: false, sourceTree: tree, count: 0, lastUpdate: void 0 } } } } export class To<A extends StateObject, T extends StateTransformer = StateTransformer> implements StateBuilder { -- GitLab