From 80cab389a14fca816fe91e8e47b6575c02c473a6 Mon Sep 17 00:00:00 2001 From: Beka Westberg Date: Tue, 22 Aug 2023 18:00:29 +0000 Subject: [PATCH] fix: loading parameters for shareable procedure blocks --- .../block-shareable-procedures/src/blocks.ts | 17 ++++++++++++----- .../src/events_procedure_base.ts | 1 + 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/plugins/block-shareable-procedures/src/blocks.ts b/plugins/block-shareable-procedures/src/blocks.ts index dd773f9df9..d7084bcbef 100644 --- a/plugins/block-shareable-procedures/src/blocks.ts +++ b/plugins/block-shareable-procedures/src/blocks.ts @@ -461,13 +461,20 @@ const procedureDefMutator = { this.model_ = map.get(procedureId); } - if (state['params'] && !this.getProcedureModel().getParameters().length) { - for (let i = 0; i < state['params'].length; i++) { - const {name, id, paramId} = state['params'][i]; - this.getProcedureModel().insertParameter( - new ObservableParameterModel(this.workspace, name, paramId, id), i); + const model = this.getProcedureModel(); + const newParams = state['params'] ?? []; + const newIds = new Set(newParams.map((p) => p.id)); + const currParams = model.getParameters(); + for (let i = currParams.length - 1; i >= 0; i--) { + if (!newIds.has(currParams[i].getId)) { + model.deleteParameter(i); } } + for (let i = 0; i < newParams.length; i++) { + const {name, id, paramId} = state['params'][i]; + this.getProcedureModel().insertParameter( + new ObservableParameterModel(this.workspace, name, paramId, id), i); + } this.doProcedureUpdate(); this.setStatements_(state['hasStatements'] === false ? false : true); diff --git a/plugins/block-shareable-procedures/src/events_procedure_base.ts b/plugins/block-shareable-procedures/src/events_procedure_base.ts index 0f5445a122..aec4b6437a 100644 --- a/plugins/block-shareable-procedures/src/events_procedure_base.ts +++ b/plugins/block-shareable-procedures/src/events_procedure_base.ts @@ -27,6 +27,7 @@ export abstract class ProcedureBase extends Blockly.Events.Abstract { readonly procedure: Blockly.procedures.IProcedureModel) { super(); this.workspaceId = workspace.id; + this.recordUndo = false; } /**