Skip to content

Combobox

A single input field that combines the functionality of a select and input.

import { useState } from 'react';
import {
Combobox,
useFilter,
useListCollection,
} from '@fintech-sandpit/ui/react';
const filters = useFilter({
sensitivity: 'base',
});
const {
collection,
filter,
} = useListCollection({
items: [
{ label: 'Dog', value: 'dog', description: 'Loyal companion', group: 'Mammals' },
{ label: 'Cat', value: 'cat', description: 'Independent and curious', group: 'Mammals' },
{ label: 'Canary', value: 'canary', description: 'Known for its song', group: 'Birds' },
{ label: 'Parrot', value: 'parrot', description: 'Can mimic speech', group: 'Birds' },
{ label: 'Goldfish', value: 'goldfish', description: 'Beautiful and rare', group: 'Aquatic' },
{ label: 'Turtle', value: 'turtle', description: 'Longevity and wisdom', group: 'Aquatic', disabled: true },
],
filter: filters.contains,
groupBy: item => item.group ?? '',
});
const [value, setValue] = useState<string[]>(['dog']);
return (
<Combobox
value={value}
defaultValue={['cat']}
collection={collection}
size="md"
multiple
clearable
invalid={false}
readOnly={false}
disabled={false}
placeholder="Select a pet, e.g. cat"
itemText={(item) => (
<div className="flex flex-col gap-1">
<span>{item.label}</span>
<span className="text-sm text-gray-500">{item.description}</span>
</div>
)}
onInputValueChange={({ inputValue }) => filter(inputValue)}
onValueChange={({ value }) => setValue(value)}
/>
);
NameTypeDefaultDescription
valuestring[]Controlled value of the combobox
defaultValuestring[]Default (uncontrolled) value of the combobox
collectionCollectionOptions of the combobox
sizeSizemdSize of the combobox
multiplebooleanfalseWhether the combobox is multiple
clearablebooleanfalseWhether the combobox is clearable (a ‘x’ icon is shown)
invalidbooleanfalseWhether the combobox is invalid
readOnlybooleanfalseWhether the combobox is read only
disabledbooleanfalseWhether the combobox is disabled
placeholderstringPlaceholder of the combobox
NameTypeDescription
onValueChange(value: string[]) => voidCallback fired when the value changes
onInputValueChange(details: ChangeDetails) => voidCallback fired when the combobox input value changes
Prop namePropsDescription
ItemText{ item: ListCollectionItem; }Component for the custom item text
type Collection = ListCollection<ListCollectionItem>
type ListCollectionItem = {
label: string;
value: string;
disabled?: boolean;
group?: string;
}
type ChangeDetails = {
inputValue: string;
reason?: 'input-change' | 'item-select' | 'clear-trigger' | 'script' | 'interact-outside';
}
type Size = 'xs' | 'sm' | 'md' | 'lg' | 'xl'