From a92b889dfa8ea020118d18532c1fdd568ed96145 Mon Sep 17 00:00:00 2001 From: hypercross Date: Tue, 21 Apr 2026 16:50:48 +0800 Subject: [PATCH] feat(sts-like-viewer): batch inventory item movement Wrap item removal and placement in a batch to prevent multiple reactive updates when moving items between inventories. --- packages/sts-like-viewer/src/state/inventory.ts | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/packages/sts-like-viewer/src/state/inventory.ts b/packages/sts-like-viewer/src/state/inventory.ts index 3a95be8..393b6ec 100644 --- a/packages/sts-like-viewer/src/state/inventory.ts +++ b/packages/sts-like-viewer/src/state/inventory.ts @@ -10,6 +10,7 @@ import { Transform2D, validatePlacement, } from "boardgame-core/samples/slay-the-spire-like"; +import { batch } from "@preact/signals-core"; function genId() { return Math.random().toString(16).slice(-8); @@ -62,13 +63,15 @@ export function moveItem( const validation = validatePlacement(removed, item.shape, newTransform); if (!validation.valid) return false; - from.produce((inv) => { - removeItemFromGrid(inv, itemId); - }); - to.produce((inv) => { - placeItem(inv, { - ...item, - transform: newTransform, + batch(() => { + from.produce((inv) => { + removeItemFromGrid(inv, itemId); + }); + to.produce((inv) => { + placeItem(inv, { + ...item, + transform: newTransform, + }); }); });