angular / angular/components

CDK Drag Drop issues with nested lists

Offen
#16,671 62 Kommentare 95 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
area: cdk/drag-drop P2
Vorherrschende Sprache
TypeScript
Sterne
25k
Forks
6.8k
Ø Merge
1 T. 8 Std.
Gemergte PRs (30 T.)
91

Beschreibung

#### Reproduction

https://stackblitz.com/edit/angular-drag-and-drop-child-groups-fxzjja?file=app%2Fcdk-drag-drop-connected-sorting-group-example.html

Steps to reproduce:
1. Try to drag element "Brush teeth" to before "Drive to office" or before "Walk dog"
2. this will not be possible


#### Expected Behavior

Drag / Drop to all lists contained in cdkDropListConnectedTo

#### Actual Behavior

Items from inner Lists may only be dropped to outer lists, not to sibling or their own lists

#### Environment

- Angular: 8.1.2
- CDK/Material: 8.1.2
- Browser(s): Firefox / Chrome
- Operating System (e.g. Windows, macOS, Ubuntu): Debian Linux, Windows

#### Additional Info
When using CDK drag / drop (8.0.0 up to and including 8.1.2) with nested
lists, two issues arise that prevent an easy use of the feature:

a) dragging does not work from inner list to inner list

- See
https://stackblitz.com/edit/angular-drag-and-drop-child-groups-fxzjja?file=app%2Fcdk-drag-drop-connected-sorting-group-example.html

- When dragging an inner item (e.g. Brush teeth) it is only possible to
drop it in the outer list, not in its own list and not in its sibling list.

- It turns out, that order in cdkDropListConnectedTo is important: when
I reverse the items, it will partially work: See
https://stackblitz.com/edit/angular-drag-and-drop-child-groups-mxrkae?file=app%2Fcdk-drag-drop-connected-sorting-group-example.html

- Still, it is not possible to drop an item from an inner list in into
its own list

b) dragging does not work in the drop item's source list

- See above

- You may find a hack for this in
https://stackblitz.com/edit/angular-drag-and-drop-child-groups-35em6n?file=app/cdk-drag-drop-connected-sorting-group-example.html

Explanation and proposed solution.

For above case a) mentioning it in the documentation may be sufficient -
it can be influenced from the outside. However, a more intelligent
solution (e.g. identifying the toplevel sublist) would be nice.

For case b), filtering out the source list in
src/cdk/drag-drop/directives/drop-list.ts seems to cause the issue:
ref.connectedTo(siblings.filter(drop => drop && drop !==
this).map(list => list._dropListRef))
My hack replaces this by an unfiltered list - in quite an ugly manner.

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne mit den verknüpften StackBlitz-Reproduktionen, um das Verhalten verschachtelter Listen zu bestätigen. Lies src/cdk/drag-drop/directives/drop-list.ts, insbesondere die in diesem Issue beschriebene Einrichtung verbundener Listen, und finde relevante Drag-and-Drop-Tests. Fertig ist die Aufgabe, wenn Elemente aus inneren Listen in ihre eigene, in Geschwister- und in äußere verbundene Listen abgelegt werden können, einschließlich der Quellliste.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
angular, typescript
Bereich
frontend
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.