Macchine a stati
Con l'aggiornamento di oggi, trovate la documentazione per le Macchine a stati, che permettono di gestire le transizioni e la business logic delle Entità da un punto centralizzato.
Oltre ai casi d'uso di base, viene presentata l'integrazione fra le macchine a stati e i Form, Yup e i Controller per gestire in modo integrato la modificabilità dei singoli campi e le fasi di lavorazione di un'entità. Gli esempi nascono da quello che stiamo vedendo nei progetti attivi attualmente: validazioni che cambiano in base allo stato dell'entità, come la pubblicazione di una domanda o la variazione di una fattura.
Nel pratico, sarà possibile definire una macchina a stati per esprimere la logica di un'azione, ovvero una condizione booleana
Per poi inserire nell'Entità il decoratore @SchemaAction()
per ogni proprietà che deve essere collegata a una specifica azione di modifica.
In questo modo, la modifica del campo accountingAmount sarà vincolata alla
macchina a stati.
Lato frontend, il collegamento avviene grazie al context del nuovo componente
<FormikAugmented>, che va a sostituire <Formik>: aggiungendo una proprietà al context di validazione di Yup, ovvero machineActions, i campi di Input saranno abilitati e/o disabilitati
proprio in base alle azioni disponibili per l'entità selezionata.
Potete trovare la documentazione completa dalla machina a stati, a partire dalla sua definizione fino al collegamento con i form e i controller, nella pagina della Macchina a stati 👍🏼
Dettagli di implementazione#
A livello tecnico questo legame è implementato con il nuovo metodo
di Yup needsAction, che viene aggiunto automaticamente dal Generatore dei DTO.
A questo punto viene utilizzato l'hook useFormikFieldValidation() all'interno del FormFieldItem per effettuare l'introspezione sullo schema e
conoscere l'azione richiesta, lo stato required, ecc. del campo.
Ricerca sulla documentazione#
Dato che mancava la ricerca sulla documentazione, è stata aggiunta (con Algolia) e ho rifinito alcune parti del sito che erano rimaste incomplete.
