AutoComplete
Um campo de seleção com busca, sugestões dinâmicas, criação de opções personalizadas e carregamento incremental.
Visão Geral
- Suporte a busca com filtro customizável.
- Criação de opções personalizadas com
canCreateeonCreate. - Scroll infinito com
onEndReached. - Suporte a modo headless ou com popover modal.
- Indica carregamento com
loadingepassiveLoading. - Possui versão com renderização externa de label com
renderOutsideeCaption.
Utilização
import { AutoComplete } from "@convertcompany/ui";
Exemplos
Com itens customizados
O AutoComplete permite renderizar opções de forma customizada. Para isso, utilize a prop renderItem e retorne o JSX desejado.
Com trigger customizado
Você pode personalizar o gatilho do AutoComplete utilizando a prop children. Isso permite que você use qualquer componente como gatilho, mantendo a funcionalidade do AutoComplete.
Com criação de opção
O AutoComplete permite criar novas opções com base na busca. Para isso, utilize a prop canCreate e onCreate. O texto exibido ao criar uma nova opção pode ser customizado com a prop createItemText, onde {search} será substituído pelo termo buscado. Além disso é possível customizar o ícone ao lado do texto de criação de item com a prop createItemIcon.
Com scroll infinito
O AutoComplete permite carregar opções de forma assíncrona com scroll infinito. Para isso, utilize a prop onEndReached para carregar mais opções quando o usuário chegar ao final da lista. Você pode usar a prop loading para indicar que as opções estão sendo carregadas.
Com filtro customizado
Você pode personalizar o filtro de opções utilizando a prop filterBy. Essa função recebe o valor da opção, o termo buscado e as palavras-chave. O retorno deve ser um número que indica a relevância da opção (quanto maior, mais relevante). Você também pode usar a prop canFilter para habilitar o campo de busca dentro do menu.
Com carregamento
Além de adicionar um feedback de loading, a prop passiveLoading pode ser utilizado para impedir que o usuário interaja com as opções enquanto o carregamento está ativo. Caso contrário, o usuário pode ver as opções enquanto o carregamento está ativo. Você também pode usar a prop loadingStateText para exibir um texto personalizado durante o carregamento.
Props
| Propriedade | Tipo |
|---|---|
| optionsLista de opções disponíveis para seleção. Cada opção deve conter value e label. | Option[] |
| valueValor selecionado atualmente. | string null |
| onChangeCallback acionado ao alterar o valor selecionado. | (value: string | null) => void |
| placeholderTexto exibido quando nenhuma opção está selecionada. | string |
| canClearPermite limpar a seleção. Padrão é true. | boolean |
| canCreatePermite criar uma nova opção com base na busca. | boolean |
| createItemTextTexto exibido ao criar nova opção. Use {search} para o termo buscado. | string |
| createItemIconÍcone exibido ao lado do texto de criação de item. | ReactNode |
| onCreateCallback acionado ao criar nova opção. | (value: string) => void |
| canFilterHabilita o campo de busca dentro do menu. | boolean |
| filterByFunção customizada de filtro. Se retornar false, o filtro será desabilitado. | (value: string, search: string, keywords?: string[]) => number | false |
| onSearchCallback acionado a cada alteração no campo de busca. | (value: string) => void |
| loopPermite loop ao navegar com teclado. | boolean |
| renderItemPermite renderização customizada das opções. | (option: Option) => ReactNode |
| renderOutsideRenderiza o valor fora do campo de entrada. | boolean |
| classNameClasse CSS adicional. | string |
| modalPopoverAtiva modo modal do popover (Radix). | boolean |
| emptyStateTextTexto exibido quando não há resultados. | string |
| loadingIndica estado de carregamento. | boolean |
| passiveLoadingMostra o carregamento mesmo com resultados visíveis. | boolean |
| loadingStateTextTexto exibido durante carregamento. | string |
| renderValueRenderização customizada do valor. | (value: string) => ReactNode |
| onEndReachedCallback acionado ao chegar no final da lista (scroll infinito). | () => void |
| childrenTrigger customizado para o AutoComplete. | ReactNode |