Content
View differences
Updated by Alexander Coles 6 days ago
## Parent
#DREAM-671
## What to build
Migrate the manually selected Resource Planner work package list from the shared Dragula controller to `sortable-lists`.
Reuse #DREAM-786's completed tag-independent Use cluster 1's tag-agnostic source-row resolution and for the shared BorderBoxTable integration [DREAM-838](https://community.openproject.org/wp/DREAM-838). The existing work package list already uses BorderBoxTable; this ticket owns its sortable-lists consumer and persistence migration. table-style row markup. Change the custom reorder/repack path to accept `prev_id` directly, validate the anchor inside the current ordered query, and repack the final positions transactionally.
Reconcile the existing Resource Planner content component with a morph response and adopt #DREAM-775's shared directional menu descriptor, replacing the module-specific top/up/down/bottom submenu and persistence path.
## Acceptance criteria
- [ ] Table-style work package rows drag through the shared tag-agnostic suite.
- [ ] Reorder persistence accepts a relative predecessor and validates it inside the current ordered query.
- [ ] Blank anchors move to top; unknown/out-of-query/self anchors return 422 without repacking.
- [ ] Reorder and position repacking are transactional and leave a dense canonical order.
- [ ] Successful drops morph the Resource Planner content boundary and remain draggable afterward.
- [ ] The shared directional menu descriptor replaces the module-specific submenu and uses the same request as dragging.
- [ ] Existing add/remove work package, add/remove user, allocation, and manual-selection behavior remains functional.
- [ ] The bogus `position_mode_value="position"` declaration, target-container accessor workaround, and Dragula controller wiring are removed.
- [ ] Focused request, component, frontend, and feature tests cover top/middle/bottom moves, invalid anchors, menu moves, morph reconciliation, and a representative larger list.
## Shared table coordination
[DREAM-838](https://community.openproject.org/wp/DREAM-838) owns the reusable rows-container wiring, semantic-table drag/menu coverage and Lookbook guidance. Consume that integration without copying the BorderBoxTable template. Keep Resource Planner's move endpoint, strict anchor validation, transactional repacking and consumer-level regression coverage here. [DREAM-837](https://community.openproject.org/wp/DREAM-837) owns the separate plain-BorderBox screen conversions and does not duplicate this migration.
#DREAM-671
## What to build
Migrate the manually selected Resource Planner work package list from the shared Dragula controller to `sortable-lists`.
Reuse #DREAM-786's completed tag-independent
Reconcile the existing Resource Planner content component with a morph response and adopt #DREAM-775's shared directional menu descriptor, replacing the module-specific top/up/down/bottom submenu and persistence path.
## Acceptance criteria
- [ ] Table-style work package rows drag through the shared tag-agnostic suite.
- [ ] Reorder persistence accepts a relative predecessor and validates it inside the current ordered query.
- [ ] Blank anchors move to top; unknown/out-of-query/self anchors return 422 without repacking.
- [ ] Reorder and position repacking are transactional and leave a dense canonical order.
- [ ] Successful drops morph the Resource Planner content boundary and remain draggable afterward.
- [ ] The shared directional menu descriptor replaces the module-specific submenu and uses the same request as dragging.
- [ ] Existing add/remove work package, add/remove user, allocation, and manual-selection behavior remains functional.
- [ ] The bogus `position_mode_value="position"` declaration, target-container accessor workaround, and Dragula controller wiring are removed.
- [ ] Focused request, component, frontend, and feature tests cover top/middle/bottom moves, invalid anchors, menu moves, morph reconciliation, and a representative larger list.
## Shared table coordination
[DREAM-838](https://community.openproject.org/wp/DREAM-838) owns the reusable rows-container wiring, semantic-table drag/menu coverage and Lookbook guidance. Consume that integration without copying the BorderBoxTable template. Keep Resource Planner's move endpoint, strict anchor validation, transactional repacking and consumer-level regression coverage here. [DREAM-837](https://community.openproject.org/wp/DREAM-837) owns the separate plain-BorderBox screen conversions and does not duplicate this migration.