Autocompletar la entrada del usuario con una lista de opciones
Se ha añadido Autocomplete input como una versión extendida con features adicionales como selección múltiple, renderizado personalizado de opciones, debounce automatico en evento de busqueda, etc.
⚠️ Importante: Cuando trabajas con opciones de objeto, SIEMPRE debes proporcionar la prop getOptionLabel. Esta función le indica al componente qué propiedad del objeto mostrar como texto en el input y también se utiliza para realizar el filtrado de coincidencias mientras el usuario escribe.
¿Por qué es necesario getOptionLabel?
¿Qué hace getOptionLabel?
nameLas opciones de string son la forma más simple de usar el componente. No requieren configuración adicional:
const stringOptions = [
"React",
"Vue.js",
"Angular",
"Svelte",
"Next.js",
"Nuxt",
"Astro",
"SolidJS",
"Qwik",
"Tailwind CSS",
];⚠️ Requiere getOptionLabel: Cuando usas objetos, debes especificar qué propiedad contiene el texto a mostrar y filtrar.
interface User {
name: string;
email: string;
avatar?: string;
role?: string;
}
const objectOptions: User[] = [
{ name: "Alex Torres", email: "alex.torres@example.com", role: "Developer" },
{ name: "María García", email: "maria.garcia@example.com", role: "Designer" },
{ name: "Luis Fernández", email: "luis.fernandez@example.com", role: "Manager" },
];
// Uso obligatorio con getOptionLabel
<AutocompleteSearch
options={objectOptions}
getOptionLabel={(user) => user.name} // ← Especifica qué propiedad usar
// ... otras props
/>;💡 Consejo: renderOption te permite personalizar completamente cómo se ve cada opción en la lista desplegable. Puedes mostrar información adicional accediendo a cualquier propiedad del objeto, mientras que getOptionLabel se encarga del filtrado y del texto que aparece en el input.
💡 Consejo: Para APIs externas, usa enableFilter={false} para deshabilitar el filtrado interno y manejar la búsqueda manualmente.
¿Por qué enableFilter={false}?
💡 Consejo: La prop filter te permite crear lógicas de búsqueda avanzadas que van más allá del filtrado simple por texto.
Ajusta la altura maxima del popover de opciones mandando el slot de clase areaViewport en la propiedad classNames
| Prop | Tipo | Requerido | Descripción |
|---|---|---|---|
placeholder | string | - | Placeholder del input |
options | string[] | Record<string, any>[] | ✅ | Lista de opciones a mostrar |
size | small | medium | large | - | Tamaño del input |
disabled | boolean | - | Indica si el input debe deshabilitarse |
error | boolean | - | Indica si el input debe tener estado de error |
| loading` | boolean | - | Indica si el input debe tener estado de carga |
enableFilter | boolean | - | Indica si el input debe tener filtro de coincidencias |
value | string | - | Valor del input controlado |
onValueChange | (value: string) => void | - | Callback que es ejecutado cuando el valor del input cambia |
onSelect | (option: string | Record<string, any>) => void | - | Callback que es ejecutado cuando es seleccionada una opcion |
getOptionlabel | (option: Record<string, any>) => string | - | Una funcion que debe retornar una cadena para mostrarlo como texto en el input cuando es seleccionada una opcion. Usalo solo cuando mandes como opciones una lista de objetos |