Components

AutoCompleteRemote

Autocomplete che cerca sul server mentre si digita, per elenchi troppo lunghi da scaricare interi.

Panoramica

Gli altri componenti remote scaricano l'elenco una volta e poi filtrano in locale: va bene per decine o centinaia di righe. Con migliaia di clienti o utenti serve l'opposto. AutoCompleteRemote cerca sul server a ogni digitazione e porta a casa solo i risultati.

  • Il testo digitato arriva alla fetchFn sotto la chiave searchKey (default ricerca). Con endpoint serve searchColumn, che diventa un ilike su quella colonna.
  • minLength (default 2) e delay (default 300 ms) evitano una richiesta per ogni tasto. Al montaggio non parte nessuna richiesta: senza testo non c'è niente da cercare.
  • multiple per sceglierne più d'uno, exclude per togliere dai suggerimenti i valori già scelti altrove.
  • Le opzioni scelte restano fra i suggerimenti, così dopo una nuova ricerca il campo continua a mostrare il nome e non l'identificativo.
  • In modifica, initialOptions porta le opzioni già note dei valori caricati da fuori: senza, il campo mostrerebbe l'identificativo finché l'utente non cerca.

Nello schema è il tipo autocompleteremote (dalla 2.16.0; initialOptions dalla 2.16.1).

Anteprima live (con fetchFn mockato)

La fetchFn filtra un array locale come farebbe il server con il testo ricevuto in filtri.ricerca.

Utilizzo diretto

VueFormPlugin registra AutoCompleteRemote dalla 2.18.4; con le versioni precedenti va importato esplicitamente, come nell'esempio.

<script setup lang="ts">
import { ref } from 'vue'
import { AutoCompleteRemote } from '@pzeta/vue-form'

const idutente = ref<number | null>(null)
</script>

<template>
  <AutoCompleteRemote
    v-model="idutente"
    :fetch-fn="(filtri) => servizio.utenti(String(filtri?.ricerca ?? ''))"
    option-label="nomecompleto"
    option-value="idutente"
    label="Agente"
  />
</template>

Con endpoint

<AutoCompleteRemote
  v-model="idcliente"
  endpoint="anagrafica.clienti"
  select="idcliente,ragionesociale"
  search-column="ragionesociale"
  option-label="ragionesociale"
  option-value="idcliente"
/>

Senza searchColumn, con endpoint la ricerca non può essere fatta lato server. Vedi Sorgente dati endpoint.

In modifica: initialOptions

Il valore arriva dal record caricato, ma il componente non ha mai visto l'opzione corrispondente. Passandola, il campo mostra subito il nome:

<AutoCompleteRemote
  v-model="ordine.idcliente"
  :initial-options="[{ idcliente: ordine.idcliente, ragionesociale: ordine.cliente }]"
  :fetch-fn="cercaClienti"
  option-label="ragionesociale"
  option-value="idcliente"
/>

Props

PropTipoDefaultDescrizione
modelValueunknown—Valore scelto; con multiple un array
fetchFn(filtri) => Promise<unknown[]>—Ricerca: riceve i filtri, testo digitato compreso
endpointstring—Alternativa a fetchFn: [schema.]risorsa PostgREST
searchKeystring'ricerca'Chiave con cui il testo arriva alla fetchFn
searchColumnstring—Colonna su cui cercare con ilike quando i dati arrivano da endpoint
filterstring | FilterCriteria—Filtro statico, unito a quello di ricerca
filterFieldsRemoteFilterField[]—Campi del form osservati per filtri dinamici
fullDataRecord<string, unknown>—Dati del form per i filtri dinamici
optionLabelstring—Proprietà dell'etichetta
optionTemplatestring—Template dell'etichetta, es. '{nome} ({email})'
optionValuestring—Proprietà del valore; senza, il modello tiene l'oggetto intero
multiplebooleanfalseSelezione multipla
excludeArray<string | number>—Valori da togliere dai suggerimenti
initialOptionsunknown[]—Opzioni già note dei valori iniziali (dalla 2.16.1)
minLengthnumber2Caratteri minimi prima di interrogare il server
delaynumber300Attesa prima della richiesta, in ms
placeholderstring—Placeholder
showClearboolean—Pulsante di cancellazione
dropdownboolean—Pulsante che apre l'elenco senza digitare

Eventi

EventoPayloadDescrizione
update:modelValueunknownValore scelto

Differenza con autocomplete e SelectRemote

CasoComponente
Poche decine/centinaia di opzioni, filtrate in localeSelectRemote
Suggerimenti calcolati dal chiamante, con un proprio listener completeautocomplete con field.listeners
Migliaia di righe, ricerca sul server mentre si digitaAutoCompleteRemote