Content
View differences
Updated by Alexander Coles 6 days ago
## What to build
Migrate the simple single-list administration surfaces onto the extended `sortable-lists` contract:
* enumerations such as priorities, time-tracking activities, and document types;
* user custom field sections;
* project phase definitions; and
* work package PDF export templates.
These surfaces use the relative `prev_id` ordering coordinate and morph their existing component response boundaries to reconcile canonical order. Export templates gain a server-rendered morph response instead of trusting the client DOM after a successful drop.
Adopt #DREAM-775's shared four-direction move-menu descriptor. Retire surface-specific server-side `move_to` paths where they exist, so drag and menu moves use the same relative-anchor request.
## Acceptance criteria
* [ ] Every listed surface supports drag reorder using `list_type` + `list_id` + `prev_id`.
* [ ] Blank, unknown, out-of-scope, and self-referencing anchors follow the shared strict contract.
* [ ] Successful drops morph the existing update/replace stream boundary and preserve subsequent dragging.
* [ ] PDF export template drops return a proper morph response.
* [ ] Each surface uses the shared directional menu descriptor and client-side availability gating.
* [ ] Existing filter, toggle, enable/disable, create/edit/delete, and empty-state behavior remains functional.
* [ ] Dragula wiring, surface-specific drop-position parameters, and retired move-menu persistence paths are removed.
* [ ] Focused service/request, component, frontend, and feature tests cover first/middle/last moves, empty lists where supported, menu moves, and post-morph dragging.
## BorderBoxTable follow-up
Document types remains part of this ticket's enumeration reorder migration. [DREAM-840](https://community.openproject.org/wp/DREAM-840) follows it to replace the multi-column plain BorderBox presentation with BorderBoxTable, using shared integration [DREAM-838](https://community.openproject.org/wp/DREAM-838). Keep endpoint validation, relative ordering and shared move-menu adoption here; the follow-up owns table markup and integration. #DREAM-802 is closed, so its list-markup prerequisite is satisfied.
Migrate the simple single-list administration surfaces onto the extended `sortable-lists` contract:
* enumerations such as priorities, time-tracking activities, and document types;
Adopt #DREAM-775's shared four-direction move-menu descriptor. Retire surface-specific server-side `move_to` paths where they exist, so drag and menu moves use the same relative-anchor request.
## Acceptance criteria
* [ ] Every listed surface supports drag reorder using `list_type` + `list_id` + `prev_id`.
* [ ] Blank, unknown, out-of-scope, and self-referencing anchors follow the shared strict contract.
* [ ] Successful drops morph the existing update/replace stream boundary and preserve subsequent dragging.
* [ ] PDF export template drops return a proper morph response.
* [ ] Each surface uses the shared directional menu descriptor and client-side availability gating.
* [ ] Existing filter, toggle, enable/disable, create/edit/delete, and empty-state behavior remains functional.
* [ ] Dragula wiring, surface-specific drop-position parameters, and retired move-menu persistence paths are removed.
* [ ] Focused service/request, component, frontend, and feature tests cover first/middle/last moves, empty lists where supported, menu moves, and post-morph dragging.
## BorderBoxTable follow-up
Document types remains part of this ticket's enumeration reorder migration. [DREAM-840](https://community.openproject.org/wp/DREAM-840) follows it to replace the multi-column plain BorderBox presentation with BorderBoxTable, using shared integration [DREAM-838](https://community.openproject.org/wp/DREAM-838). Keep endpoint validation, relative ordering and shared move-menu adoption here; the follow-up owns table markup and integration. #DREAM-802 is closed, so its list-markup prerequisite is satisfied.