Components

RadioGroupRemoteInput

Gruppo di radio button con opzioni caricate da sorgente remota e filtri dinamici.

Panoramica

RadioGroupRemoteInput è un gruppo di radio button che carica le opzioni in modo asincrono tramite fetchFn. Ideale per selezioni singole quando le opzioni devono provenire da API o database e il numero di opzioni è limitato.

Caratteristiche principali:

  • Caricamento asincrono tramite fetchFn
  • Filtri dinamici su altri campi del form
  • Indicatore di caricamento durante il fetch
  • Layout verticale delle opzioni

Casi d'uso tipici: selezione metodo di pagamento, tipo documento, genere, stato civile, priorità.

Anteprima live (con fetchFn mockato)

Utilizzo nello schema

const schema = [{
  name: 'metodoPagamento',
  type: 'radioremote',
  label: 'Metodo di pagamento',
  props: {
    fetchFn: fetchMetodiPagamento,
    itemText: 'descrizione',
    itemValue: 'codice',
    name: 'metodoPagamento',
  }
}, {
  // Con filtro dinamico
  name: 'tipoSpedizione',
  type: 'radioremote',
  label: 'Tipo spedizione',
  props: {
    fetchFn: fetchTipiSpedizione,
    itemText: 'nome',
    itemValue: 'id',
    filterFields: ['idPaese'],
    name: 'tipoSpedizione',
    helperText: 'Le opzioni dipendono dal paese selezionato',
  }
}]

Utilizzo diretto

<RadioGroupRemoteInput
  v-model="metodoPagamentoSelezionato"
  :fetch-fn="fetchMetodiPagamento"
  item-text="descrizione"
  item-value="codice"
  name="metodoPagamento"
  label="Metodo di pagamento"
  helper-text="Seleziona come vuoi pagare"
/>

Con filtro dinamico

<RadioGroupRemoteInput
  v-model="tipoSpedizione"
  :fetch-fn="fetchTipiSpedizione"
  item-text="nome"
  item-value="id"
  :filter-fields="['idPaese']"
  :full-data="formData"
  name="tipoSpedizione"
  label="Tipo di spedizione"
/>

Props

PropTipoDefaultDescrizione
modelValueunknownValore selezionato (v-model)
labelstringEtichetta del gruppo
helperTextstringTesto di supporto sotto il campo
errorstringMessaggio di errore (attiva stato invalid)
disabledbooleanfalseDisabilita tutti i radio button
invalidbooleanfalseAttiva visivamente lo stato di errore
fetchFnFetchFnFunzione asincrona per caricare le opzioni
filterstring | FilterCriteriaFiltro statico passato alla fetchFn
filterFieldsstring[][]Campi del form da osservare per filtri dinamici
fullDataRecord<string, unknown>{}Dati completi del form (per filtri dinamici)
itemTextstring'label'Proprietà da usare come etichetta radio
itemValuestring'value'Proprietà da usare come valore radio
namestringAttributo name HTML per il gruppo radio

Metodi esposti

MetodoDescrizione
reload()Ricarica i dati chiamando nuovamente la fetchFn

Eventi

EventoPayloadDescrizione
update:modelValueunknownValore radio selezionato

Validazione suggerita

import { z } from 'zod'

const schema = z.object({
  metodoPagamento: z.string({
    required_error: 'Seleziona un metodo di pagamento'
  }).min(1, 'Seleziona un metodo di pagamento'),

  tipoSpedizione: z.number()
    .positive('Seleziona un tipo di spedizione')
    .nullable()
    .refine(v => v !== null, { message: 'Il tipo di spedizione è obbligatorio' }),
})