IoGatewayValidazioneForm

Da NoiOpen.
Vai alla navigazioneVai alla ricerca


Validazione Form Frontend

Per il lato frontend i campi della form saranno un JSON ( oppure JS Object ) simile a questo:

let data = {
   fiscal_code: {
     value: "",
     rules: "required|fiscalcode"
   },
   subject: {
     value: "",
     rules: "required|min:5|max:255"
   },
   markdown: {
     value: ""
   },
   amount: {
     value: "",
     rules: "required|numeric"
   },
   notice_number: {
     value: "",
     rules: "required|numeric|length:20"
   }
 };

Potremmo validare la form passando le rules per ogni field ad una funzione che ritorna true / false ed eventuali errori. Questa soluzione ci permette di riusare la funzione di validazione mantenendo uno standard per tutto il progetto frontend.

Per eventuali rules non presenti nella funzione, basterà implementare il controllo specifico ed aggiungerlo alle rules, senza ripetere il codice.

L'Interfaccia esposta dalla funzione di validazione dovrebbe essere qualcosa di simile a questo, in modo da permetterci di validare una form intera o semplicemente un field singolo al bisogno.

/**
* Validates each form's field against a set of rule
* The field object should contain a value and a rules key, false returne otherwise
* 
* @param { object } formData
* 
*/
const validateForm = ( formData ) => {
    throw notImplemented
}
/**
* Validate a single value against a set of rules
* A set of rules is a "|" separated values
* 
* @param  { string } value
* @param  { string } rules
*/
const validateField = ( value, rules ) => {
  throw notImplemented;
}

Nel dettaglio le regole di validazione dei dati sono le seguenti:

  • “fiscal_code”: “required|fiscalcode” - al momento può essere solo persona fisica quindi 16 caratteri ma mi piacerebbe capire se e come si potrà notificare una persona giuridica. Teniamone conto
  • “subject”: “required|min:5|max:255”
  • “markdown”: “string”,
  • “due_date”: “YYYY-MM-DDTHH:MM:SS SSS” è in formato date-time, da un po’ l’app permette di impostare la data in cui mettere un promemoria. Si accettano proposte per la verifica sulla form.
  • “amount”: “numeric” - è l’importo espresso in centesimi di euro
  • “invalid_after_due_date”: true/false default false
  • “notice_number”: “required|string|length:18” - questo è il Codice Avviso pagoPA che non è numerico nel senso che è comunque lungo 18 ma può avere solo digit e può iniziare per 0. La sintassi è complessa e dipende da troppi fattori quindi darei per scontato che formalmente sia corretto e controllerei solo la lunghezza e che abbia appunto solo digit.


Ci sono inoltre delle relazioni tra i campi:

  • amount, notice_number e invalid_after_due_date fanno parte dell’oggetto payment_data quindi se ne valorizzo uno diventano tutti obbligatori.
  • due_date viceversa è esterno a payment_data e non è obbligatorio (un pagamento può non aver scadenza)


Riferimenti:
- Riferimento alla discussione avvenuta sul forum: https://noiopen.discourse.group/t/validazione-form/747/18