|
1 | 1 | 'use client';
|
2 | 2 |
|
3 | 3 | import { useEffect, useMemo, useRef } from 'react';
|
| 4 | +import { usePathname, useRouter, useSearchParams } from 'next/navigation'; |
4 | 5 |
|
5 |
| -import type { FunnelProps, StepProps } from '@/v1/base/Funnel/Funnel'; |
6 | 6 | import { assert } from '@/utils/assert';
|
7 | 7 |
|
8 |
| -import { Funnel, Step } from '@/v1/base/Funnel/Funnel'; |
9 |
| -import { usePathname, useRouter, useSearchParams } from 'next/navigation'; |
| 8 | +import type { FunnelProps, StepProps } from '@/v1/base/Funnel'; |
| 9 | +import { Funnel, Step } from '@/v1/base/Funnel'; |
10 | 10 |
|
11 | 11 | export type NonEmptyArray<T> = readonly [T, ...T[]];
|
12 | 12 |
|
@@ -34,7 +34,11 @@ export const useFunnel = <Steps extends NonEmptyArray<string>>(
|
34 | 34 | initialStep?: Steps[number];
|
35 | 35 | onStepChange?: (name: Steps[number]) => void;
|
36 | 36 | }
|
37 |
| -): readonly [FunnelComponent<Steps>, (step: Steps[number]) => void] => { |
| 37 | +): readonly [ |
| 38 | + FunnelComponent<Steps>, |
| 39 | + (step: Steps[number]) => void, |
| 40 | + Steps[number] |
| 41 | +] => { |
38 | 42 | const router = useRouter();
|
39 | 43 | const searchParams = useSearchParams();
|
40 | 44 | const pathname = usePathname();
|
@@ -78,11 +82,12 @@ export const useFunnel = <Steps extends NonEmptyArray<string>>(
|
78 | 82 | const params = new URLSearchParams(searchParams.toString());
|
79 | 83 | params.set('funnel-step', `${step}`);
|
80 | 84 |
|
81 |
| - return router.replace(`?${params.toString()}`); |
| 85 | + return router.replace(`?${params.toString()}`, { shallow: true }); |
82 | 86 | };
|
83 | 87 |
|
84 |
| - return [FunnelComponent, setStep] as unknown as readonly [ |
| 88 | + return [FunnelComponent, setStep, step] as unknown as readonly [ |
85 | 89 | FunnelComponent<Steps>,
|
86 |
| - (step: Steps[number]) => Promise<void> |
| 90 | + (step: Steps[number]) => Promise<void>, |
| 91 | + Steps[number] |
87 | 92 | ];
|
88 | 93 | };
|
0 commit comments