Frontmatter
| id | 8388 |
| title | Refactor Portal Learning Views to Shared Content Viewer |
| state | Closed |
| labels | documentationrefactoring |
| assignees | tobiu |
| createdAt | Jan 7, 2026, 4:34 PM |
| updatedAt | Jan 7, 2026, 4:51 PM |
| githubUrl | https://github.com/neomjs/neo/issues/8388 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | 8362 |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Jan 7, 2026, 4:50 PM |
Refactor Portal Learning Views to Shared Content Viewer
tobiu assigned to @tobiu on Jan 7, 2026, 4:36 PM
tobiu added parent issue #8362 on Jan 7, 2026, 4:49 PM
tobiu closed this issue on Jan 7, 2026, 4:50 PM

tobiu
Jan 7, 2026, 4:51 PM
Input from Gemini 3 Pro:
✦ Refactored Portal "Learn" views into a shared structure to support the upcoming "Releases" section.
Changes:
- Shared Components: Created
apps/portal/view/shared/content/containing generic versions of the Learn components:
Container.mjs(Layout)TreeList.mjs(Navigation)Component.mjs(Markdown Viewer)PageContainer.mjs(Main Content Area)SectionsContainer.mjs&SectionsList.mjs(Right Sidebar)- Refactoring:
apps/portal/view/learn/MainContainer.mjsnow extends the new sharedContainer.- Styling: Moved and renamed corresponding SCSS files to
resources/scss/src/apps/portal/shared/content/and updated CSS class names to be generic (e.g.,.portal-shared-content-container).- Store Decoupling: Updated
MainContainerControllerandMainContainerStateProviderinlearnto use generic store keys (tree,sections) instead of specific names.This provides the foundation for the "Releases" section to reuse the same layout and logic.
tobiu cross-referenced by #8389 on Jan 7, 2026, 4:59 PM
Refactor the components in
apps/portal/view/learninto a generic, reusable structure underapps/portal/view/shared/content.Goal: Enable the "Releases" section (and potentially others) to reuse the "Tree Nav + Content + Sections List" layout used by the "Learn" section.
Scope:
apps/portal/view/shared/content/.ContentTreeList.mjs->TreeList.mjsContentComponent.mjs->Component.mjsPageContainer.mjs->PageContainer.mjsPageSectionsContainer.mjs->SectionsContainer.mjsPageSectionsList.mjs->SectionsList.mjsMainContainer.mjs->Container.mjs(Base Layout)routePrefixconfig toTreeListto handle different routing contexts (e.g./learnvs/releases).apps/portal/view/learn/MainContainer.mjsto extend the new Shared Container.apps/portal/view/learn/.Note: Implementation of the "Releases" section using these new components is out of scope for this ticket.