OnboardingView-Komponente für Stripe AppsÖffentliche Vorschau
Verwenden Sie OnboardingView, um einen Onboarding-Ablauf Ihrer Stripe-App zu implementieren
So fügen Sie Ihrer App die OnboardingView Komponente hinzu:
import {OnboardingView} from '@stripe/ui-extension-sdk/ui';
Die Komponente OnboardingView bietet eine standardisierte Möglichkeit, eine Onboarding-Ansicht mit vordefinierter Struktur zu implementieren:
- Linke Seitenleiste, die eine Liste der Onboarding-Aufgaben anzeigt
- Hauptinhaltsbereich, der den Inhalt eines bestimmten Onboarding-Schritts anzeigt
Die Liste der Onboarding-Aufgaben wird als Array von TaskListItemProps-Elementen angegeben. Sie können den Inhalt des Onboarding-Schritts selbst vollständig anpassen, indem Sie eine nutzerdefinierte React-Ansicht als direktes untergeordnetes Element der <OnboardingView> angeben. Mit diesem Ansatz können Sie einen nutzerdefinierten Onboarding-Schritt basierend auf Ihren Geschäftsanforderungen implementieren, während das Stripe-Dashboard die Art und Weise steuert, wie die Liste der Onboarding-Aufgaben gerendert wird.
OnboardingView-Eigenschaften
| Eigenschaft | Typ |
|---|---|
| Pflichtfeld
React-Komponente, die den Inhalt der primären Spalte rendert. |
| Pflichtfeld
Ob alle Onboarding-Aufgaben erledigt sind. Wenn auf „true“ gesetzt, wird das Onboarding-Modalfenster nach kurzer Verzögerung automatisch geschlossen, um die Nutzerin bzw. den Nutzer an den vorherigen Ort zurückzuleiten. |
| Pflichtfeld
Eine Liste der Onboarding-Aufgaben. Verwandte Typen: Tasks. |
| Pflichtfeld
Titel des Onboarding-Schritts. |
| Optional
Beschreibung der Onboarding-Schritte. |
| Optional
Informationen über einen Fehler, der während des Onboarding eingetreten ist. |
| Optional
Ob sich der Onboarding-Ablauf in einem Ladezustand befindet. Zeigt bei true einen Kreisel und eine Lademeldung an. |
Aufgaben
| Eigenschaft | Typ |
|---|---|
| Pflichtfeld
Der Anzeigetitel der Aufgabe. |
| Optional
Ein Ereignishandler, wenn der/die Nutzer/in auf eine beliebige Stelle in der Aufgabe klickt. |
| Optional
Der aktuelle Status der Aufgabe. |
| Optional
Eine Liste der Unteraufgaben, die zu dieser Aufgabe gehören. Verwandte Typen: SubTasks. |
SubTasks
| Eigenschaft | Typ |
|---|---|
| Pflichtfeld
Der Anzeigetitel der Aufgabe. |
| Optional
Ein Ereignishandler, wenn der/die Nutzer/in auf eine beliebige Stelle in der Aufgabe klickt. |
| Optional
Der aktuelle Status der Aufgabe. |
Basic
Das folgende Beispiel zeigt die grundlegende Verwendung der Komponente OnboardingView, bei der für jeden Onboarding-Schritt eine andere React-Ansicht gerendert wird.
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; } }
Übergangsphase
Dieses Beispiel zeigt, wie Sie die Optionen error und pending verwenden, um verschiedene Zustände während des Onboarding-Ablaufs zu behandeln.
Die Komponente verwaltet drei verschiedene Zustände:
- Ausstehend: Zeigt einen Ladekreiselan, während die Daten zum Onboarding eingelesen werden
- Fehler: Zeigt eine Schaltfläche Wiederholen an, wenn der Abruf fehlschlägt
- Bereit: Stellt das normale Onboarding-Erlebnis mit Aufgaben und Formularen dar
Wenn die Beispielkomponente zum ersten Mal geladen wird, simuliert sie einen fehlgeschlagenen Abruf, um den Fehlerzustand zu demonstrieren. Wenn Sie auf Nochmal versuchen klicken, ist der Abruf erfolgreich und der eigentliche Onboarding-Inhalt wird angezeigt. Mit diesem Ansatz können Sie Lade- und Fehlerszenarien reibungslos handhaben, ohne zusätzliche Komponenten oder eine komplexe Zustandsverwaltung zu benötigen.
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> )