Skip to content
bahtuiv0.6.0

<baht-repeater>

Array-of-rows control: every row renders the same sub-fields, one level deep. Edits emit the whole array.

Rows of sub-fields

Inside <baht-form> you never touch this element: a field with type "repeater" and fields[] renders it.

<baht-repeater></baht-repeater>

<script>
  const el = document.querySelector('baht-repeater');
  el.field = {
    "order": 1,
    "type": "repeater",
    "key": "servers",
    "label": "Servers",
    "fields": [
      {
        "order": 1,
        "type": "text",
        "key": "host",
        "label": "Host",
        "width": "1/2"
      },
      {
        "order": 2,
        "type": "dropdown",
        "key": "env",
        "label": "Environment",
        "width": "1/2",
        "options": [
          {
            "key": "prod",
            "label": "Production"
          },
          {
            "key": "stage",
            "label": "Staging"
          }
        ]
      }
    ]
  };
  el.value = [
    {
      "host": "srv-01",
      "env": "prod"
    }
  ];
</script>
NameTypeDefaultDescription
rowErrorsJSValidationError[][]Validation errors to show per row
fieldJSFieldDescriptorDescriptor with type "repeater" and fields[] (sub-descriptors; no nesting)
valueJSobject[]nullOne object per row, keyed by sub-field key
disabledbooleanfalse
readonlybooleanfalse
requiredbooleanfalse
show-optionalbooleanfalseAppend the localized "(optional)" marker to the label when not required (set by <baht-form show-optional>).
errorJSstring | nullnull
debouncenumber | undefinedDebounce for typed edits (ms); unset = BahtFieldBase.defaultDebounce.
EventdetailDescription
nameCustomEvent
baht-input{ key, value: object[] }The whole array after any row edit, add or remove