Skip to main content

<ArrayInput>

The <ArrayInput> component lets users manage a list of structured items in a form, wrapping Cloudscape's AttributeEditor. Each item can contain multiple fields defined as children.

Usage

import { ArrayInput, TextInput, NumberInput } from '@strato-admin/admin';

<ArrayInput source="variants" label="Variants">
<TextInput source="sku" label="SKU" />
<TextInput source="color" label="Color" />
<NumberInput source="stock" label="Stock" />
</ArrayInput>;

Each child input defines one column in the editor. The source on each child is relative to the item object (e.g., for an item at index 2, sku becomes variants.2.sku internally).

Usage in ResourceSchema

<ArrayInput> is the default input inferred when an <ArrayField> is used in a ResourceSchema. To customize it, pass it explicitly via the input prop:

<ArrayField source="items" label="Items">
<ReferenceField source="product_id" reference="products" label="Product" isRequired />
<NumberField source="quantity" label="Quantity" isRequired />
</ArrayField>

With a custom grid layout:

<ArrayField source="items" label="Items" input={<ArrayInput gridLayout={[{ rows: [[3, 1]] }]} />}>
<ReferenceField source="product_id" reference="products" label="Product" isRequired />
<NumberField source="quantity" label="Quantity" isRequired />
</ArrayField>

Props

PropTypeDefaultDescription

source

The field name in the record that holds the array.

children

Input components that define the columns for each item. Each child must have a source relative to the item object. You can use any standard input (<TextInput>, <NumberInput>, <SelectInput>, etc.) or the <ArrayInput.Item> helper for custom rendering.

addButtonText

The label for the button that adds a new item. Default: 'Add item'

removeButtonText

The label for the remove button shown on each item row. Default: 'Remove item'

empty

Custom content displayed when the array is empty. Default: 'No items added yet.'

disableAddButton

If true, the add button is rendered but non-interactive.

hideAddButton

If true, the add button is not rendered at all.

gridLayout

Controls the column widths of the editor using Cloudscape's AttributeEditor grid layout format.

Example: gridLayout={[{ rows: [[3, 1]] }]} — renders two columns with a 3:1 width ratio.

See the Cloudscape AttributeEditor docs for the full gridLayout specification.

defaultValue

The initial array value when the record has no value for this field.

validate

Validation rules applied to the array as a whole.

<ArrayInput.Item>

A helper for defining a column with custom rendering or a custom input component.

<ArrayInput source="links">
<ArrayInput.Item source="url" label="URL" field={TextInput} />
<ArrayInput.Item source="label" label="Label">
<TextInput placeholder="Optional label" />
</ArrayInput.Item>
</ArrayInput>

source

The field name relative to the item object.

label

The column header label.

field

A component class to use as the input. Receives source, label={false}, validate, and defaultValue.

children

Alternatively, pass JSX directly for fully custom rendering.

validate

Validation rules for this field.

defaultValue

Default value for this field when a new item is appended.