Commencer
Bien démarrer
À la fin de cette page, vous aurez un formulaire construit visuellement, affiché dans votre framework et validé sur votre serveur — le tout depuis le même fichier. Cela demande une installation et une vingtaine de lignes de code.
Installation
Section intitulée « Installation »Choisissez le package correspondant à votre application. Les wrappers de framework embarquent les Web Components et le core transitivement.
npm install @streamline-pulse/formkrafter-reactbun add @streamline-pulse/formkrafter-reactpnpm add @streamline-pulse/formkrafter-reactyarn add @streamline-pulse/formkrafter-reactnpm install @streamline-pulse/formkrafter-vuebun add @streamline-pulse/formkrafter-vuepnpm add @streamline-pulse/formkrafter-vueyarn add @streamline-pulse/formkrafter-vuenpm install @streamline-pulse/formkrafter-wcbun add @streamline-pulse/formkrafter-wcpnpm add @streamline-pulse/formkrafter-wcyarn add @streamline-pulse/formkrafter-wcConstruire et afficher un formulaire
Section intitulée « Construire et afficher un formulaire »Le builder produit un spec ; le renderer le consomme. Brancher les deux ensemble, c’est toute l’intégration :
-
Montez le builder et conservez le spec qu’il émet. Chaque édition déclenche
specChangeavec le nouveau spec — plus les patches RFC 6902 qui l’ont produit, si vous voulez de l’undo/redo ou une piste d’audit. -
Passez ce spec au renderer. C’est du JSON pur : stockez-le, versionnez-le, récupérez-le plus tard.
-
Importez la feuille de style une fois. Elle est opt-in et pèse environ 6 Ko — ignorez-la et stylez vous-même les classes
.fk-*si vous préférez.
import { useState } from 'react'import { FkFormBuilder, FkFormRender } from '@streamline-pulse/formkrafter-react'import '@streamline-pulse/formkrafter-wc/styles.css'import type { BrickSpec } from '@streamline-pulse/formkrafter-core'
export function FormStudio() { const [spec, setSpec] = useState<BrickSpec>()
return ( <> <FkFormBuilder onSpecChange={(e) => setSpec(e.detail.spec)} />
{spec && ( <FkFormRender spec={spec} onFormSubmit={(e) => console.log(e.detail.data)} /> )} </> )}<script setup lang="ts">import { ref } from 'vue'import { FkFormBuilder, FkFormRender } from '@streamline-pulse/formkrafter-vue'import '@streamline-pulse/formkrafter-wc/styles.css'import type { BrickSpec } from '@streamline-pulse/formkrafter-core'
const spec = ref<BrickSpec>()
function onSubmit(data: Record<string, unknown>) { console.log(data)}</script>
<template> <FkFormBuilder @spec-change="spec = $event.detail.spec" />
<FkFormRender v-if="spec" :spec="spec" @form-submit="onSubmit($event.detail.data)" /></template><fk-form-builder></fk-form-builder><fk-form-render></fk-form-render>
<script type="module"> import '@streamline-pulse/formkrafter-wc/dist/formkrafter-wc/formkrafter-wc.esm.js' import '@streamline-pulse/formkrafter-wc/styles.css'
const builder = document.querySelector('fk-form-builder') const preview = document.querySelector('fk-form-render')
builder.addEventListener('specChange', (e) => { preview.spec = e.detail.spec })
preview.addEventListener('formSubmit', (e) => { console.log(e.detail.data) })</script>Valider côté serveur
Section intitulée « Valider côté serveur »Le verdict du navigateur est un confort pour vos utilisateurs ; le verdict du serveur est celui qui compte. Les deux viennent du même spec :
import { validateFormData } from '@streamline-pulse/formkrafter-core'import type { BrickSpec } from '@streamline-pulse/formkrafter-core'
export async function submit(spec: BrickSpec, payload: unknown) { const { valid, errors } = validateFormData(spec, payload, 'fr')
if (!valid) { // { fullName: 'Ce champ est obligatoire', 'contacts[0].email': 'Email invalide' } return { status: 422, errors } }
return { status: 200, data: payload }}Étapes suivantes
Section intitulée « Étapes suivantes »Un projet de Streamline Pulse