Content
View differences
Updated by Alexander Coles 6 days ago
**As** a user of OpenProject's OpenProject's Backlogs module
**I want to** use drag and drop to move items
**so that** can manage my backlogs, buckets and sprints effectively.
**Acceptance criteria**
* <br>
**Technical notes**
* Migrating Backlogs DnD from dragula to Atlassian Pragmatic DnD (#AGILE-251).
* Reusable `sortable-lists` Stimulus primitive in `frontend/src/stimulus/controllers/dynamic/`; Backlogs is the first consumer.
* Controller topology under discussion in **#AGILE-292** — recommendation: single root + first-class `list`/`item` leaf controllers via outlets. Not yet a final decision.
* Direction so far: single root per page = whole interaction surface; type-driven drop acceptance (per-list, multi-valued); elements can be both list and item; root holds a `type → move-URL` map; collection move endpoint per type with `ids[]` in the body (single = `[id]`); multi-select state as a root-owned `Set<itemId>`.
* Related: #AGILE-175 (draggable buckets/sprints), #AGILE-181 (multi-select + batch move), #AGILE-278 (bulk move action), #AGILE-284 (optimistic reordering).
<br>
**Permissions and visibility considerations**
* _To whom is this feature visible?_
* _When is it not visible?_
**Translation considerations**
* _Key terms and phrases in the key languages_
**Out of scope**
* <br>
_Set the_ **To be informed/consulted teams** _field to include all teams necessary to be informed of the changes._
**I want to** use drag and drop to move items
**so that** can manage my backlogs, buckets and sprints effectively.
**Acceptance criteria**
* <br>
**Technical notes**
* Migrating Backlogs DnD from dragula to Atlassian Pragmatic DnD (#AGILE-251).
* Reusable `sortable-lists` Stimulus primitive in `frontend/src/stimulus/controllers/dynamic/`; Backlogs is the first consumer.
* Controller topology under discussion in **#AGILE-292** — recommendation: single root + first-class `list`/`item` leaf controllers via outlets. Not yet a final decision.
* Direction so far: single root per page = whole interaction surface; type-driven drop acceptance (per-list, multi-valued); elements can be both list and item; root holds a `type → move-URL` map; collection move endpoint per type with `ids[]` in the body (single = `[id]`); multi-select state as a root-owned `Set<itemId>`.
* Related: #AGILE-175 (draggable buckets/sprints), #AGILE-181 (multi-select + batch move), #AGILE-278 (bulk move action), #AGILE-284 (optimistic reordering).
* _To whom is this feature visible?_
* _When is it not visible?_
**Translation considerations**
* _Key terms and phrases in the key languages_
**Out of scope**
* <br>
_Set the_ **To be informed/consulted teams** _field to include all teams necessary to be informed of the changes._