diff --git a/src/components/HasManyFields/HasManyFields.d.ts b/src/components/HasManyFields/HasManyFields.d.ts index 4d28209c2..1e09c672b 100644 --- a/src/components/HasManyFields/HasManyFields.d.ts +++ b/src/components/HasManyFields/HasManyFields.d.ts @@ -16,6 +16,8 @@ interface HasManyFieldsPropTypes { minimumRows?: number; maximumRows?: number; reorderable?: boolean; + dragHandle?: 'outside' | 'inside'; + rowClassName?: string; value?: HasManyValue[]; className?: string; } diff --git a/src/components/HasManyFields/HasManyFields.js b/src/components/HasManyFields/HasManyFields.js index deea2f634..fc634703c 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,32 +144,53 @@ class HasManyFields extends React.Component { return isFunction && !(Template.prototype && Template.prototype.render); }; - renderHasManyFieldsRow = (key, index, value) => { - const { template: Template, disabled, deleteProps, errors, minimumRows } = this.props; + renderHasManyFieldsRow = (key, index, value, dragHandle) => { + const { + template: Template, + disabled, + deleteProps, + errors, + minimumRows, + rowClassName, + } = this.props; const refProps = this.isStateless(Template) ? {} : { ref: this.setRowReference(index) }; + const template = ( +