49 lines
2.6 KiB
Markdown
49 lines
2.6 KiB
Markdown
## Purpose
|
|
Define stable requirements for portal-drawer-navigation.
|
|
|
|
## Requirements
|
|
|
|
### Requirement: Portal Navigation SHALL Group Entries by Functional Drawers
|
|
The portal SHALL group navigation entries into functional drawers as defined in the `drawers` configuration of `page_status.json`, rendered by the active portal runtime (server template or SPA shell) without changing drawer assignment semantics.
|
|
|
|
#### Scenario: Drawer grouping visibility
|
|
- **WHEN** users open the portal
|
|
- **THEN** the sidebar SHALL display drawers in the order defined by each drawer's `order` field
|
|
- **THEN** each drawer SHALL show only the pages assigned to it via `drawer_id`, sorted by each page's `order` field
|
|
|
|
#### Scenario: Admin-only drawer visibility
|
|
- **WHEN** a drawer has `admin_only: true` and the current user is not admin
|
|
- **THEN** the drawer and all its pages SHALL NOT be rendered in the sidebar
|
|
|
|
#### Scenario: Empty drawer visibility
|
|
- **WHEN** a drawer has no visible pages (all filtered out by page visibility checks)
|
|
- **THEN** the drawer group title SHALL NOT be rendered
|
|
|
|
### Requirement: Existing Page Behavior SHALL Remain Compatible
|
|
The portal navigation refactor SHALL preserve existing target routes while replacing iframe-based page embedding with route-driven navigation.
|
|
|
|
#### Scenario: Route continuity
|
|
- **WHEN** a user selects an existing page entry from a drawer
|
|
- **THEN** the corresponding original route SHALL be loaded without changing page business logic behavior
|
|
|
|
#### Scenario: Direct navigation without iframe
|
|
- **WHEN** a sidebar item is clicked
|
|
- **THEN** the browser SHALL navigate to the page's route in the same window
|
|
- **THEN** the portal SHALL NOT render or activate iframe elements for page content
|
|
|
|
### Requirement: Drawer Configuration and Visibility SHALL Remain Deterministic During Migration
|
|
Migration to SPA navigation SHALL preserve the effective drawer visibility outcomes defined by current `drawers + pages + status + admin_only` rules.
|
|
|
|
#### Scenario: Non-admin visible drawer pages remain stable
|
|
- **WHEN** a non-admin user opens the portal after migration
|
|
- **THEN** only pages with released visibility in non-admin drawers SHALL be visible
|
|
- **THEN** admin-only drawers SHALL remain hidden
|
|
|
|
#### Scenario: Admin visible drawer pages remain stable
|
|
- **WHEN** an admin user opens the portal after migration
|
|
- **THEN** all pages allowed by drawer assignment and page status rules SHALL remain visible
|
|
|
|
#### Scenario: Duplicate order values resolve deterministically
|
|
- **WHEN** multiple pages or drawers share the same `order` value
|
|
- **THEN** rendering order SHALL still be deterministic and repeatable across requests
|