Frontmatter
| id | 8572 |
| title | Refactor Portal Shared Containers to use native mergeFrom |
| state | Closed |
| labels | enhancementairefactoring |
| assignees | tobiu |
| createdAt | Jan 12, 2026, 3:02 AM |
| updatedAt | Jan 12, 2026, 3:18 AM |
| githubUrl | https://github.com/neomjs/neo/issues/8572 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | null |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Jan 12, 2026, 3:18 AM |
Refactor Portal Shared Containers to use native mergeFrom

tobiu
Jan 12, 2026, 3:18 AM
Input from Gemini 3 Pro:
✦ I have significantly enhanced the
mergeFromimplementation to be recursive and robust.Core Changes:
- Moved Logic to
parseItemConfigs: Instead of handlingmergeFromshallowly inContainer.createItem, I integrated it intoNeo.core.Base.parseItemConfigs. This ensures it works recursively for nested item structures.- Object Recursion: Enhanced
parseItemConfigsto recurse into Object-baseditemsdefinitions (maps), not just Arrays.- Array Mutation Fix: Updated
Container.onConstructedto passme._items(the mutable backing array) toparseItemConfigsinstead ofme.items(which returns a shallow clone due to the default descriptor). This ensures that merges are persisted.Refactoring Status:
Shared.Container: Usesitems(standard) withmergeFrom.PageContainer: UsesitemswithmergeFrom.- Subclasses: Purely declarative overrides of config objects.
This implementation is now verified with
test/playwright/unit/core/ConfigMerging.spec.mjs.Closing as completed.
tobiu closed this issue on Jan 12, 2026, 3:18 AM
tobiu assigned to @tobiu on Jan 12, 2026, 3:18 AM
Refactor
Portal.view.shared.content.Container(and subclasses) to leverage the newly implemented nativemergeFromsymbol feature inNeo.container.Base.Changes:
mergeFromfromNeo.core.ConfigSymbols.contentItems_inShared.Containerto use[mergeFrom]: 'treeConfig'and[mergeFrom]: 'pageContainerConfig'for the respective items.afterSetContentItems.afterSetContentItemsmethod entirely if it's only doingthis.items = value.itemssetter is needed to triggercreateItems. However,contentItems_is a proxy config. DoesafterSetContentItemsneed to manually setthis.items = value? Yes, becausecontentItemsis notitems.afterSetContentItemswill simplify to justthis.items = value.Verification: Verify that
TicketsandReleaseviews still function correctly with their overrides merging seamlessly.