Drag-and-drop reordering between sibling nodes in the TreeList widget is a feature I've been greatly anticipating, and I'm happy to see it available in the 2020 R3 release. Unfortunately, in its first incarnation, it has some serious reliability issues and doesn't seem production-ready to me. See the attached screen recording of the widget's demo page and observe the steps I take:
- I drag Rinah's node to the upper border of its current position, which is also the bottom border of Akeem's node. Nothing happens, as expected.
- I do the same thing again, but this time, it reorders Rinah before Akeem.
- I then drag Rinah to the upper border of its current position again, which is also the bottom border of its parent node Hyacinth. Instead of the expected behavior of nothing happening, Rinah becomes a sibling of Hyacinth ordered after her.
- I drag Rinah back to be a child of Hyacinth again so I can retest the same action from step 3.
- I repeat step 3. Rinah becomes a sibling of Hyacinth again, but this time she is ordered before Hyacinth instead of after her.
From these steps, I can identify two bugs and a UX suggestion.
- Bug: Steps 1 and 2 should not have produced different results. The same action should consistently produce the same result.
- Bug: Dragging a node to the upper or lower border of its current position should not trigger any reordering action.
- Suggestion: Implement you drag-and-drop reordering UX to be more like DevExpress's TreeList. In their implementation, dragging a node to the upper or lower border of its current position does not even show a reordering indicator, making it obvious to the user that they're not going to reorder anything. In addition, their styling for doing a sibling-level reordering (a thick horizontal line across the entire length of the row where it's being reordered to) versus a re-parenting (making all four borders of the new parent appear thick while you're hovering over it) is much more intuitive in my opinion. It's very obvious when the node is going to be reordered, re-parented, or neither. See the other attachment for an example of what I mean.