Plugin d'entrée multi-étapes

Introduction

FormKit est livré avec un plugin d'entrée multi-étapes de première partie disponible dans le package @formkit/addons. Cette entrée vous permet de construire un assistant ou de diviser facilement vos formulaires en plusieurs étapes. Diviser les formulaires en plusieurs étapes peut améliorer l'expérience utilisateur des formulaires plus importants en les rendant petits et accessibles par rapport à la liste de toutes les entrées en une fois.

Aperçu du composant multi-étapes

2 mins

Installation

Pour utiliser ce plugin avec FormKit, installez @formkit/addons :

yarn add @formkit/addons

Une fois que vous avez installé le package addons, vous devrez enregistrer le plugin avec FormKit et inclure les styles CSS de support :

// formkit.config.js
import { defaultConfig } from '@formkit/vue'
import { createMultiStepPlugin } from '@formkit/addons'
import '@formkit/addons/css/multistep'

const config = defaultConfig({
  plugins: [createMultiStepPlugin()],
})

export default config

Une démonstration rapide du type d'entrée multi-step en action :

Charger l'exemple en direct

Utilisation

La fonction createMultiStepPlugin enregistre deux nouveaux types d'entrée pour que vous puissiez les utiliser avec le composant FormKit.

  • multi-step : Le groupe englobant pour l'entrée multi-étapes entière. Cette entrée suit quelle étape est active, la validation et les erreurs par étape, et ne doit contenir que des entrées step comme enfants immédiats.
  • step : Le groupe englobant pour une étape donnée dans votre entrée multi-étapes. Ne doit être qu'un enfant immédiat d'une entrée multi-step. Ses enfants seront rendus comme le contenu de l'étape.

Utiliser ces entrées ensemble est aussi simple que d'englober tout balisage que vous souhaitez avoir présent dans une étape d'un formulaire multi-étapes.

<FormKit type="multi-step">
  <FormKit type="step" name="stepOne">
    <!-- le contenu pour stepOne va ici ! -->
  </FormKit>
</FormKit>

Dès le départ, l'entrée parent multi-step suivra la validité des entrées contenues dans chaque entrée enfant step et empêchera de passer à l'étape suivante step jusqu'à ce que l'étape actuelle soit valide. Le nombre total de validations bloquantes et d'erreurs sera affiché à côté du nom de l'étape actuelle si un utilisateur tente de passer à l'étape suivante ou de soumettre le formulaire avant de satisfaire aux validations d'entrée de l'étape actuelle.

Style des onglets

L'entrée multi-step est livrée avec deux styles d'onglets disponibles.

  • tab : L'expérience par défaut des onglets. Le nom de chaque étape est affiché dans un onglet avec un état actif. Le nombre d'erreurs est affiché en haut à droite de l'onglet.
  • progress : Un style de barre de progression où chaque étape est un "nœud" sur une chronologie des étapes totales. Avec ce mode d'affichage, vous pouvez également utiliser la propriété hide-progress-labels pour masquer les noms des étapes.
Charger l'exemple en direct

Étiquettes des étapes

Par défaut, l'entrée multi-step utilisera l'attribut name de ses entrées step enfants pour générer des étiquettes pour les étapes. Si vous souhaitez avoir plus de contrôle sur l'affichage de vos noms d'étapes, vous pouvez utiliser la propriété label. Vous pouvez également personnaliser les étiquettes qui apparaissent dans la section stepActions de votre step en utilisant les propriétés previous-label et next-label.

  • label : Une substitution pour le nom de l'étape qui doit apparaître dans les onglets multi-étapes.
  • previous-label : une substitution pour l'étiquette du bouton stepPrevious qui par défaut est Back.
  • next-label : une substitution pour l'étiquette du bouton stepNext qui par défaut est Next.
Charger l'exemple en direct

Autoriser les étapes incomplètes

Par défaut, l'entrée multi-step permettra de passer aux étapes suivantes même si l'étape actuelle ou une étape entre l'étape actuelle et l'étape cible a des messages de validation bloquants. Pour empêcher un utilisateur de sauter en avant, définissez la propriété allow-incomplete sur false.

Charger l'exemple en direct

Icône d'étape valide

Lorsqu'une étape a été complétée sans erreurs de validation, l'entrée multi-step affichera — par défaut — une icône de vérification indiquant que l'étape est valide et qu'aucune autre action n'est requise. L'valid-step-icon est une Icône FormKit et peut être changée via une propriété comme toute autre icône FormKit.

Vous pouvez soit :

  • Changer l'valid-step-icon sur l'entrée multi-step pour changer l'icône pour toutes les étapes à l'intérieur de l'entrée.
  • Changer l'valid-step-icon sur une entrée step pour changer ou remplacer l'icône juste pour cette étape.
Charger l'exemple en direct

Personnalisation des actions d'étape

Chaque step dans une entrée multi-step a des boutons par défaut rendus pour se déplacer entre les étapes. Par défaut, le premier step dans un multi-step n'aura qu'un bouton d'action stepNext rendu, et le dernier step n'aura qu'un bouton d'action stepPrevious. Cela permet à un multi-step d'agir comme un groupe autonome dans le contexte d'un formulaire plus large.

Si vous souhaitez ajouter une action personnalisée telle qu'une soumission de formulaire à un multi-step — utile si vous utilisez le multi-step comme votre formulaire entier — vous pouvez le faire en remplaçant l'emplacement stepNext sur l'étape souhaitée. Dans ce cas, nous ajouterons une entrée submit à la dernière étape de notre entrée multi-step pour soumettre le formulaire.

Les sections stepNext et stepPrevious ont accès au gestionnaire incrementStep — qui retourne une fonction appelable — pour activer la navigation programmatique.

Navigation par onglets

Par défaut, le stepNext dans une entrée multi-step utilise des écouteurs d'événements pour capturer la navigation par onglets via le clavier et permettre aux utilisateurs de parcourir toutes les étapes disponibles au sein d'un multi-step.

Si vous souhaitez préserver ce comportement dans votre propre implémentation de stepNext, assurez-vous d'ajouter un attribut data-next="true" à votre élément focusable qui déclenche la navigation d'étape.

Charger l'exemple en direct

L'événement beforeStepChange

Parfois, vous avez besoin de faire quelque chose avec vos données de formulaire entre les étapes. Peut-être que vous souhaitez soumettre chaque étape indépendamment à votre back-end ou que vous avez besoin de consigner des événements analytiques pour déterminer jusqu'où les utilisateurs avancent dans votre formulaire. Dans des cas comme ceux-ci, vous pouvez utiliser l'événement beforeStepChange. beforeStepChange accepte une fonction et fournit un objet contexte avec les clés suivantes :

  • currentStep : L'objet contexte du nœud d'étape actuellement actif dont l'utilisateur s'éloigne.
  • targetStep : L'objet contexte du nœud d'étape vers lequel l'utilisateur se dirige.
  • delta : La distance entre les étapes. Les entiers positifs représentent l'avancement, les entiers négatifs représentent le recul.

Votre fonction beforeStepChange doit retourner un Boolean. Retourner false empêchera le changement d'étape de se produire.

beforeStepChange peut être utilisé sur votre entrée multi-step auquel cas il s'appliquera à toutes les étapes. De plus, vous pouvez utiliser beforeStepChange sur une entrée step spécifique pour exécuter votre fonction uniquement lors de la navigation à partir de l'étape qui a la fonction assignée. beforeStepChange appliqué à un step remplacera tout beforeStepChange défini sur un multi-step parent s'il en existe un.

Charger l'exemple en direct

Le nœud multi-étapes est équipé de fonctions d'assistance pratiques conçues pour faciliter la navigation programmatique entre n'importe laquelle de ses étapes. Ces fonctions comprennent :

  • next : Elle permet de passer à l'étape suivante à partir de l'étape actuellement sélectionnée.
  • previous : Elle permet de revenir à l'étape précédente à partir de l'étape actuellement sélectionnée.
  • goTo : Elle accepte un argument étape pour se déplacer vers cette étape à partir de l'étape actuellement sélectionnée, elle accepte l'index ou le nom de l'étape.
Charger l'exemple en direct

Props & Attributs (multi-step)

PropTypePar défautDescription
allowIncompletebooleantrueLorsque true, permet aux utilisateurs de naviguer entre les étapes même si l'étape actuelle est invalide.
tabStylestringtabUtilisé pour définir un attribut de données pour créer des styles d'onglets. Le thème par défaut est livré avec le support des styles d'onglets tab et progress.
hideProgressLabelsbooleanfalseLorsque vrai, cache les étiquettes pour le style d'onglet progress.
validStepIconstringcheckSpécifie une icône à placer dans la section badge lorsqu'une étape est valide. Lorsqu'appliquée au multi-step, l'icône sera appliquée à toutes les entrées step enfants.
beforeStepChangefunctionundefinedUne fonction à exécuter avant que l'étape active ne soit changée. La fonction est fournie avec un objet contexte contenant currentStep et targetStep qui sont tous deux des objets de contexte de nœud FormKit. De plus, delta est fourni comme un entier qui reflète la distance entre currentStep et targetStep. Lorsqu'elle est fournie au multi-step, cette fonction se déclenchera à chaque changement d'étape.
Afficher Universel props
configObject{}Options de configuration à fournir au nœud d'entrée et à tout nœud descendant de cette entrée.
delayNumber20Nombre de millisecondes à attendre avant que la valeur d'une entrée ne soit déclenchée avant que le commit hook ne soit déclenché.
dirtyBehaviorstringtouchedDétermine comment le drapeau "dirty" de cette entrée est défini. Peut être défini sur touched ou comparetouched (par défaut) est plus performant, mais ne détectera pas lorsque le formulaire correspond à nouveau à son état initial.
errorsArray[]Tableau de chaînes à afficher comme messages d'erreur sur ce champ.
helpString''Texte pour le texte d'aide associé à l'entrée.
idStringinput_{n}L'identifiant unique de l'entrée. Fournir un identifiant permet également d'accéder globalement au nœud de l'entrée.
ignoreBooleanfalseEmpêche une entrée d'être incluse dans un parent (groupe, liste, formulaire, etc). Utile lors de l'utilisation d'entrées pour l'interface utilisateur au lieu de valeurs réelles.
indexNumberundefinedPermet d'insérer une entrée à l'index donné si le parent est une liste. Si la valeur de l'entrée est indéfinie, elle hérite de la valeur de cette position d'index. Si elle a une valeur, elle l'insère dans les valeurs de la liste à l'index donné.
labelString''Texte pour l'élément label associé à l'entrée.
nameStringinput_{n}Le nom de l'entrée tel qu'identifié dans l'objet de données. Cela doit être unique au sein d'un groupe de champs.
parentFormKitNodecontextualPar défaut, le parent est un groupe d'enrobage, une liste ou un formulaire — mais cette propriété permet une affectation explicite du nœud parent.
prefix-iconString''Spécifie une icône à placer dans la section prefixIcon.
preservebooleanfalseConserve la valeur de l'entrée sur un groupe parent, une liste ou un formulaire lorsque l'entrée est démontée.
preserve-errorsbooleanfalsePar défaut, les erreurs définies sur les entrées à l'aide de setErrors sont automatiquement effacées lors de l'entrée, en définissant cette propriété sur true, l'erreur est maintenue jusqu'à ce qu'elle soit explicitement effacée.
sections-schemaObject{}Un objet de clés de section et de valeurs partielles de schéma, où chaque partie de schéma est appliquée à la section respective.
suffix-iconString''Spécifie une icône à placer dans la section suffixIcon.
typeStringtextLe type d'entrée à afficher à partir de la bibliothèque.
validationString, Array[]Les règles de validation à appliquer à l'entrée.
validation-visibilityStringblurDétermine quand afficher les règles de validation en échec d'une entrée. Les valeurs valides sont blur, dirty et live.
validation-labelString{label prop}Détermine quelle étiquette utiliser dans les messages d'erreur de validation, par défaut, elle utilise la propriété label si elle est disponible, sinon elle utilise la propriété name.
validation-rulesObject{}Règles de validation personnalisées supplémentaires à rendre disponibles pour la propriété de validation.
valueAnyundefinedInitialise la valeur initiale d'une entrée et/ou de ses enfants. Non réactif. Peut initialiser des groupes entiers (formulaires) et des listes..

Props & Attributs (step)

PropTypePar défautDescription
labelstringUtilisé pour changer l'étiquette de l'onglet de l'étape. Si aucune étiquette personnalisée n'est fournie, le nom de l'étape sera utilisé.
previousLabelstringPrécédentUtilisé pour changer l'étiquette du bouton previousAction par défaut.
nextLabelstringSuivantUtilisé pour changer l'étiquette du bouton nextAction par défaut.
previousAttrsobject[object Object]Utilisé pour appliquer des attributs au bouton d'action previousAction par défaut.
nextAttrsobject[object Object]Utilisé pour appliquer des attributs au bouton d'action nextAction par défaut.
validStepIconstringcheckSpécifie une icône à placer dans la section badge lorsque l'étape est valide. Lorsqu'appliquée à une étape, l'icône ne sera appliquée qu'à l'étape ciblée.
beforeStepChangefunctionundefinedUne fonction à exécuter avant que l'étape active ne soit changée. La fonction est fournie avec un objet contexte contenant currentStep et targetStep qui sont tous deux des objets de contexte de nœud FormKit. De plus, delta est fourni comme un entier qui reflète la distance entre currentStep et targetStep. Lorsqu'elle est fournie à une étape, cette fonction se déclenchera uniquement lors de la navigation à partir de l'étape spécifiée.
Afficher Universel props
configObject{}Options de configuration à fournir au nœud d'entrée et à tout nœud descendant de cette entrée.
delayNumber20Nombre de millisecondes à attendre avant que la valeur d'une entrée ne soit déclenchée avant que le commit hook ne soit déclenché.
dirtyBehaviorstringtouchedDétermine comment le drapeau "dirty" de cette entrée est défini. Peut être défini sur touched ou comparetouched (par défaut) est plus performant, mais ne détectera pas lorsque le formulaire correspond à nouveau à son état initial.
errorsArray[]Tableau de chaînes à afficher comme messages d'erreur sur ce champ.
helpString''Texte pour le texte d'aide associé à l'entrée.
idStringinput_{n}L'identifiant unique de l'entrée. Fournir un identifiant permet également d'accéder globalement au nœud de l'entrée.
ignoreBooleanfalseEmpêche une entrée d'être incluse dans un parent (groupe, liste, formulaire, etc). Utile lors de l'utilisation d'entrées pour l'interface utilisateur au lieu de valeurs réelles.
indexNumberundefinedPermet d'insérer une entrée à l'index donné si le parent est une liste. Si la valeur de l'entrée est indéfinie, elle hérite de la valeur de cette position d'index. Si elle a une valeur, elle l'insère dans les valeurs de la liste à l'index donné.
labelString''Texte pour l'élément label associé à l'entrée.
nameStringinput_{n}Le nom de l'entrée tel qu'identifié dans l'objet de données. Cela doit être unique au sein d'un groupe de champs.
parentFormKitNodecontextualPar défaut, le parent est un groupe d'enrobage, une liste ou un formulaire — mais cette propriété permet une affectation explicite du nœud parent.
prefix-iconString''Spécifie une icône à placer dans la section prefixIcon.
preservebooleanfalseConserve la valeur de l'entrée sur un groupe parent, une liste ou un formulaire lorsque l'entrée est démontée.
preserve-errorsbooleanfalsePar défaut, les erreurs définies sur les entrées à l'aide de setErrors sont automatiquement effacées lors de l'entrée, en définissant cette propriété sur true, l'erreur est maintenue jusqu'à ce qu'elle soit explicitement effacée.
sections-schemaObject{}Un objet de clés de section et de valeurs partielles de schéma, où chaque partie de schéma est appliquée à la section respective.
suffix-iconString''Spécifie une icône à placer dans la section suffixIcon.
typeStringtextLe type d'entrée à afficher à partir de la bibliothèque.
validationString, Array[]Les règles de validation à appliquer à l'entrée.
validation-visibilityStringblurDétermine quand afficher les règles de validation en échec d'une entrée. Les valeurs valides sont blur, dirty et live.
validation-labelString{label prop}Détermine quelle étiquette utiliser dans les messages d'erreur de validation, par défaut, elle utilise la propriété label si elle est disponible, sinon elle utilise la propriété name.
validation-rulesObject{}Règles de validation personnalisées supplémentaires à rendre disponibles pour la propriété de validation.
valueAnyundefinedInitialise la valeur initiale d'une entrée et/ou de ses enfants. Non réactif. Peut initialiser des groupes entiers (formulaires) et des listes..

Sections

Nom de l'étape
⚠️
... Contenu de l'étape ...
Retour
Suivant
Section-keyDescription
tabsUn conteneur autour de tous les onglets.
tabUn élément bouton qui contient le nom de l'onglet et le décorateur pour refléter l'état de validation.
tabLabelUn élément span qui contient le nom de l'onglet.
badgeUn élément span utilisé comme décorateur pour montrer l'état de validité de l'onglet actuel.
stepsUn conteneur autour de toutes les étapes.
stepUn conteneur autour du contenu de l'étape du slot par défaut et des boutons d'action de l'étape. Chaque étape a un style de visibilité automatiquement appliqué en fonction de si c'est l'étape active actuelle.
stepInnerUn conteneur autour du contenu du slot par défaut pour une étape.
stepActionsUn conteneur autour des boutons d'action pour se déplacer entre les étapes.
stepPreviousUn conteneur autour du bouton d'action pour naviguer à l'étape précédente.
stepNextUn conteneur autour du bouton d'action pour naviguer à l'étape suivante.
Afficher Universel section keys
outerL'élément d'enrobage le plus externe.
wrapperUn enrobage autour de l'étiquette et de l'entrée.
labelL'étiquette de l'entrée.
prefixN'a pas de sortie par défaut, mais permet du contenu directement avant un élément d'entrée.
prefixIconUn élément pour afficher une icône avant la section de préfixe.
innerUn enrobage autour de l'élément d'entrée réel.
suffixN'a pas de sortie par défaut, mais permet du contenu directement après un élément d'entrée.
suffixIconUn élément pour afficher une icône après la section de suffixe.
inputL'élément d'entrée lui-même.
helpL'élément contenant le texte d'aide.
messagesUn enrobage autour de tous les messages.
messageL'élément (ou plusieurs éléments) contenant un message — le plus souvent des messages de validation et d'erreur.