-
-
Notifications
You must be signed in to change notification settings - Fork 195
Open
Labels
Description
Originally: #7207
Goal
To refactor and enhance Neo.draggable.container.SortZone to support more complex drag-and-drop scenarios, such as dragging a component via a child handle. This will make the base class more generic, powerful, and reusable, significantly reducing the need for complex overrides in subclasses like DashboardSortZone.
Tasks
-
Add
dragHandleSelectorConfig:- In
src/draggable/container/SortZone.mjs, introduce a new configuration property:dragHandleSelector. - Type:
String - Default:
null - Purpose: This selector will identify a child element within a sortable item that serves as its drag handle.
- In
-
Refactor
onDragStart:- Modify the
onDragStartmethod to incorporate the newdragHandleSelector. - If
dragHandleSelectoris set, the logic must:- Verify the drag was initiated on an element matching the selector.
- Identify the parent component that owns the handle as the actual item to be dragged.
- Implicitly filter the owner's items to only consider components containing a
dragHandleSelectorelement as sortable. All internal logic (e.g., creatingitemRects) should operate on this filtered list.
- If
dragHandleSelectorisnull, the method must fall back to its original behavior to ensure backward compatibility.
- Modify the
-
Ensure Method Compatibility:
- Review and adjust other methods (
onDragEnd,switchItems,updateItem) to ensure they correctly handle the filtered list of sortable items and the associated index mappings.
- Review and adjust other methods (
Acceptance Criteria
- When
dragHandleSelectoris configured on aSortZone, dragging an element matching the selector initiates a drag operation for its parent component. - Items within the
SortZone's owner that do not contain an element matching thedragHandleSelectorare not considered sortable and are ignored by the drag-drop logic. - The
DashboardSortZonecan be refactored into a minimal subclass that primarily just configures thedragHandleSelector. - Existing functionalities that use
container.SortZone(e.g., tab header reordering) remain unaffected and work as before.