From df39774a05e66a9ef8b595608d7a66a9da5046e4 Mon Sep 17 00:00:00 2001 From: Theo Velikov Date: Wed, 22 Jul 2026 14:18:21 -0700 Subject: [PATCH 1/2] feat: support dragHandle="inside" on reorderable HasManyFields --- .../HasManyFields/HasManyFields.d.ts | 1 + src/components/HasManyFields/HasManyFields.js | 57 +++++++++++++------ .../HasManyFields/HasManyFields.spec.js | 34 +++++++++++ .../HasManyFields/HasManyFields.stories.js | 7 +++ 4 files changed, 82 insertions(+), 17 deletions(-) diff --git a/src/components/HasManyFields/HasManyFields.d.ts b/src/components/HasManyFields/HasManyFields.d.ts index 4d28209c2..fbb6922c1 100644 --- a/src/components/HasManyFields/HasManyFields.d.ts +++ b/src/components/HasManyFields/HasManyFields.d.ts @@ -16,6 +16,7 @@ interface HasManyFieldsPropTypes { minimumRows?: number; maximumRows?: number; reorderable?: boolean; + dragHandle?: 'outside' | 'inside'; value?: HasManyValue[]; className?: string; } diff --git a/src/components/HasManyFields/HasManyFields.js b/src/components/HasManyFields/HasManyFields.js index deea2f634..6cb1ccf43 100644 --- a/src/components/HasManyFields/HasManyFields.js +++ b/src/components/HasManyFields/HasManyFields.js @@ -9,15 +9,22 @@ import HasManyFieldsRow from './HasManyFieldsRow'; const DragHandler = withDragHandler(); -const SortableItem = ReorderableElement(({ key, sortIndex, value, renderHasManyFieldsRow }) => ( -
- -
{renderHasManyFieldsRow(null, sortIndex, value)}
-
-)); +const SortableItem = ReorderableElement( + ({ key, sortIndex, value, renderHasManyFieldsRow, dragHandleInside }) => + dragHandleInside ? ( +
+ {renderHasManyFieldsRow(null, sortIndex, value, )} +
+ ) : ( +
+ +
{renderHasManyFieldsRow(null, sortIndex, value)}
+
+ ) +); const SortableContainer = ReorderableContainer( - ({ value, renderAddRow, renderHasManyFieldsRow }) => ( + ({ value, renderAddRow, renderHasManyFieldsRow, dragHandleInside }) => (
{value.map((item, index) => ( ))} @@ -44,6 +52,7 @@ class HasManyFields extends React.Component { minimumRows: 1, maximumRows: Infinity, reorderable: false, + dragHandle: 'outside', }; constructor(props) { @@ -135,10 +144,21 @@ class HasManyFields extends React.Component { return isFunction && !(Template.prototype && Template.prototype.render); }; - renderHasManyFieldsRow = (key, index, value) => { + renderHasManyFieldsRow = (key, index, value, dragHandle) => { const { template: Template, disabled, deleteProps, errors, minimumRows } = this.props; const refProps = this.isStateless(Template) ? {} : { ref: this.setRowReference(index) }; + const template = ( +