Frontmatter
| id | 9531 |
| title | Grid SortZone incorrectly intercepts column resize drag events, causing VDOM corruption and layout thrash |
| state | Closed |
| labels | bugaigrid |
| assignees | tobiu |
| createdAt | Mar 20, 2026, 10:46 PM |
| updatedAt | Mar 20, 2026, 10:48 PM |
| githubUrl | https://github.com/neomjs/neo/issues/9531 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | null |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| contentTrust | |
| projected | |
| quarantined | 0 |
| signals | [] |
| blockedBy | [] |
| blocking | [] |
| closedAt | Mar 20, 2026, 10:48 PM |
Grid SortZone incorrectly intercepts column resize drag events, causing VDOM corruption and layout thrash

tobiu
Mar 20, 2026, 10:48 PM
Fixed in 2ed06e864
Description
When resizing a grid column (using
grid.header.plugin.Resizable), thedraggable.grid.header.toolbar.SortZonewas concurrently intercepting the samedrag:start,drag:move, anddrag:endevents because both plugins listen to the same header button DOM nodes.This caused the
SortZoneto execute its column-reordering logic during a resize operation. Specifically,SortZone.onDragStartwould falsely identify a column as being dragged and set itscolumnPosition.hidden = trueandcell.style.visibility = 'hidden'. This led to grid cells vanishing during resize. Furthermore,SortZone.onDragEndwould needlessly triggergrid.body.createViewData(false, true), causing massive performance degradation by forcing a full, un-recycled VDOM regeneration of the entire grid body on every resize.Solution
dragResortableconfig on the header toolbar as a runtime semaphore.grid.header.plugin.Resizableto settoolbar.dragResortable = falseondrag:startand restore it totrueondrag:end. Also optimized the toolbar lookup fromowner.up()toowner.parent.if (!me.owner.dragResortable) return;bailouts to the very top ofonDragStart,onDragMove, andonDragEndindraggable.grid.header.toolbar.SortZone. This cleanly severs the event processing if a resize is active.delete cell.style.visibility;"self-healing" hack fromgrid.Body#updateCellPositionssince the underlying VDOM corruption is prevented entirely.