From 8e097537d04f2130b5f9e7302876749690f4d9cf Mon Sep 17 00:00:00 2001 From: wass08 Date: Mon, 2 Mar 2026 09:09:31 +0900 Subject: [PATCH] fix duplicate door --- .../components/tools/door/move-door-tool.tsx | 18 +++---------- .../components/ui/panels/door-panel.tsx | 27 +++---------------- 2 files changed, 7 insertions(+), 38 deletions(-) diff --git a/apps/editor/components/tools/door/move-door-tool.tsx b/apps/editor/components/tools/door/move-door-tool.tsx index e8bab85d..dc1b8c7c 100644 --- a/apps/editor/components/tools/door/move-door-tool.tsx +++ b/apps/editor/components/tools/door/move-door-tool.tsx @@ -204,27 +204,15 @@ export const MoveDoorTool: React.FC<{ node: DoorNode }> = ({ node: movingDoorNod useScene.getState().deleteNode(movingDoorNode.id) useScene.temporal.getState().resume() + const cloned = structuredClone(movingDoorNode) as any + delete cloned.id const node = DoorNode.parse({ + ...cloned, position: [clampedX, clampedY, 0], rotation: [0, itemRotation, 0], side, wallId: event.node.id, parentId: event.node.id, - width: movingDoorNode.width, - height: movingDoorNode.height, - frameThickness: movingDoorNode.frameThickness, - frameDepth: movingDoorNode.frameDepth, - threshold: movingDoorNode.threshold, - thresholdHeight: movingDoorNode.thresholdHeight, - hingesSide: movingDoorNode.hingesSide, - swingDirection: movingDoorNode.swingDirection, - segments: movingDoorNode.segments, - handle: movingDoorNode.handle, - handleHeight: movingDoorNode.handleHeight, - handleSide: movingDoorNode.handleSide, - doorCloser: movingDoorNode.doorCloser, - panicBar: movingDoorNode.panicBar, - panicBarHeight: movingDoorNode.panicBarHeight, }) useScene.getState().createNode(node, event.node.id as AnyNodeId) placedId = node.id diff --git a/apps/editor/components/ui/panels/door-panel.tsx b/apps/editor/components/ui/panels/door-panel.tsx index a050f83b..2c6d8457 100644 --- a/apps/editor/components/ui/panels/door-panel.tsx +++ b/apps/editor/components/ui/panels/door-panel.tsx @@ -68,29 +68,10 @@ export function DoorPanel() { if (!node || !node.parentId) return sfxEmitter.emit('sfx:item-pick') useScene.temporal.getState().pause() - const duplicate = DoorNode.parse({ - position: [...node.position] as [number, number, number], - rotation: [...node.rotation] as [number, number, number], - side: node.side, - wallId: node.wallId, - parentId: node.parentId, - width: node.width, - height: node.height, - frameThickness: node.frameThickness, - frameDepth: node.frameDepth, - threshold: node.threshold, - thresholdHeight: node.thresholdHeight, - hingesSide: node.hingesSide, - swingDirection: node.swingDirection, - segments: node.segments.map(s => ({ ...s, columnRatios: [...s.columnRatios] })), - handle: node.handle, - handleHeight: node.handleHeight, - handleSide: node.handleSide, - doorCloser: node.doorCloser, - panicBar: node.panicBar, - panicBarHeight: node.panicBarHeight, - metadata: { isNew: true }, - }) + const cloned = structuredClone(node) as any + delete cloned.id + cloned.metadata = { ...cloned.metadata, isNew: true } + const duplicate = DoorNode.parse(cloned) useScene.getState().createNode(duplicate, node.parentId as AnyNodeId) setMovingNode(duplicate) setSelection({ selectedIds: [] })