mirror of
https://github.com/4gray/iptvnator.git
synced 2026-10-08 17:06:15 -08:00
docs: update portal detail navigation and workspace dashboard architecture for collection detail handling
Entire-Checkpoint: c6e522b4276c
This commit is contained in:
1 parent
5e41e3d1ce
commit
2edb5fe296
2 files changed
+116
-32
No files matched your search
@@ -8,54 +8,111 @@ Related:
|
||||
|
||||
## Summary
|
||||
|
||||
- Xtream uses a route-first detail model.
|
||||
- Xtream category browsing uses a route-first detail model.
|
||||
- Stalker uses an inline/store-state detail model.
|
||||
- Keep favorites/recent/search behavior aligned with the canonical detail model of the same portal.
|
||||
- Do not force both portals into the same behavior unless the full portal detail architecture is being changed.
|
||||
- Favorites and recently viewed collections now use collection-owned inline detail
|
||||
for non-live Xtream and Stalker items.
|
||||
- Provider-scoped collection routes fall back to the matching global collection
|
||||
route when `All playlists` shows a non-live item from the other portal type,
|
||||
so the correct detail host still opens without switching playlist context.
|
||||
- Dashboard `Global Favorites` and `Recently Watched` widgets hand off Xtream and
|
||||
Stalker movies/series into the matching global collection route with detail
|
||||
pre-opened.
|
||||
- Do not force both portals into the same browse/detail behavior unless the full
|
||||
portal detail architecture is being changed.
|
||||
|
||||
## Xtream
|
||||
|
||||
Xtream details are represented by canonical routes.
|
||||
Xtream category and search details are represented by canonical routes.
|
||||
|
||||
Examples:
|
||||
|
||||
- `/xtreams/:id/vod/:categoryId/:vodId`
|
||||
- `/xtreams/:id/series/:categoryId/:serialId`
|
||||
|
||||
Implication:
|
||||
- Favorites, recently viewed, and search should redirect to the original Xtream content route and item route.
|
||||
- This keeps the URL, browser history, and detail rendering model aligned with normal Xtream browsing.
|
||||
|
||||
- Category browsing and search can still redirect to the original Xtream content
|
||||
route and item route.
|
||||
- This keeps the URL, browser history, and detail rendering model aligned with
|
||||
normal Xtream browsing.
|
||||
|
||||
Current code paths:
|
||||
|
||||
- `libs/portal/xtream/feature/src/lib/favorites/favorites.component.ts`
|
||||
- `libs/portal/xtream/feature/src/lib/search-results/search-results.component.ts`
|
||||
- `libs/portal/catalog/feature/src/lib/category-content-view/category-content-view.component.ts`
|
||||
|
||||
Behavior to preserve:
|
||||
- Selecting an Xtream item from favorites/recent/search should navigate to the Xtream content type/category/item route when the item is not a live stream.
|
||||
- Live streams can still open through the player path rather than a detail route.
|
||||
Collection behavior to preserve:
|
||||
|
||||
- Selecting a non-live Xtream item from favorites/recent should keep the current
|
||||
collection route and open inline detail inside the collection pane when the
|
||||
current collection host is already Xtream-aware.
|
||||
- If a Stalker or M3U collection route is showing `All playlists` and the user
|
||||
selects an Xtream movie/series item, route into `/workspace/global-favorites`
|
||||
or `/workspace/global-recent` with detail pre-opened instead of trying to
|
||||
render Xtream detail inside the wrong host.
|
||||
- The current playlist context must stay unchanged even when the selected item
|
||||
belongs to a different Xtream source playlist.
|
||||
- The workspace/sidebar category panel should stay hidden for these collection
|
||||
detail opens.
|
||||
- Back from a collection-owned detail should restore the previous collection
|
||||
view state, including the active content tab and playlist/all-playlists
|
||||
scope.
|
||||
- Live streams can still open through the player path rather than a detail
|
||||
route.
|
||||
|
||||
Dashboard behavior to preserve:
|
||||
|
||||
- Dashboard `Global Favorites` and `Recently Watched` widgets should route
|
||||
Xtream movie/series items into `/workspace/global-favorites` or
|
||||
`/workspace/global-recent` with collection detail pre-opened from navigation
|
||||
state.
|
||||
- Back from the collection detail should return to the dashboard handoff state,
|
||||
not switch the active playlist.
|
||||
|
||||
Search behavior to preserve:
|
||||
|
||||
- Selecting an Xtream item from search should still navigate to the canonical
|
||||
Xtream content type/category/item route when the item is not a live stream.
|
||||
|
||||
## Stalker
|
||||
|
||||
Stalker details are represented by store state and inline detail rendering on the current screen.
|
||||
|
||||
Examples:
|
||||
|
||||
- Category content sets `selectedItem` and renders details inline.
|
||||
- Search sets `selectedItem` and stays on the search view.
|
||||
- Favorites and recently viewed stay on their current collection screen and open inline detail.
|
||||
- Favorites and recently viewed stay on their current collection screen and open
|
||||
inline detail when the current collection host is already Stalker-aware.
|
||||
|
||||
Implication:
|
||||
|
||||
- Favorites, recently viewed, and search should remain in the current Stalker view when opening VOD/series details.
|
||||
- This keeps Stalker behavior aligned with its normal category-content and search flow.
|
||||
|
||||
Current code paths:
|
||||
|
||||
- `libs/portal/stalker/feature/src/lib/stalker-favorites/stalker-favorites.component.ts`
|
||||
- `libs/portal/stalker/feature/src/lib/recently-viewed/recently-viewed.component.ts`
|
||||
- `libs/portal/stalker/feature/src/lib/stalker-search/stalker-search.component.ts`
|
||||
- `libs/portal/catalog/feature/src/lib/category-content-view/category-content-view.component.ts` (Stalker branch)
|
||||
|
||||
Behavior to preserve:
|
||||
|
||||
- Favorites/recent/search should not navigate away to a canonical Stalker detail route because Stalker does not currently use one.
|
||||
- If an Xtream or M3U collection route is showing `All playlists` and the user
|
||||
selects a Stalker VOD/series item, route into `/workspace/global-favorites`
|
||||
or `/workspace/global-recent` with detail pre-opened so the Stalker inline
|
||||
detail host still renders on a compatible screen.
|
||||
- ITV/live items can still trigger playback immediately.
|
||||
- Dashboard `Global Favorites` and `Recently Watched` widgets should route
|
||||
Stalker movie/series items into `/workspace/global-favorites` or
|
||||
`/workspace/global-recent` with detail pre-opened inline, again without
|
||||
switching playlist context or showing the workspace category sidebar.
|
||||
- Back from the collection-owned detail should restore the previous collection
|
||||
tab and scope instead of resetting the collection screen to its defaults.
|
||||
|
||||
## Decision Rule For Future Changes
|
||||
|
||||
@@ -66,16 +123,27 @@ When deciding how a favorites/recent/search click should behave:
|
||||
3. Only unify Xtream and Stalker behavior if the full detail architecture is being unified as well.
|
||||
|
||||
That means:
|
||||
- Xtream: navigate to the canonical route.
|
||||
- Stalker: stay in the current screen and open inline detail.
|
||||
|
||||
- Xtream browse/search: navigate to the canonical route.
|
||||
- Xtream favorites/recent/global collection widgets: open collection-owned
|
||||
detail without switching playlist context. Use the current route when it can
|
||||
host Xtream detail, otherwise fall back to the matching global collection
|
||||
route.
|
||||
- Stalker non-live items: open collection-owned detail without switching
|
||||
playlist context. Use the current route when it can host Stalker detail,
|
||||
otherwise fall back to the matching global collection route.
|
||||
|
||||
## Refactor Guidance
|
||||
|
||||
If a future change proposes that Stalker favorites/recent should deep-link into category routes:
|
||||
|
||||
- also update Stalker category-content and search behavior
|
||||
- define a canonical Stalker detail route model first
|
||||
- update architecture docs and portal skills together
|
||||
|
||||
If a future change proposes that Xtream favorites/recent should stay inline:
|
||||
- also replace Xtream route-based detail pages with a portal-local inline detail model
|
||||
- verify history/back behavior and deep links still make sense
|
||||
|
||||
- keep the existing route-based detail pages reusable from the collection-owned
|
||||
detail host
|
||||
- verify history/back behavior, playlist preservation, and dashboard handoff
|
||||
behavior still make sense
|
||||
@@ -35,20 +35,20 @@ Registered widget types:
|
||||
Default layout:
|
||||
|
||||
1. `continue-watching`
|
||||
1. Enabled by default
|
||||
2. Size `full`
|
||||
1. Enabled by default
|
||||
2. Size `full`
|
||||
2. `recently-watched`
|
||||
1. Enabled by default
|
||||
2. Size `two-thirds`
|
||||
3. Scope-aware
|
||||
1. Enabled by default
|
||||
2. Size `two-thirds`
|
||||
3. Scope-aware
|
||||
3. `global-favorites`
|
||||
1. Enabled by default
|
||||
2. Size `one-third`
|
||||
3. Scope-aware
|
||||
1. Enabled by default
|
||||
2. Size `one-third`
|
||||
3. Scope-aware
|
||||
4. `source-stats`
|
||||
1. Present in the registry
|
||||
2. Disabled by default
|
||||
3. Size `one-third`
|
||||
1. Present in the registry
|
||||
2. Disabled by default
|
||||
3. Size `one-third`
|
||||
|
||||
The old refactor summary mentioned `Recent Sources`, but that widget is not in
|
||||
the current registry and should not be documented as shipped behavior.
|
||||
@@ -62,13 +62,13 @@ Current storage details:
|
||||
1. Storage key: `workspace-dashboard-layout-v3`
|
||||
2. Schema version: `12`
|
||||
3. Size presets:
|
||||
1. `one-third`
|
||||
2. `half`
|
||||
3. `two-thirds`
|
||||
4. `full`
|
||||
1. `one-third`
|
||||
2. `half`
|
||||
3. `two-thirds`
|
||||
4. `full`
|
||||
4. Scope settings:
|
||||
1. `providers: Array<'m3u' | 'xtream' | 'stalker'>`
|
||||
2. `playlistIds: string[]`
|
||||
1. `providers: Array<'m3u' | 'xtream' | 'stalker'>`
|
||||
2. `playlistIds: string[]`
|
||||
|
||||
Normalization rules in `DashboardLayoutService`:
|
||||
|
||||
@@ -89,6 +89,19 @@ Normalization rules in `DashboardLayoutService`:
|
||||
5. Data comes from `DashboardDataService` and existing provider/state services.
|
||||
6. Widget actions deep-link back into workspace/provider routes.
|
||||
|
||||
Dashboard detail handoff contract:
|
||||
|
||||
1. Live items continue to activate their existing playback/provider route flows.
|
||||
2. Xtream and Stalker movies/series from `global-favorites` or
|
||||
`recently-watched` should route into `/workspace/global-favorites` or
|
||||
`/workspace/global-recent` with collection detail pre-opened from navigation
|
||||
state.
|
||||
3. Those collection detail opens must not switch the active playlist in the
|
||||
header playlist switcher.
|
||||
4. Those collection detail opens must not show the workspace category sidebar.
|
||||
5. The detail close/back action should return to the dashboard-origin view
|
||||
rather than reopening provider/category navigation.
|
||||
|
||||
## Customize Mode
|
||||
|
||||
Customize mode is part of the current product, not future work.
|
||||
@@ -111,7 +124,10 @@ than per-widget custom query systems.
|
||||
2. Each widget must own its loading, empty, and error states.
|
||||
3. Dashboard failures must stay isolated to the widget that failed.
|
||||
4. Widget navigation should resolve directly into the relevant content context.
|
||||
5. New widgets should fit the existing constrained layout model unless the
|
||||
5. Dashboard favorites/recent movie/series activations should preserve the
|
||||
current playlist context and use the collection-owned detail host instead of
|
||||
forcing provider/category side-navigation.
|
||||
6. New widgets should fit the existing constrained layout model unless the
|
||||
dashboard architecture is explicitly being expanded.
|
||||
|
||||
## Adding Or Changing Widgets
|
||||
|
||||
Reference in new issue
Block a user