Guides
Formulaires imbriqués
Un bloc adresse, un contact d’urgence, un jeu d’informations d’entreprise —
certains fragments reviennent dans une dizaine de formulaires. Plutôt que de les
copier, une brick nested-form référence un autre formulaire. Elle est
résolue et inlinée au moment du rendu : tout ce qui vient ensuite — règles,
validation, récapitulatif — voit un spec ordinaire.
Référencer un formulaire
Section intitulée « Référencer un formulaire »La brick porte un specRef dans ses configs. Ce que la référence signifie
dépend entièrement du service qui la résout : une URL, un identifiant de base de
données, un slug.
{ "type": "panel", "id": "nested-form", "name": "Nested form", "configs": { "key": "address", "label": "Adresse de livraison", "specRef": "address-v2" }}Au moment du rendu, ce nœud est remplacé par les enfants du formulaire référencé, enveloppés dans un groupe étiqueté.
Brancher la source
Section intitulée « Brancher la source »Le FetchSpecSourceService par défaut traite la référence comme une URL et
supporte baseUrl, les en-têtes, les credentials et un cache par URL. Pour
résoudre les références depuis votre propre stockage, fournissez n’importe quoi
qui respecte l’interface :
-
Implémentez
fetchSpec, en retournant unBrickSpec.app-startup.ts import { services } from '@streamline-pulse/formkrafter-core'services.specSourceService = {fetchSpec: async (ref) => {const res = await fetch(`/api/forms/${ref}`)if (!res.ok) throw new Error(`Unknown form: ${ref}`)return res.json()},} -
Ou configurez celui fourni au lieu d’écrire le vôtre.
import { services, FetchSpecSourceService } from '@streamline-pulse/formkrafter-core'services.specSourceService = new FetchSpecSourceService({baseUrl: '/api/forms',credentials: 'include',}) -
Faites le rendu normalement.
<fk-form-render>développe automatiquement les formulaires imbriqués et affiche un état de chargement pendant la résolution.
Développer côté serveur
Section intitulée « Développer côté serveur »Votre backend doit valider l’arbre complet : développez donc avant de valider.
import { expandSpec, validateFormData } from '@streamline-pulse/formkrafter-core'
const full = await expandSpec(spec)const verdict = validateFormData(full, payload)hasNestedForms(spec) vous dit si le travail est nécessaire, ce qui vaut la
peine d’être vérifié avant de payer le coût du développement sur un chemin
chaud :
import { hasNestedForms } from '@streamline-pulse/formkrafter-core'
const full = hasNestedForms(spec) ? await expandSpec(spec) : specGarde-fous
Section intitulée « Garde-fous »Étapes suivantes
Section intitulée « Étapes suivantes »Un projet de Streamline Pulse