-
-
Notifications
You must be signed in to change notification settings - Fork 166
Open
Labels
enhancementNew feature or requestNew feature or request
Description
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
dragHandleSelector
Config:- 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
onDragStart
method to incorporate the newdragHandleSelector
. - If
dragHandleSelector
is 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
dragHandleSelector
element as sortable. All internal logic (e.g., creatingitemRects
) should operate on this filtered list.
- If
dragHandleSelector
isnull
, 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
dragHandleSelector
is 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 thedragHandleSelector
are not considered sortable and are ignored by the drag-drop logic. - The
DashboardSortZone
can 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.
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request