Skip to content

Commit 0cf2b9e

Browse files
committed
feat: make Repeater draggable by adding draggable prop and context handling
1 parent eb9c9dc commit 0cf2b9e

4 files changed

Lines changed: 7 additions & 3 deletions

File tree

dev/pages/inputs/Repeater.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ const schema
2929
displayCloneButton: true,
3030
displayAddButton: true,
3131
displayDeleteButton: true,
32+
draggable: true,
3233
displayDragHandle: true,
3334
insertButtonLabel: 'Add Attack',
3435
insertButtonClass: 'mb-2',

dev/pages/samples/Repeater.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ const schema
3131
itemClass: '',
3232
hideButtonGroup: false,
3333
hideMoveButtons: false,
34+
draggable: true,
3435
displayDragHandle: true,
3536
dragHandleClass: 'mt-3 me-2 cursor-move text-surface-500',
3637
dragHandleIconClass: 'pi pi-bars',

src/definitions/repeater.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ export const primeRepeaterDefinition: FormKitTypeDefinition = createInput(
4545
], {
4646
id: '$getListItemId($index)',
4747
class: '$getListItemClass($index)',
48-
draggable: '$renderDragHandle',
48+
draggable: '$draggable',
4949
onDragstart: '$dragNodeStart($node.parent, $index)',
5050
onDragover: '$dragNodeOver($index)',
5151
onDragleave: '$dragNodeLeave($index)',
@@ -56,7 +56,7 @@ export const primeRepeaterDefinition: FormKitTypeDefinition = createInput(
5656
], true, 'true'),
5757
], { class: '$internalListClass', id: '$internalListId' }, true),
5858
{
59-
props: ['insertButtonLabel', 'insertButtonClass', 'insertButtonSize', 'alwaysDisplayInsertButton', 'newItem', 'listClass', 'listItemClass', 'hideButtonGroup', 'hideMoveButtons', 'buttonGroupClass', 'buttonGroupItemClass', 'buttonSize', 'displayCloneButton', 'displayAddButton', 'displayDeleteButton', 'minItems', 'maxItems', 'displayDragHandle', 'dragHandleClass', 'dragHandleIconClass'],
59+
props: ['insertButtonLabel', 'insertButtonClass', 'insertButtonSize', 'alwaysDisplayInsertButton', 'newItem', 'listClass', 'listItemClass', 'hideButtonGroup', 'hideMoveButtons', 'buttonGroupClass', 'buttonGroupItemClass', 'buttonSize', 'displayCloneButton', 'displayAddButton', 'displayDeleteButton', 'minItems', 'maxItems', 'displayDragHandle', 'draggable', 'dragHandleClass', 'dragHandleIconClass'],
6060
features: [addRepeaterHandler],
6161
},
6262
)
@@ -80,6 +80,7 @@ function addRepeaterHandler(node: FormKitNode): void {
8080
node.context.insertButtonSize = node.context.insertButtonSize ? node.context.insertButtonSize : ''
8181
node.context.buttonSize = node.context.buttonSize ? node.context.buttonSize : ''
8282
node.context.renderMoveButtons = !node.context.hideMoveButtons
83+
node.context.draggable = !!node.context.draggable
8384
node.context.renderDragHandle = !!node.context.displayDragHandle
8485
node.context.dragHandleIconClass = node.context.dragHandleIconClass || 'pi pi-bars'
8586
node.context.internalDragHandleClass = node.context.dragHandleClass ? `formkit-repeater-drag-handle ${node.context.dragHandleClass}` : 'formkit-repeater-drag-handle'

test/definitions/repeater.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,9 @@ function createRepeaterNode(context: Record<string, any> = {}, props: Record<str
2323

2424
describe('primeRepeaterDefinition', () => {
2525
it('enables drag handlers when drag handle is displayed', () => {
26-
const node = createRepeaterNode({ displayDragHandle: true }, { id: 'attack-list' })
26+
const node = createRepeaterNode({ draggable: true, displayDragHandle: true }, { id: 'attack-list' })
2727

28+
expect(node.context.draggable).toBe(true)
2829
expect(node.context.renderDragHandle).toBe(true)
2930
expect(node.context.dragHandleIconClass).toBe('pi pi-bars')
3031
expect(node.context.internalListId).toContain('formkit-items')

0 commit comments

Comments
 (0)