Forms

useSelectOptions

Composable interno per normalizzazione, grouping e filtering delle opzioni per Select e MultiSelect.

Composable interno — utilizzato dai componenti Select e MultiSelect della libreria.

Firma TypeScript

export function useSelectOptions(params: UseSelectOptionsParams): UseSelectOptionsResult

export interface UseSelectOptionsParams {
  options: () => unknown[] | null | undefined;
  optionLabel: () => string | ((option: Record<string, unknown>) => string) | null | undefined;
  optionValue: () => string | ((option: Record<string, unknown>) => OptionValue) | null | undefined;
  optionDisabled: () => string | ((option: Record<string, unknown>) => boolean) | null | undefined;
  optionGroupLabel?: () => string | ((option: Record<string, unknown>) => string) | null | undefined;
  optionGroupChildren?: () => string | ((option: Record<string, unknown>) => unknown[]) | null | undefined;
  filter: () => boolean;
  filterMatchMode: () => DropdownFilterMatchMode;
}

export interface UseSelectOptionsResult {
  filterValue: Ref<string>;
  hasGroups: ComputedRef<boolean>;
  normalizedOptions: ComputedRef<NormalizedOption[]>;
  filteredOptions: ComputedRef<NormalizedOption[]>;
  resetFilter: () => void;
}

Parametri

ParametroTipoDescrizione
options() => unknown[]Getter reattivo delle opzioni raw
optionLabelgetterProprieta o funzione per ottenere il testo visualizzato
optionValuegetterProprieta o funzione per ottenere il valore
optionDisabledgetterProprieta o funzione per lo stato disabilitato
optionGroupLabelgetter (opzionale)Label del gruppo per opzioni raggruppate
optionGroupChildrengetter (opzionale)Proprieta che contiene i children del gruppo
filter() => booleanSe il filtro e abilitato
filterMatchMode() => DropdownFilterMatchModeModalita filtro: startsWith, contains, endsWith

Valore di Ritorno

ProprietàTipoDescrizione
filterValueRef<string>Testo di ricerca corrente
hasGroupsComputedRef<boolean>True se le opzioni hanno gruppi
normalizedOptionsComputedRef<NormalizedOption[]>Opzioni normalizzate (flat, con group header intercalati)
filteredOptionsComputedRef<NormalizedOption[]>Opzioni filtrate in base a filterValue
resetFilter() => voidResetta il testo di ricerca

Esempio

const { filterValue, filteredOptions, resetFilter } = useSelectOptions({
  options: () => props.options,
  optionLabel: () => props.optionLabel,
  optionValue: () => props.optionValue,
  optionDisabled: () => props.optionDisabled,
  filter: () => props.filter,
  filterMatchMode: () => props.filterMatchMode,
})

// In template
<input v-model="filterValue" placeholder="Cerca..." />
<div v-for="opt in filteredOptions" :key="opt.value">{{ opt.label }}</div>

Note

  • La rilevazione dei gruppi avviene verificando se la prima opzione ha la proprieta optionGroupChildren (default: 'items').
  • Le opzioni di gruppo vengono espanse in una lista flat con header di gruppo (isGroupHeader: true, disabled: true) intercalati.
  • Il filtro opera sulle normalizedOptions (dopo il grouping) comparando il label in lowercase.
  • NormalizedOption ha forma { label, value, disabled, isGroupHeader, original }.