From 73841995ec5ad6be9a40160f0d408fd8dcac34d3 Mon Sep 17 00:00:00 2001 From: Trey Pisano <126501514+treypisano@users.noreply.github.com> Date: Wed, 1 Nov 2023 11:52:27 -0400 Subject: [PATCH] fix: flyout id is different than first placed block (#7618) * add saveIds param and logic to save correctly * remove whitespace * add saveIds to recursive calls * run format * change name from addIds to saveIds * add saveIds test * change blockId on false saveIds to undefined --- core/flyout_base.ts | 2 +- core/serialization/blocks.ts | 26 +++++++++++++++++++++----- tests/mocha/jso_serialization_test.js | 6 ++++++ 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/core/flyout_base.ts b/core/flyout_base.ts index bb30a45cb..49341d37c 100644 --- a/core/flyout_base.ts +++ b/core/flyout_base.ts @@ -1213,7 +1213,7 @@ export abstract class Flyout extends DeleteArea implements IFlyout { // Clone the block. // TODO(#7432): Add a saveIds parameter to `save`. - const json = blocks.save(oldBlock) as blocks.State; + const json = blocks.save(oldBlock, {saveIds: false}) as blocks.State; // Normallly this resizes leading to weird jumps. Save it for terminateDrag. targetWorkspace.setResizesEnabled(false); const block = blocks.append(json, targetWorkspace) as BlockSvg; diff --git a/core/serialization/blocks.ts b/core/serialization/blocks.ts index e53f30944..498f6000c 100644 --- a/core/serialization/blocks.ts +++ b/core/serialization/blocks.ts @@ -86,20 +86,21 @@ export function save( addInputBlocks = true, addNextBlocks = true, doFullSerialization = true, + saveIds = true, }: { addCoordinates?: boolean; addInputBlocks?: boolean; addNextBlocks?: boolean; doFullSerialization?: boolean; + saveIds?: boolean; } = {}, ): State | null { if (block.isInsertionMarker()) { return null; } - const state = { 'type': block.type, - 'id': block.id, + 'id': saveIds ? block.id : undefined, }; if (addCoordinates) { @@ -122,12 +123,22 @@ export function save( if (addInputBlocks) { // AnyDuringMigration because: Argument of type '{ type: string; id: // string; }' is not assignable to parameter of type 'State'. - saveInputBlocks(block, state as AnyDuringMigration, doFullSerialization); + saveInputBlocks( + block, + state as AnyDuringMigration, + doFullSerialization, + saveIds, + ); } if (addNextBlocks) { // AnyDuringMigration because: Argument of type '{ type: string; id: // string; }' is not assignable to parameter of type 'State'. - saveNextBlocks(block, state as AnyDuringMigration, doFullSerialization); + saveNextBlocks( + block, + state as AnyDuringMigration, + doFullSerialization, + saveIds, + ); } // AnyDuringMigration because: Type '{ type: string; id: string; }' is not @@ -270,6 +281,7 @@ function saveInputBlocks( block: Block, state: State, doFullSerialization: boolean, + saveIds: boolean, ) { const inputs = Object.create(null); for (let i = 0; i < block.inputList.length; i++) { @@ -278,6 +290,7 @@ function saveInputBlocks( const connectionState = saveConnection( input.connection as Connection, doFullSerialization, + saveIds, ); if (connectionState) { inputs[input.name] = connectionState; @@ -301,6 +314,7 @@ function saveNextBlocks( block: Block, state: State, doFullSerialization: boolean, + saveIds: boolean, ) { if (!block.nextConnection) { return; @@ -308,6 +322,7 @@ function saveNextBlocks( const connectionState = saveConnection( block.nextConnection, doFullSerialization, + saveIds, ); if (connectionState) { state['next'] = connectionState; @@ -326,6 +341,7 @@ function saveNextBlocks( function saveConnection( connection: Connection, doFullSerialization: boolean, + saveIds: boolean, ): ConnectionState | null { const shadow = connection.getShadowState(true); const child = connection.targetBlock(); @@ -337,7 +353,7 @@ function saveConnection( state['shadow'] = shadow; } if (child && !child.isShadow()) { - state['block'] = save(child, {doFullSerialization}); + state['block'] = save(child, {doFullSerialization, saveIds}); } return state; } diff --git a/tests/mocha/jso_serialization_test.js b/tests/mocha/jso_serialization_test.js index 500bb2011..895ff0be2 100644 --- a/tests/mocha/jso_serialization_test.js +++ b/tests/mocha/jso_serialization_test.js @@ -61,6 +61,12 @@ suite('JSO Serialization', function () { assertProperty(jso, 'id', 'id0'); }); + test('saveId false', function () { + const block = this.workspace.newBlock('row_block'); + const jso = Blockly.serialization.blocks.save(block, {saveIds: false}); + assertProperty(jso, 'id', undefined); + }); + suite('Attributes', function () { suite('Collapsed', function () { test('True', function () {