Skip to content

DropdownField

DropdownField renders the renderer-independent Cratis Dropdown for choosing one value from a list.

import { CommandDialog } from '@cratis/components/CommandDialog';
import { DropdownField } from '@cratis/components/CommandForm';
const statusOptions = [
{ label: 'Active', value: 'active' },
{ label: 'Inactive', value: 'inactive' },
];
<CommandDialog command={MyCommand} visible={visible} onCancel={() => setVisible(false)}>
<DropdownField<MyCommand>
value={(c) => c.status}
options={statusOptions}
optionLabel='label'
optionValue='value'
placeholder='Select a status'
/>
</CommandDialog>;

With custom data:

const roles = [
{ id: 'admin', display: 'Administrator' },
{ id: 'user', display: 'Standard User' },
];
<DropdownField<MyCommand>
value={(c) => c.role}
options={roles}
optionLabel='display'
optionValue='id'
/>;
PropTypeDefaultDescription
value(instance: TCommand) => unknownRequired. Accessor function that returns the bound property from the command instance. Pass the command type as the generic parameter for full type safety.
optionsArray<{ [key: string]: unknown }>Required. Array of option objects.
optionLabelstringRequired. Key in each option object to use as the display label.
optionValuestringRequired. Key in each option object to use as the submitted value.
placeholderstringPlaceholder text shown when no value is selected.
classNamestringExtra CSS class combined with the default w-full.
ptDropdownPartsAttributes for the Cratis-owned Dropdown’s stable parts.
ptOptions / unstyledRetained temporarily for source compatibility; ignored.

DropdownField deliberately does not surface multiple, filter or showClear — use MultiSelectField for multi-select, or the Dropdown wrapper directly outside a command form.

  • Default value is an empty string.
  • The field spans full width within its container.
  • Validation state is reflected through aria-invalid and data-invalid.