From 485d436180bed2dd29bc3e7bd77ed3a234e82f6b Mon Sep 17 00:00:00 2001 From: ImmortalRabbit <29354535+ImmortalRabbit@users.noreply.github.com> Date: Sat, 9 Aug 2025 20:34:43 +0100 Subject: [PATCH 1/3] perf: optimise slightly gridSelectionHasItem --- .../core/src/internal/data-grid/render/data-grid-lib.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/core/src/internal/data-grid/render/data-grid-lib.ts b/packages/core/src/internal/data-grid/render/data-grid-lib.ts index 96eb1d90f..921a0ce26 100644 --- a/packages/core/src/internal/data-grid/render/data-grid-lib.ts +++ b/packages/core/src/internal/data-grid/render/data-grid-lib.ts @@ -59,10 +59,9 @@ export function gridSelectionHasItem(sel: GridSelection, item: Item): boolean { if (sel.columns.hasIndex(col) || sel.rows.hasIndex(row)) return true; if (sel.current !== undefined) { if (itemsAreEqual(sel.current.cell, item)) return true; - const toCheck = [sel.current.range, ...sel.current.rangeStack]; // FIXME: pointless alloc - for (const r of toCheck) { - // dont we have a function for this? - if (col >= r.x && col < r.x + r.width && row >= r.y && row < r.y + r.height) return true; + if (col >= sel.current.range.x && col < sel.current.range.x + sel.current.range.width && row >= sel.current.range.y && row < sel.current.range.y + sel.current.range.height) return true; + for (let i = 0; i < sel.current.rangeStack.length; i++) { + if (col >= sel.current.rangeStack[i].x && col < sel.current.rangeStack[i].x + sel.current.rangeStack[i].width && row >= sel.current.rangeStack[i].y && row < sel.current.rangeStack[i].y + sel.current.rangeStack[i].height) return true; } } return false; From a8735ece0b0ced8c19d1ee7fc1bf5220121b6773 Mon Sep 17 00:00:00 2001 From: ImmortalRabbit <29354535+ImmortalRabbit@users.noreply.github.com> Date: Sat, 9 Aug 2025 21:48:46 +0100 Subject: [PATCH 2/3] Bring back for of --- packages/core/src/internal/data-grid/render/data-grid-lib.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core/src/internal/data-grid/render/data-grid-lib.ts b/packages/core/src/internal/data-grid/render/data-grid-lib.ts index 921a0ce26..5fd77cb01 100644 --- a/packages/core/src/internal/data-grid/render/data-grid-lib.ts +++ b/packages/core/src/internal/data-grid/render/data-grid-lib.ts @@ -60,8 +60,8 @@ export function gridSelectionHasItem(sel: GridSelection, item: Item): boolean { if (sel.current !== undefined) { if (itemsAreEqual(sel.current.cell, item)) return true; if (col >= sel.current.range.x && col < sel.current.range.x + sel.current.range.width && row >= sel.current.range.y && row < sel.current.range.y + sel.current.range.height) return true; - for (let i = 0; i < sel.current.rangeStack.length; i++) { - if (col >= sel.current.rangeStack[i].x && col < sel.current.rangeStack[i].x + sel.current.rangeStack[i].width && row >= sel.current.rangeStack[i].y && row < sel.current.rangeStack[i].y + sel.current.rangeStack[i].height) return true; + for (const r of sel.current.rangeStack) { + if (col >= r.x && col < r.x + r.width && row >= r.y && row < r.y + r.height) return true; } } return false; From eaeaf4760779f10a5624d9848972854e0e169318 Mon Sep 17 00:00:00 2001 From: ImmortalRabbit <29354535+ImmortalRabbit@users.noreply.github.com> Date: Thu, 14 Aug 2025 15:52:19 +0100 Subject: [PATCH 3/3] fix according to feedback --- .../core/src/internal/data-grid/render/data-grid-lib.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/core/src/internal/data-grid/render/data-grid-lib.ts b/packages/core/src/internal/data-grid/render/data-grid-lib.ts index 5fd77cb01..6fc88008c 100644 --- a/packages/core/src/internal/data-grid/render/data-grid-lib.ts +++ b/packages/core/src/internal/data-grid/render/data-grid-lib.ts @@ -59,7 +59,12 @@ export function gridSelectionHasItem(sel: GridSelection, item: Item): boolean { if (sel.columns.hasIndex(col) || sel.rows.hasIndex(row)) return true; if (sel.current !== undefined) { if (itemsAreEqual(sel.current.cell, item)) return true; - if (col >= sel.current.range.x && col < sel.current.range.x + sel.current.range.width && row >= sel.current.range.y && row < sel.current.range.y + sel.current.range.height) return true; + const range = sel.current.range; + const xMin = range.x; + const xMax = range.x + range.width; + const yMin = range.y; + const yMax = range.y + range.height; + if (col >= xMin && col < xMax && row >= yMin && row < yMax) return true; for (const r of sel.current.rangeStack) { if (col >= r.x && col < r.x + r.width && row >= r.y && row < r.y + r.height) return true; }