- Shipped
- August 28, 2026 at 4:22 AM UTC
- Author
- Kamo
- Commit
- 8f58728
CreateOrgForm.tsx is one component with two layouts (page/widget), built from Task 7/8's CreateOrgFields model, field groups and OrgBrandPreview. page.tsx is now just the full-width shell around it. The old wizard's nine step files plus Stepper/stepIcons move to app/settings/wizard, where Task 12 rewires them into the Getting Started Configuration Wizard; BranchTypeStep, MemberInfoStep, ReviewStep, StepNavigation, CancelModal and the sessionStorage-backed useWizardForm hook are retired outright, since a one-page create has no steps to navigate between and nothing left to save a draft of. Every relative import in the moved files that pointed at ../ui/*, ../brandscan/*, ../../types, ../../validation, ../../appSelections, ../../complianceWizard or ../../hooks/* is rewritten to the absolute @/app/network/create/... form, since components/ui and components/brandscan stay put (the surviving field components still use them) and only resolve one directory up from the steps' old location. hooks/useWizardForm.ts is trimmed rather than deleted: __tests__/submitWizard.test.ts imports freshWizardData from it and must stay green and unedited, so the file keeps that one export (and the INITIAL_DATA it needs) and drops everything else that no longer has a caller. Two correctness fixes found in review before wiring the field components up: - CreateOrgForm's onChange is now referentially stable across renders (requestScan read through a ref instead of a useCallback dependency) — OrgTypePicker and IdentityFields each list onChange in a useEffect dependency array, and requestScan's own identity changes on every completed brand scan, which would have re-fired both effects on every scan rather than only on real input changes. - DropZone takes a real disabled prop (tabIndex=-1, guarded handlers, native disabled on its file input and fallback button) instead of relying only on an ancestor's pointer-events-none, which does nothing for keyboard activation; wired through BrandFields' logo slots so a locked form actually locks out keyboard users too. /network/create?fresh=1 becomes plain /network/create in FirstOrgCta.tsx and network/page.tsx: the one-page form starts from initialCreateOrgFields() on every mount rather than restoring a sessionStorage draft, so the param has nothing left to do.