Form Repeat
Learn how Form Repeat structures nested form rows in Wappler so users can add, remove, reorder, and submit repeated data as one coherent request.
This tour explains both the UI problem and the data model behind Form Repeat. You will look at how repeated rows are defined, which controls manage those rows, and how Wappler turns the repeated inputs into structured data the server can process.
What it solves
Section titled “What it solves”By the end, you should recognize when Form Repeat is the right tool: whenever users need to manage a variable number of related entries in one form and you want Wappler to keep the repeated fields, controls, and submitted payload aligned.
Where you configure it
Section titled “Where you configure it”This tour selects the Form Repeat component in App Structure and then inspects its Items/min/max/sortable properties in Properties.
Core properties
Section titled “Core properties”Configure what repeats and how it behaves.
Form Repeat component
Section titled “Form Repeat component”This component repeats a block of form fields for each item.
Items (what repeats)
Section titled “Items (what repeats)”Items is bound to an array source. Each row gets its own scope (name/qty in this example).
Min items
Section titled “Min items”Min prevents removing rows below a required count. Use canAdd/canRemove to keep buttons in sync.
tip: Bind disabled to lineItems.canAdd / lineItems.canRemove so controls stay in sync with min/max.
Max items
Section titled “Max items”Max prevents adding too many rows. Pair it with canAdd so the Add button disables at the limit.
Sortable + handle
Section titled “Sortable + handle”Enable sortable for drag reordering, and set a handle selector so only a handle can drag.
important: Use a handle (like .handle) so inputs remain easy to edit without accidental drags.
Handle selector
Section titled “Handle selector”Handle is the CSS selector that defines the drag grip (so editing inputs doesn’t start dragging).
tip: In this page, the drag button uses the class .handle, so Handle is set to .handle.
Animation (ms)
Section titled “Animation (ms)”Animation controls how long the drag reorder animation runs (in milliseconds).
Actions and events
Section titled “Actions and events”Form Repeat includes actions for adding, removing, moving, duplicating, and resetting rows.
Common actions
Section titled “Common actions”Attach these actions to button click events via the Actions Picker.
Common events
Section titled “Common events”Listen to lifecycle events like added/removed/moved when you need to trigger follow-up logic.
Preview mode: try the repeat controls
Section titled “Preview mode: try the repeat controls”Switch to Preview mode and use the controls to add/duplicate/remove rows. This shows how repeat actions drive the UI.
Preview mode
Section titled “Preview mode”Switch to Preview mode now so you can test the repeated form output live in the next step instead of only inspecting the configuration.
Wait for Preview mode
Section titled “Wait for Preview mode”Wait for the page to finish switching modes.
Add item button
Section titled “Add item button”We’ll click Add item to append a new row (until max).
Duplicate a row
Section titled “Duplicate a row”Duplicate copies the row values into a new item.
Remove a row
Section titled “Remove a row”Remove deletes a row. When you hit min, the button disables via lineItems.canRemove.
Try editing row fields
Section titled “Try editing row fields”Edit the Name/Qty inputs, then duplicate a row to see the values carry over.
Reset back to initial items
Section titled “Reset back to initial items”Reset restores the original array so you can try again.
Return to Edit mode
Section titled “Return to Edit mode”Return to Edit mode so you can keep refining the repeated form after checking the live result.
Wrap-up
Section titled “Wrap-up”Next, connect the repeated fields to a Server Connect form for nested inserts/updates.
Next steps
Section titled “Next steps”Pick a related tour to continue.