diff --git a/apps/web/modules/getting-started/[[...step]]/onboarding-view.tsx b/apps/web/modules/getting-started/[[...step]]/onboarding-view.tsx index faa1563ce8..29d41e709e 100644 --- a/apps/web/modules/getting-started/[[...step]]/onboarding-view.tsx +++ b/apps/web/modules/getting-started/[[...step]]/onboarding-view.tsx @@ -125,6 +125,13 @@ const OnboardingPage = (props: PageProps) => { }; const currentStepIndex = steps.indexOf(currentStep); + const goToStep = (step: number) => { + const newStep = steps[step]; + startTransition(() => { + router.push(`/getting-started/${stepTransform(newStep)}`); + }); + }; + const goToNextStep = () => { const nextIndex = currentStepIndex + 1; const newStep = steps[nextIndex]; @@ -159,7 +166,7 @@ const OnboardingPage = (props: PageProps) => {

))} - + }> diff --git a/packages/ui/components/form/step/Steps.tsx b/packages/ui/components/form/step/Steps.tsx index 329842693e..29a331cc2c 100644 --- a/packages/ui/components/form/step/Steps.tsx +++ b/packages/ui/components/form/step/Steps.tsx @@ -3,7 +3,7 @@ import classNames from "@calcom/ui/classNames"; type StepWithNav = { maxSteps: number; currentStep: number; - nextStep: () => void; + navigateToStep: (step: number) => void; disableNavigation?: false; stepLabel?: (currentStep: number, maxSteps: number) => string; }; @@ -11,7 +11,7 @@ type StepWithNav = { type StepWithoutNav = { maxSteps: number; currentStep: number; - nextStep?: undefined; + navigateToStep?: undefined; disableNavigation: true; stepLabel?: (currentStep: number, maxSteps: number) => string; }; @@ -23,7 +23,7 @@ const Steps = (props: StepsProps) => { const { maxSteps, currentStep, - nextStep, + navigateToStep, disableNavigation = false, stepLabel = (currentStep, totalSteps) => `Step ${currentStep} of ${totalSteps}`, } = props; @@ -35,7 +35,7 @@ const Steps = (props: StepsProps) => { return index <= currentStep - 1 ? (
nextStep?.()} + onClick={() => navigateToStep?.(index)} className={classNames( "bg-inverted h-1 w-full rounded-[1px]", index < currentStep - 1 && !disableNavigation ? "cursor-pointer" : "" diff --git a/packages/ui/components/form/step/steps.test.tsx b/packages/ui/components/form/step/steps.test.tsx index 122596f177..7edf91bdf0 100644 --- a/packages/ui/components/form/step/steps.test.tsx +++ b/packages/ui/components/form/step/steps.test.tsx @@ -13,7 +13,7 @@ const mockNavigateToStep = vi.fn(); const Props = { maxSteps: MAX_STEPS, currentStep: CURRENT_STEP, - nextStep: mockNavigateToStep, + navigateToStep: mockNavigateToStep, stepLabel: (currentStep: number, totalSteps: number) => `Test Step ${currentStep} of ${totalSteps}`, disableNavigation: undefined, }; diff --git a/packages/ui/components/form/wizard/WizardForm.tsx b/packages/ui/components/form/wizard/WizardForm.tsx index 10d836823c..2ca737ad90 100644 --- a/packages/ui/components/form/wizard/WizardForm.tsx +++ b/packages/ui/components/form/wizard/WizardForm.tsx @@ -46,7 +46,7 @@ export function WizardForm({ defaultStep = 1, disableNavigation = false, }: WizardFormProps) { - const { currentStep, maxSteps, nextStep, prevStep, isFirstStep, isLastStep } = useWizardState( + const { currentStep, maxSteps, nextStep, goToStep, prevStep, isFirstStep, isLastStep } = useWizardState( defaultStep, steps.length ); @@ -71,10 +71,9 @@ export function WizardForm({ )}
diff --git a/packages/ui/components/form/wizard/useWizardState.ts b/packages/ui/components/form/wizard/useWizardState.ts index f52aeb4afb..496ed3975a 100644 --- a/packages/ui/components/form/wizard/useWizardState.ts +++ b/packages/ui/components/form/wizard/useWizardState.ts @@ -25,7 +25,8 @@ export function useWizardState(defaultStep = 1, maxSteps: number) { const goToStep = useCallback( (newStep: number) => { - setStep(Math.min(Math.max(newStep, 1), maxSteps)); + // Convert 0-based newStep to 1-based for URL (?step=1), So actual step = newStep+1 + setStep(Math.min(Math.max(newStep + 1, 1), maxSteps)); }, [setStep, maxSteps] ); diff --git a/packages/ui/components/layout/WizardLayout.tsx b/packages/ui/components/layout/WizardLayout.tsx index e9dfb30688..fddd717828 100644 --- a/packages/ui/components/layout/WizardLayout.tsx +++ b/packages/ui/components/layout/WizardLayout.tsx @@ -1,7 +1,6 @@ "use client"; // eslint-disable-next-line no-restricted-imports -import { noop } from "lodash"; import { usePathname } from "next/navigation"; import React, { useEffect, useState } from "react"; import { Toaster } from "sonner"; @@ -58,7 +57,7 @@ export function WizardLayout({ )} - + {children}