mirror of
https://github.com/google/blockly.git
synced 2026-01-07 17:10:11 +01:00
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
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user