From 73cd6e86141a441c3aa61e9714505ef7696f3945 Mon Sep 17 00:00:00 2001 From: Aymeric Rabot Date: Mon, 8 Jun 2026 02:12:01 -0400 Subject: [PATCH] fix(editor): strip placement metadata on commit --- .../src/components/tools/item/placement-math.test.ts | 10 ++++++++++ .../editor/src/components/tools/item/placement-math.ts | 10 +++++----- packages/nodes/src/door/move-tool.tsx | 2 ++ 3 files changed, 17 insertions(+), 5 deletions(-) create mode 100644 packages/editor/src/components/tools/item/placement-math.test.ts diff --git a/packages/editor/src/components/tools/item/placement-math.test.ts b/packages/editor/src/components/tools/item/placement-math.test.ts new file mode 100644 index 00000000..10bbb8f0 --- /dev/null +++ b/packages/editor/src/components/tools/item/placement-math.test.ts @@ -0,0 +1,10 @@ +import { describe, expect, test } from 'bun:test' +import { stripTransient } from './placement-math' + +describe('stripTransient', () => { + test('removes placement-only metadata flags before commit', () => { + expect(stripTransient({ isNew: true, isTransient: true, label: 'copy' })).toEqual({ + label: 'copy', + }) + }) +}) diff --git a/packages/editor/src/components/tools/item/placement-math.ts b/packages/editor/src/components/tools/item/placement-math.ts index 112273a4..a09c7b27 100644 --- a/packages/editor/src/components/tools/item/placement-math.ts +++ b/packages/editor/src/components/tools/item/placement-math.ts @@ -111,13 +111,13 @@ export function isValidWallSideFace(normal: [number, number, number] | undefined return Math.abs(normal[2]) > 0.7 } -/** - * Strip the `isTransient` flag from node metadata before committing. - */ +/** Strip placement-only metadata flags before committing a draft. */ export function stripTransient(meta: any): any { if (!isObject(meta)) return meta - const { isTransient, ...rest } = meta as Record - return rest + const nextMeta = { ...(meta as Record) } + delete nextMeta.isNew + delete nextMeta.isTransient + return nextMeta } const _up = new Vector3(0, 1, 0) diff --git a/packages/nodes/src/door/move-tool.tsx b/packages/nodes/src/door/move-tool.tsx index 66813b67..44bf81cf 100644 --- a/packages/nodes/src/door/move-tool.tsx +++ b/packages/nodes/src/door/move-tool.tsx @@ -17,6 +17,7 @@ import { EDITOR_LAYER, getSideFromNormal, isValidWallSideFace, + stripPlacementMetadataFlags, triggerSFX, useEditor, } from '@pascal-app/editor' @@ -275,6 +276,7 @@ const MoveDoorTool: React.FC<{ node: DoorNode }> = ({ node: movingDoorNode }) => const cloned = structuredClone(movingDoorNode) as any delete cloned.id + cloned.metadata = stripPlacementMetadataFlags(cloned.metadata) const node = DoorNode.parse({ ...cloned, position: [target.clampedX, target.clampedY, 0],