LearnNewsExamplesServices
Frontmatter
id8388
titleRefactor Portal Learning Views to Shared Content Viewer
stateClosed
labels
documentationrefactoring
assigneestobiu
createdAtJan 7, 2026, 4:34 PM
updatedAtJan 7, 2026, 4:51 PM
githubUrlhttps://github.com/neomjs/neo/issues/8388
authortobiu
commentsCount1
parentIssue8362
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtJan 7, 2026, 4:50 PM

Refactor Portal Learning Views to Shared Content Viewer

Closed v11.19.0 documentationrefactoring
tobiu
tobiu commented on Jan 7, 2026, 4:34 PM

Refactor the components in apps/portal/view/learn into a generic, reusable structure under apps/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:

  1. Create apps/portal/view/shared/content/.
  2. Move and rename the following components to the new shared directory:
    • ContentTreeList.mjs -> TreeList.mjs
    • ContentComponent.mjs -> Component.mjs
    • PageContainer.mjs -> PageContainer.mjs
    • PageSectionsContainer.mjs -> SectionsContainer.mjs
    • PageSectionsList.mjs -> SectionsList.mjs
    • MainContainer.mjs -> Container.mjs (Base Layout)
  3. Ensure these shared components are decoupled from specific "Learn" stores where possible (relying on StateProvider store keys).
    • Add routePrefix config to TreeList to handle different routing contexts (e.g. /learn vs /releases).
  4. Refactor apps/portal/view/learn/MainContainer.mjs to extend the new Shared Container.
  5. Update imports and references in apps/portal/view/learn/.
  6. Verify the "Learn" section continues to function correctly.

Note: Implementation of the "Releases" section using these new components is out of scope for this ticket.

tobiu added the documentation label on Jan 7, 2026, 4:34 PM
tobiu added the refactoring label on Jan 7, 2026, 4:34 PM
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
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.mjs now extends the new shared Container.
  • 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 MainContainerController and MainContainerStateProvider in learn to 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
jonnyamsp referenced in commit 53c31bf - "refactor(Portal): Move Learn content views to shared/content for reuse on Jan 8, 2026, 2:25 PM