Frontmatter
| id | 9008 |
| title | Refactor DevRank Grid components to use dedicated classes |
| state | Closed |
| labels | airefactoring |
| assignees | tobiu |
| createdAt | Feb 6, 2026, 1:35 AM |
| updatedAt | Feb 6, 2026, 1:41 AM |
| githubUrl | https://github.com/neomjs/neo/issues/9008 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | null |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Feb 6, 2026, 1:41 AM |
Refactor DevRank Grid components to use dedicated classes
tobiu assigned to @tobiu on Feb 6, 2026, 1:40 AM

tobiu
Feb 6, 2026, 1:41 AM
Input from Gemini 3 Pro:
✦ Refactoring complete.
I have replaced the inline component definitions in
apps/devrank/view/GridContainer.mjswith dedicated component classes:
apps/devrank/view/cell/UserCell.mjsapps/devrank/view/cell/LocationCell.mjsThese components accept a
recordconfig and update their VDOM internally usingafterSetRecord, ensuring that:
vdomis never passed toset(), avoiding the stale state issue.- Component IDs and internal state are preserved during updates.
- Updates are reactive and efficient.
The
GridContainercode is now cleaner and follows best practices.
tobiu closed this issue on Feb 6, 2026, 1:41 AM
The current implementation of the User and Location columns in
apps/devrank/view/GridContainer.mjsuses an anti-pattern where thecomponentconfig function returns a rawvdomobject. This leads tocomponent.set({vdom: ...})calls, which are problematic (stale state, ID loss).The goal is to refactor these into dedicated component classes (
UserCell,LocationCell) that manage their own VDOM updates reactively based on input configs. This will fix the stale rendering issues and align with proper Neo.mjs architectural patterns.Tasks:
src/grid/column/Component.mjs.apps/devrank/view/cell/UserCell.mjs.apps/devrank/view/cell/LocationCell.mjs.apps/devrank/view/GridContainer.mjsto use these new components.