76 lines
3.3 KiB
Markdown
76 lines
3.3 KiB
Markdown
# PR-07b Asset Navigator and Row Subscriptions
|
|
|
|
Domain owner: `docs/studio`
|
|
|
|
## Briefing
|
|
|
|
Refactor the navigator side of the `Assets` workspace so the list and each asset row update through event subscriptions instead of workspace-wide rerendering.
|
|
|
|
## Objective
|
|
|
|
Make navigator behavior event-directed and component-local.
|
|
|
|
After this PR:
|
|
|
|
- the navigator list subscribes to projection changes it actually needs;
|
|
- each asset row subscribes to row-scoped summary/selection updates;
|
|
- search and filters change the navigator projection without rebuilding the whole workspace;
|
|
- selection styling and row patching happen without forcing a full list refresh from the workspace root.
|
|
- the navigator and row patterns are implemented in a way that other Studio workspaces can reuse for list/detail navigation surfaces.
|
|
|
|
## Dependencies
|
|
|
|
- [`./PR-07a-assets-event-topology-and-lifecycle-foundation.md`](./PR-07a-assets-event-topology-and-lifecycle-foundation.md)
|
|
- [`../specs/4. Assets Workspace Specification.md`](../specs/4.%20Assets%20Workspace%20Specification.md)
|
|
|
|
## Scope
|
|
|
|
- extract the navigator into dedicated controls
|
|
- separate navigator projection calculation from visual control ownership
|
|
- introduce row-scoped subscriptions and row identity handling
|
|
- keep reusable list/projection primitives outside `Assets`-only naming where they are genuinely cross-workspace
|
|
- publish projection updates for:
|
|
- search changes
|
|
- filter changes
|
|
- structural asset collection changes
|
|
- per-asset summary patches
|
|
- selection changes
|
|
- remove direct row bookkeeping from the workspace root where possible
|
|
|
|
## Non-Goals
|
|
|
|
- no details-panel refactor in this slice
|
|
- no final mutation confirmation flow refactor in this slice
|
|
- no broad service-layer redesign beyond what navigator subscriptions require
|
|
|
|
## Execution Method
|
|
|
|
1. Introduce an `AssetNavigatorControl` or equivalent host with lifecycle-managed subscriptions.
|
|
2. Extract row rendering into an `AssetRowControl` or equivalent lifecycle-managed component.
|
|
3. Move search/filter handling to event publication plus projection recalculation.
|
|
4. Publish selection updates as typed events that row controls can consume directly.
|
|
5. Replace root-owned row maps and manual selection restyling with row-scoped update flow.
|
|
|
|
## Acceptance Criteria
|
|
|
|
- asset rows are no longer rebuilt by default on every local navigator change
|
|
- search and filter changes update the navigator projection only
|
|
- selecting an asset updates only the controls that depend on selection
|
|
- patching one asset summary updates the affected row without requiring a full workspace reload
|
|
- navigator controls subscribe and unsubscribe through the lifecycle support
|
|
- reusable navigator/list subscription patterns are left available for future Studio workspaces
|
|
|
|
## Validation
|
|
|
|
- unit tests for navigator projection event flow
|
|
- unit tests for row identity stability across patches
|
|
- unit tests for selection update behavior without full projection rebuild
|
|
- UI smoke validation for search, filters, and selection transitions
|
|
|
|
## Affected Artifacts
|
|
|
|
- `prometeu-studio/src/main/java/p/studio/workspaces/assets/AssetWorkspace.java`
|
|
- new navigator and row controls under `prometeu-studio/src/main/java/p/studio/workspaces/assets/...`
|
|
- `prometeu-studio/src/main/java/p/studio/events/...`
|
|
- tests for navigator projection and row update behavior
|