| 32-multi-step-onboarding-wizard |
01 |
ui |
| react |
| onboarding |
| wizard |
| vitest |
| testing-library |
|
| phase |
provides |
| 31-puter.js-zero-config-cloud |
provider selection step, puter/google/apiKey credential capture in wizard state |
|
|
| OnboardingSummaryStep component — read-only review card showing hardware, mode, provider, root dir |
| Skip buttons on steps 1 and 2 (step 3 already had skip via ProviderSelectionStep) |
| Step 4 "Review & finish" + "Skip to summary" buttons advancing to step 5 |
| Step 5 summary screen wired into NexusOnboardingWizard |
| handleStartChat function creating workspace then opening chat panel (ONBD-06) |
| Step indicator shows "Summary" on step 5 instead of "Step 5 of 4" |
| deriveProviderLabel helper for human-readable provider display |
|
| onboarding |
| chat-panel |
| dashboard-navigation |
|
| added |
patterns |
|
|
| OnboardingSummaryStep uses SummaryRow internal subcomponent for label-value pairs |
| createWorkspace() refactored out of handleSubmit/handleStartChat to avoid duplication |
| renderToStaticMarkup + fireEvent pattern for jsdom component tests without jest-dom |
|
|
| created |
modified |
| ui/src/components/onboarding/OnboardingSummaryStep.tsx |
| ui/src/components/onboarding/OnboardingSummaryStep.test.tsx |
|
| ui/src/components/NexusOnboardingWizard.tsx |
|
|
| createWorkspace() helper extracted so both handleSubmit and handleStartChat share workspace creation without duplication |
| Tests use renderToStaticMarkup for static assertions + @testing-library/react fireEvent for click tests (no jest-dom or user-event available) |
| Step 4 form submit removed — replaced with button advancing to step 5; actual workspace creation deferred to summary CTA |
|
| SummaryRow: internal non-exported subcomponent rendering label-value pair with optional mono font |
| deriveProviderLabel: pure function mapping provider state to display string, placed outside component |
|
|
4min |
2026-04-01 |