Frontmatter
| id | 9840 |
| title | Multi-Body: Peer State Adoption for Column Selection Synchronization |
| state | Closed |
| labels | enhancementai |
| assignees | tobiu |
| createdAt | Apr 9, 2026, 11:30 PM |
| updatedAt | Apr 9, 2026, 11:40 PM |
| githubUrl | https://github.com/neomjs/neo/issues/9840 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | 9492 |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Apr 9, 2026, 11:40 PM |
Multi-Body: Peer State Adoption for Column Selection Synchronization
Closedenhancementai
tobiu added parent issue #9492 on Apr 9, 2026, 11:30 PM
tobiu assigned to @tobiu on Apr 9, 2026, 11:40 PM

tobiu
Apr 9, 2026, 11:40 PM
Implementation complete via 6e704c3. Sibling visual arrays and BaseModel adoption logic implemented. The ColumnModel is fully decoupled from the GridContainer and independently synchronizes its visuals across active peers.
tobiu closed this issue on Apr 9, 2026, 11:40 PM
Architectural Context
The Neo.mjs Multi-Body Grid architecture partitions the DOM into segregated
bodyStart,body, andbodyEndcomponents. Historically,ColumnModelrelied on isolated states (selectedColumns). When clicking a cell, multiple bodies capture the bubbledcellClickevent, resulting in race conditions or isolated states breaking cross-body column selection physics.Objective
Apply the same "Peer State Adoption" pattern deployed in
#9839toColumnModel.Implementation Details
ColumnModelbinds togridContainer(similar behavior toRowModel). It must immediately abort processing ifevent.body !== view.BaseModel.register(),selectedColumnsmust be adopted natively from the first active, instantiated sibling peer to guarantee a single memory array instance.getActivePeers().forEach(peer => { peer.view.createViewData() })(or equivalent method) to mutate and refresh column highlights across all split grid segments concurrently.Avoided Pitfalls
GridContainernamespace with state variables.