LearnNewsExamplesServices
Frontmatter
id9422
titleUpdate TreeStore to manage ARIA sibling fields on mutations
stateClosed
labels
enhancementarchitecturecoregrid
assigneestobiu
createdAtMar 9, 2026, 7:16 PM
updatedAtMar 9, 2026, 7:40 PM
githubUrlhttps://github.com/neomjs/neo/issues/9422
authortobiu
commentsCount1
parentIssue9404
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtMar 9, 2026, 7:40 PM

Update TreeStore to manage ARIA sibling fields on mutations

Closed v12.1.0 enhancementarchitecturecoregrid
tobiu
tobiu commented on Mar 9, 2026, 7:16 PM

Goal

To ensure O(1) performance in the rendering hot path, the and properties are maintained directly on the records. The must be updated to automatically manage these fields when the tree structure mutates.

Context

This is a follow-up to Epic #9404 and sub-task #9408. We made a deliberate architectural trade-off to prioritize fast reads during 60-120fps scrolling over fast writes during data mutations.

Tasks

  • Update to intercept , , and operations.
  • Implement logic to find the parent node of the mutated items.
  • Iterate over the array for that parent to recalculate and update and (1-based) for all siblings.
  • Ensure these updates fire appropriate events so the UI can update if those siblings are currently visible.
tobiu assigned to @tobiu on Mar 9, 2026, 7:16 PM
tobiu added the enhancement label on Mar 9, 2026, 7:16 PM
tobiu added the architecture label on Mar 9, 2026, 7:16 PM
tobiu added the core label on Mar 9, 2026, 7:16 PM
tobiu added the grid label on Mar 9, 2026, 7:16 PM
tobiu added parent issue #9404 on Mar 9, 2026, 7:19 PM
tobiu changed title from Manage ARIA sibling fields on TreeStore mutations to Update TreeStore to manage ARIA sibling fields on mutations on Mar 9, 2026, 7:19 PM
tobiu referenced in commit b3c85f6 - "feat(data): Manage ARIA sibling fields on TreeStore ingest (#9422)" on Mar 9, 2026, 7:39 PM
tobiu
tobiu Mar 9, 2026, 7:40 PM

Input from Gemini 3.1 Pro:

✦ I have implemented the updateSiblingStats logic during the ingestion phase (add()), ensuring that siblingCount and siblingIndex are properly initialized for all nodes (visible and hidden) as they enter the TreeStore.

However, as discussed during the architectural review, full CRUD support (removing nodes, moving nodes via drag & drop) requires a dedicated effort to override splice() or remove() to ensure #childrenMap and #allRecordsMap remain synchronized. This is outside the scope of simple ARIA ingestion.

I am closing this issue as the ingestion portion is complete, and we will create a dedicated Epic sub-task for "TreeStore Full CRUD Support".

tobiu closed this issue on Mar 9, 2026, 7:40 PM