Skip to content

Import

import { Field } from '@dnb/eufemia/extensions/forms'
render(<Field.Composition />)

Description

Field.Composition is a component for when you create a field block that contains of several existing fields. It uses FieldBlock under the hood.

The composition field serves the purpose of managing layout and status messages, with a strong focus on accessibility. More on that topic down below.

There is a corresponding Value.Composition component that can be used for value components.

import { Field } from '@dnb/eufemia/extensions/forms'
render(
<Field.Composition>
<Field.String label="Field A" />
<Field.String Label="Field B" />
</Field.Composition>,
)

When each field inside your composition is horizontally aligned for larger screens, they will wrap to a vertical layout for smaller screens.

If each of the fields have a label, the labels should ideally be top aligned. But when one of the labels contain more text than fits into one line, the fields will be bottom aligned.

In the demo section you find an example on how to handle form states.

Relevant links

Messages

Messages that appears to be the same, will be grouped together and announced as one message.

You can also show an error, warning or info message at the same time.

import { Field } from '@dnb/eufemia/extensions/forms'
render(
<Field.Composition error="Shared error at the bottom">
<Field.String />
<Field.String />
</Field.Composition>,
)

Accessibility

When using the error, warning or info property, the displayed FormStatus components will be placed in the DOM before the content of the form elements itself.

Furthermore, the status messages are linked to the corresponding form elements using aria-describedby when useFieldProps is used in conjunction.

This will allow screen readers to find and announce the error message properly.

Demos

Composition field

You may adjust the widths to your needs.

Info at the bottom
Code Editor
<Field.Composition info="Info at the bottom" width="large">
  <Field.String label="Field A with a long label" width="medium" />
  <Field.String label="Field B" width="stretch" />
</Field.Composition>

Composition with a label

A legend for the fieldset
Code Editor
<Field.Composition label="A legend for the fieldset" width="large">
  <Field.String label="Field label" width="stretch" />
  <Field.Number width="small" placeholder="0000" />
</Field.Composition>

Composition of multiple statuses

Label text
FieldBlock info
Code Editor
<Field.Composition label="Label text" info="FieldBlock info">
  <Field.String width="small" minLength={3} warning="Warning message" />
  <Field.Number minimum={10} info="Field info" />
</Field.Composition>

Composition field with error

Error at the bottom
Code Editor
<Field.Composition error={new Error('Error at the bottom')} width="large">
  <Field.String label="Field A" width="stretch" />
  <Field.String
    label="Field B with a long label that wraps"
    width="medium"
  />
</Field.Composition>

Alignment

Label text
Code Editor
<Field.Composition label="Label text" align="center">
  <Field.Number width="small" defaultValue={0} showStepControls />
  <Field.Boolean />
</Field.Composition>