LearnNewsExamplesServices
Frontmatter
id9497
titleGrid Multi-Body: Split Column Collections and Orchestration
stateClosed
labels
epicaigrid
assigneestobiu
createdAtMar 16, 2026, 11:13 PM
updatedAtMar 31, 2026, 12:10 PM
githubUrlhttps://github.com/neomjs/neo/issues/9497
authortobiu
commentsCount1
parentIssue9486
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtMar 31, 2026, 12:10 PM

Grid Multi-Body: Split Column Collections and Orchestration

Closedepicaigrid
tobiu
tobiu commented on Mar 16, 2026, 11:13 PM

Phase 1 of the Multi-Body Epic (#9486).

Currently, GridContainer manages a single columns collection that dictates the order and visibility of all columns in the unified DOM structure.

To support the Multi-Body architecture (where columns are physically separated into Left, Center, and Right bodies based on their locked state), the data orchestration layer must be refactored first.

Requirements:

  1. Split Column Collections:

    • Introduce three separate collections inside GridContainer.mjs: lockedStartColumns, centerColumns, and lockedEndColumns.
  2. Orchestration Pipeline:

    • Refactor the sortColumns() (or initialization) logic so that when the initial columns array is processed, the columns are automatically distributed into the correct underlying collection based on their locked property ('start', null, 'end').
  3. Collection APIs:

    • Ensure GridContainer still exposes a unified API (e.g., getters to retrieve all columns or find a column by dataField regardless of which sub-collection it resides in).
  4. Structural Assumption:

    • Adopt the "Always Multi-Body" structural approach internally. The collections should always exist, even if empty, to simplify the runtime locking logic in later phases.
tobiu added the epic label on Mar 16, 2026, 11:13 PM
tobiu added the ai label on Mar 16, 2026, 11:13 PM
tobiu added the grid label on Mar 16, 2026, 11:13 PM
tobiu added parent issue #9486 on Mar 16, 2026, 11:13 PM
tobiu assigned to @tobiu on Mar 17, 2026, 7:59 PM
tobiu cross-referenced by #9486 on Mar 31, 2026, 12:02 PM
tobiu referenced in commit a369a9a - "feat: Parse columns into 3 internal multi-body arrays (#9497)" on Mar 31, 2026, 12:10 PM
tobiu
tobiu Mar 31, 2026, 12:10 PM

Input from Gemini 3.1 Pro (Antigravity):

✦ ### Task Complete: Phase 1 Orchestration Finished

I have completed the structural implementation for Phase 1.

Deviation from Original Plan: Per review and refinement on #9486, I opted not to instantiate centerColumns, lockedEndColumns, and lockedStartColumns as full Neo.collection.Base identical clones. Instead, they are instantiated as lightweight arrays holding component references directly partitioned from the raw definition loop (in createColumns) and sorted items (in onColumnLockChange).

This drastically reduces the internal state management overhead since we don't have to keep 4 Neo.collection.Base instances perfectly synchronized across mutations.

The unified grid collection property _columns remains untouched, preserving full backward compatibility for any existing app relying on unified metadata like aria-colcount or dynamic indexing.

Next up: SubGrid splitting.

tobiu closed this issue on Mar 31, 2026, 12:10 PM