An open API service indexing awesome lists of open source software.

https://github.com/ruicsh/use-combo-box

Headless combo box hook for React
https://github.com/ruicsh/use-combo-box

aria combobox headless react reacthooks

Last synced: 29 days ago
JSON representation

Headless combo box hook for React

Awesome Lists containing this project

README

          




Logo

use-combo-box


Headless combo-box hook for React







## Why

We tried `downshift` but it was too heavy for our needs.

- No dependencies
- Tiny footprint (1.12 kB)
- WAI-ARIA compliant, implements the [Combobox pattern](https://www.w3.org/WAI/ARIA/apg/patterns/combobox/)
- Keyboard navigation

## Install

```bash
$ npm install @tuplo/use-combo-box

# or with yarn
$ yarn add @tuplo/use-combo-box
```

## Usage

Minimal example

```jsx
import { useComboBox } from "@tuplo/use-combo-box";

function ComboBox() {
const {
getComboBoxProps,
getInputProps,
getItemProps,
getLabelProps,
getMenuProps,
getToggleButtonProps,
items,
} = useComboBox({
id: "my-combo-box",
onSelectedItemChange: (item) => console.log(item),
});

return (


Choose


Toggle


    {items.map((item, index) => (

  • {item.label}

  • ))}


);
}
```

## Options

```typescript
const comboBoxProps = useComboBox({
filterFn: async (keyword, items) =>
items.filter((item) => item.label.includes(keyword)),
id: "my-combo-box",
initialIsOpen: true,
items: [
{ id: "item-1", label: "Alice" },
{ id: "item-2", label: "Bob" },
],
itemToString: (item) => item.id,
label: "Team members",
onInputValueChange: (value) => console.log(value),
onSelectedItemChange: (item) => console.log(item),
placeholder: "Choose team member",
selectedValues: ["item-1", "item-2"]
});
```

### filterFn

> `(keyword: string, items: ItemType[]) => Promise` | optional

A custom function to be called when filtering the list of items according to the keyword typed in by the user.

### id

> `string` | required

Unique identifier for this widget. It's used to build IDs for all child elements.

### initialIsOpen

> `boolean` | optional

Sets the open state of the menu when the combo-box is initialized.

### itemToString

> `(item: ItemType) => string` | defaults to `JSON.stringify(item)`

If your items are stored as objects, this function is used to create unique IDs for each option.

### items

> `ItemType[]` | optional

List of initial items to show on menu. When empty, the list is populated by the return value of `filterFn`.

### label

> `string` | optional

Explicit value to be used on `aria-label`.

### onInputValueChange

> `(value: string) => void` | optional

Callback to be used when user changes the input value on the textbox.

### onSelectedItemChange

> `(item: ItemType) => void` | required

Callback to be used when user picks an item.

### placeholder

> `string` | optional

To be used as placeholder text on the textbox.

### selectedValue

> `string` | optional

The selected value. Makes it a single-selection combo-box.

### selectedValues

> `string[]` | optional

List of selected values. Makes it a multi-selection combo-box.

## License

MIT