From f81fb0daae60248d78c7a2b51ab2050aaa4336bd Mon Sep 17 00:00:00 2001 From: Ni55aN Date: Mon, 1 Sep 2025 18:07:33 +0300 Subject: [PATCH] fix: make translate methods async for proper handling of promises --- src/extensions/selectable.ts | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/extensions/selectable.ts b/src/extensions/selectable.ts index 5aed284..703724e 100644 --- a/src/extensions/selectable.ts +++ b/src/extensions/selectable.ts @@ -31,7 +31,12 @@ export function accumulateOnCtrl() { } } -export type SelectorEntity = { label: string, id: string, unselect(): void | Promise, translate(dx: number, dy: number): void } +export type SelectorEntity = { + label: string + id: string + unselect(): void | Promise + translate(dx: number, dy: number): void | Promise +} /** * Selector class. Used to collect selected entities (nodes, connections, etc.) and synchronize them (select, unselect, translate, etc.). @@ -64,8 +69,8 @@ export class Selector { await Promise.all([...Array.from(this.entities.values())].map(item => this.remove(item))) } - translate(dx: number, dy: number) { - this.entities.forEach(item => !this.isPicked(item) && item.translate(dx, dy)) + async translate(dx: number, dy: number) { + await Promise.all(Array.from(this.entities.values()).map(item => !this.isPicked(item) && item.translate(dx, dy))) } pick(entity: Pick) { @@ -142,12 +147,12 @@ export function selectableNodes(base: BaseAreaPlugin, core: Selec await core.add({ label: 'node', id: node.id, - translate(dx, dy) { + async translate(dx, dy) { const view = area.nodeViews.get(node.id) const current = view?.position if (current) { - void view.translate(current.x + dx, current.y + dy) + await view.translate(current.x + dx, current.y + dy) } }, unselect() { @@ -180,7 +185,7 @@ export function selectableNodes(base: BaseAreaPlugin, core: Selec const dx = position.x - previous.x const dy = position.y - previous.y - if (core.isPicked({ id, label: 'node' })) core.translate(dx, dy) + if (core.isPicked({ id, label: 'node' })) await core.translate(dx, dy) } else if (context.type === 'pointerdown') { twitch = 0 } else if (context.type === 'pointermove') {