Demos
NB: There are many more demos in the Iterate.Array component documentation and in each of the iterate components.
Static generated fields
Code Editor
<Iterate.Array defaultValue={['Iron Man', 'Captain America', 'The Hulk']} onChange={console.log} > <Field.String itemPath="/" /> </Iterate.Array>
Static generated values
- Iron Man
- Captain America
- The Hulk
Code Editor
<Value.SummaryList> <Iterate.Array defaultValue={['Iron Man', 'Captain America', 'The Hulk']} > <Value.String itemPath="/" /> </Iterate.Array> </Value.SummaryList>
Static generated in a Table
| Name | Age |
|---|---|
| EtternavnIron Man | |
| EtternavnCaptain America | |
| EtternavnThe Hulk |
Code Editor
<Table> <thead> <Tr> <Th>Name</Th> <Th>Age</Th> </Tr> </thead> <tbody> <Iterate.Array withoutFlex defaultValue={[ { name: 'Iron Man', age: 45, }, { name: 'Captain America', age: 123, }, { name: 'The Hulk', age: 3337, }, ]} > <Tr> <Td> <Value.Name.Last itemPath="/name" /> </Td> <Td> <Value.Number itemPath="/age" /> </Td> </Tr> </Iterate.Array> </tbody> </Table>
Animated container
Using the Iterate.AnimatedContainer with an optional title and Iterate.Toolbar.
Code Editor
const MyForm = () => { const { count } = Iterate.useCount('myForm') return ( <Form.Handler defaultData={{ myList: ['Item 1'], }} id="myForm" > <Form.Card> <Iterate.Array path="/myList" placeholder={<>Empty list</>}> <Iterate.AnimatedContainer title="Title {itemNo}"> <Field.String label="Label" itemPath="/" /> <Iterate.Toolbar> <Iterate.RemoveButton /> </Iterate.Toolbar> </Iterate.AnimatedContainer> </Iterate.Array> <Iterate.PushButton path="/myList" pushValue={`Item ${String(count('/myList') + 1)}`} text="Add new item" /> </Form.Card> </Form.Handler> ) } render(<MyForm />)
Toggle between a view and edit container
Using the Iterate.ViewContainer and Iterate.EditContainer.
Code Editor
const MyEditItemForm = () => { return ( <Field.Composition> <Field.Name.First itemPath="/firstName" width="medium" /> <Field.Name.Last itemPath="/lastName" width="medium" required /> </Field.Composition> ) } const MyEditItem = () => { return ( <Iterate.EditContainer title="Edit account holder {itemNo}" titleWhenNew="New account holder {itemNo}" > <MyEditItemForm /> </Iterate.EditContainer> ) } const MyViewItem = () => { const item = Iterate.useItem() console.log('index:', item.index) return ( <Iterate.ViewContainer title="Account holder {itemNo}"> <Value.SummaryList> <Value.Name.First itemPath="/firstName" showEmpty /> <Value.Name.Last itemPath="/lastName" placeholder="-" /> </Value.SummaryList> </Iterate.ViewContainer> ) } const CreateNewEntry = () => { return ( <Iterate.PushContainer path="/accounts" title="New account holder" openButton={ <Iterate.PushContainer.OpenButton text="Add another account" /> } showOpenButtonWhen={(list) => list.length > 0} > <MyEditItemForm /> </Iterate.PushContainer> ) } const MyForm = () => { return ( <Form.Handler data={{ accounts: [ { firstName: 'Tony', lastName: 'Rogers', }, ], }} onChange={(data) => console.log('DataContext/onChange', data)} onSubmit={async (data) => console.log('onSubmit', data)} > <Flex.Stack> <Form.MainHeading>Accounts</Form.MainHeading> <Form.Card gap={false}> <Iterate.Array path="/accounts"> <MyViewItem /> <MyEditItem /> </Iterate.Array> <CreateNewEntry /> </Form.Card> <Form.SubmitButton variant="send" /> </Flex.Stack> </Form.Handler> ) } render(<MyForm />)