Composant OnboardingView pour les applications Stripe AppsVersion bêta publique
Utilisez OnboardingView pour implémenter un flux d’inscription de votre application Stripe
Pour ajouter le composant OnboardingView à votre application :
import {OnboardingView} from '@stripe/ui-extension-sdk/ui';
Le composant OnboardingView fournit un moyen standardisé d’implémenter une vue d’inscription avec une structure prédéfinie :
- Barre latérale gauche qui affiche une liste des tâches d’inscription
- Zone de contenu principal qui affiche le contenu d’une étape d’inscription donnée
La liste des tâches d’inscription est spécifiée sous la forme d’un tableau d’éléments TaskListItemProps. Vous pouvez entièrement personnaliser le contenu de l’étape d’inscription en spécifiant une vue React personnalisée comme enfant direct de <OnboardingView>. Cette méthode vous permet de mettre en œuvre une étape d’inscription personnalisée en fonction des besoins de votre entreprise, tandis que le Dashboard Stripe contrôle l’affichage de la liste des tâches d’inscription.
Propriétés OnboardingView
| Propriété | Type |
|---|---|
| Obligatoire
Composant React qui affiche le contenu de la colonne principale. |
| Obligatoire
Lorsque cette option est définie sur vrai, la fenêtre modale d’intégration se fermera automatiquement après un bref délai pour ramener l’utilisateur à son emplacement précédent. |
| Obligatoire
Liste des tâches d’inscription. Types associés : Tasks. |
| Obligatoire
Titre de l’étape d’inscription. |
| Facultatif
Description de l’étape d’inscription. |
| Facultatif
Affiche le message d’erreur du processus d’inscription des utilisateurs, le cas échéant. |
| Facultatif
Indique si le flux d’inscription est en état de chargement. Affiche un indicateur de chargement et le message associé si c’est le cas. |
Tâches
| Propriété | Type |
|---|---|
| Obligatoire
Le titre affiché de la tâche. |
| Facultatif
Un gestionnaire d’événements pour quand l’utilisateur clique n’importe où dans la tâche. |
| Facultatif
L’état actuel de la tâche. |
| Facultatif
Liste des sous-tâches qui appartiennent à cette tâche. Types associés : SubTasks. |
SubTasks
| Propriété | Type |
|---|---|
| Obligatoire
Le titre affiché de la tâche. |
| Facultatif
Un gestionnaire d’événements pour quand l’utilisateur clique n’importe où dans la tâche. |
| Facultatif
L’état actuel de la tâche. |
Basic
L’exemple suivant illustre l’utilisation de base du composant OnboardingView, dans lequel une vue React différente est obtenue pour chaque étape de l’inscription.
import React, {useState, useReducer, useCallback} from 'react'; import { FormFieldGroup, TextField, OnboardingView, Switch, TaskListItemProps, } from '@stripe/ui-extension-sdk/ui'; const onboardingTasks: Record<TaskName, TaskListItemProps> = { addInfo: { title: 'Add business info', status: 'in-progress', onPress: () => handlePress('addInfo'), }, connectBank: { title: 'Connect your bank', status: 'not-started', onPress: () => handlePress('connectBank'), }, review: { title: 'Review and finish', status: 'not-started', onPress: () => handlePress('review'), }, }; // These view implement the UI required by a particular onboarding step const steps: Record<TaskName, React.FunctionComponent> = { addInfo: () => ( <FormFieldGroup legend="Business Info" description="Add business info"> <TextField label="Company name" placeholder="Company name" hiddenElements={['label']} /> </FormFieldGroup> ), connectBank: () => ( <FormFieldGroup legend="Connect your bank" description="Enter the bank account to which withdrawals will be sent." > <TextField label="Bank name" placeholder="Bank name" hiddenElements={['label']} /> </FormFieldGroup> ), review: () => ( <FormFieldGroup legend="Specify settings" layout="vertical"> <Switch label="Enable automatic transfers" description="Enable automatic transfers" /> <Switch label="Enable auto-import of transactions" description="Enable auto-import of transactions" /> </FormFieldGroup> ), }; const handlePress = useCallback((taskName: TaskName) => { setTaskName(taskName); dispatch({type: 'TOGGLE_STATUS', taskName}); }, []); const [taskName, setTaskName] = useState<TaskName>('addInfo'); const [tasks, dispatch] = useReducer(taskReducer, onboardingTasks); const taskListItems = Object.values(tasks); const title = tasks[taskName].title; const description = `Please complete the onboarding step.`; const completed = taskListItems.every((item) => item.status === 'complete'); const OnboardingViewContent = steps[taskName]; return ( <OnboardingView title={title} description={description} completed={completed} tasks={taskListItems} > <OnboardingViewContent /> </OnboardingView> ); function getNextStatus( status: string, ): 'not-started' | 'in-progress' | 'complete' { switch (status) { case 'complete': return 'not-started'; case 'not-started': return 'in-progress'; case 'in-progress': return 'complete'; default: return 'not-started'; } } type TaskName = 'addInfo' | 'connectBank' | 'review'; type TaskAction = { type: 'TOGGLE_STATUS'; taskName: TaskName; }; // Reducer function to handle state updates function taskReducer( state: Record<TaskName, TaskListItemProps>, action: TaskAction, ): Record<TaskName, TaskListItemProps> { switch (action.type) { case 'TOGGLE_STATUS': return { ...state, [action.taskName]: { ...state[action.taskName], status: getNextStatus(state[action.taskName].status as string), }, }; default: return state; } }
Transitoire
Cet exemple montre comment utiliser les propriétéserror ou pending pour gérer différents états pendant le flux d’inscription des utilisateurs.
Le composant gère trois états distincts :
- En attente : affiche un spinner de chargement lors de la récupération des données d’inscription
- Erreur : affiche un bouton Réessayer si la récupération échoue
- Prêt : affiche l’expérience d’inscription des utilisateurs normale avec les tâches et les formulaires
Lorsque l’exemple de composant se charge pour la première fois, il simule un échec de récupération pour démontrer l’état de l’erreur. Lorsque vous cliquez sur Réessayer, la récupération réussit et affiche le contenu réel de l’inscription. Cette approche vous permet de gérer en douceur les scénarios de chargement et d’erreur sans nécessiter de composants supplémentaires ni de gestion complexe des états.
import React, {useCallback, useEffect, useState} from 'react'; import { FormFieldGroup, TextField, Button, OnboardingView, TaskListItemProps, } from '@stripe/ui-extension-sdk/ui'; type OnboardingData = { state: 'pending' | 'error' | 'ready'; tasks: TaskListItemProps[]; }; const [onboarding, setOnboarding] = useState<OnboardingData>({ state: 'pending', tasks: [], }); const fetchTasks = useCallback( (() => { let isFirstTry = true; return () => { setOnboarding({state: 'pending', tasks: []}); setTimeout(() => { if (isFirstTry) { isFirstTry = false; setOnboarding((prev) => ({...prev, state: 'error'})); } else { setOnboarding({ state: 'ready', tasks: [ {title: 'Add business info', status: 'in-progress'}, {title: 'Connect your bank', status: 'not-started'}, {title: 'Review and finish', status: 'not-started'}, ], }); } }, 2000); }; })(), [], ); useEffect(fetchTasks, [fetchTasks]); const error = onboarding.state === 'error' ? ( <Button onPress={fetchTasks}>Try again!</Button> ) : null; const pending = onboarding.state === 'pending'; return ( <OnboardingView error={error} pending={pending} title="Onboarding title" description="Onboarding description" completed={false} tasks={onboarding.tasks} > <FormFieldGroup legend="Business Info" description="Add business info!"> <TextField label="Company name" placeholder="Company name" hiddenElements={['label']} /> </FormFieldGroup> </OnboardingView> )