diff --git a/apps/web/src/features/auth/model/useKakaoCode.ts b/apps/web/src/features/auth/model/useKakaoCode.ts index 56b81239..586e569d 100644 --- a/apps/web/src/features/auth/model/useKakaoCode.ts +++ b/apps/web/src/features/auth/model/useKakaoCode.ts @@ -4,6 +4,7 @@ import { useFlow } from '@/app/routes/stackflow'; import { postSocialLogin } from '@/features/auth/api/postSocialLogin'; +import { getQueryParam } from '@/shared/lib/url'; import { useAuthStore } from '@/shared/store/auth'; export const useKakaoCode = () => { @@ -15,7 +16,7 @@ export const useKakaoCode = () => { const { replace } = useFlow(); useEffect(() => { - const code = new URLSearchParams(window.location.search).get('code'); + const code = getQueryParam('code'); if (code) { login(code); diff --git a/apps/web/src/pages/onboarding/ui/OnboardingPage.tsx b/apps/web/src/pages/onboarding/ui/OnboardingPage.tsx index 61f1d99b..0f84a7e7 100644 --- a/apps/web/src/pages/onboarding/ui/OnboardingPage.tsx +++ b/apps/web/src/pages/onboarding/ui/OnboardingPage.tsx @@ -14,6 +14,7 @@ import { OnboardingRoleSelect } from '@/widgets/onboarding/ui/OnboardingRoleSele import { postCreateCrew } from '@/features/crew-create/api/postCreateCrew'; import { postJoinCrew } from '@/features/crew-join/api/postJoinCrew'; +import { getQueryParam } from '@/shared/lib/url'; import { useFunnel } from '@/shared/lib/useFunnel'; import { AppLayout } from '@/shared/ui/layout'; @@ -46,6 +47,7 @@ type OnboardingState = { export function OnboardingPage() { const { replace } = useFlow(); const { Funnel } = useFunnel('role-select', ONBOARDING_FLOW); + const defaultInviteCode = getQueryParam('inviteCode'); const [onboardingState, setOnboardingState] = useState( () => { @@ -144,6 +146,7 @@ export function OnboardingPage() { name="enter-invite-code" render={(context) => ( { const response = await postJoinCrew({ invitationCode: inviteCode, diff --git a/apps/web/src/shared/lib/url.ts b/apps/web/src/shared/lib/url.ts new file mode 100644 index 00000000..84d3dda0 --- /dev/null +++ b/apps/web/src/shared/lib/url.ts @@ -0,0 +1,8 @@ +export const getQueryParam = ( + key: string, + search: string = window.location.search +): string | undefined => { + const value = new URLSearchParams(search).get(key); + + return value ?? undefined; +}; diff --git a/apps/web/src/widgets/onboarding/ui/OnboardingCrewJoin.tsx b/apps/web/src/widgets/onboarding/ui/OnboardingCrewJoin.tsx index 7b122b56..650740e1 100644 --- a/apps/web/src/widgets/onboarding/ui/OnboardingCrewJoin.tsx +++ b/apps/web/src/widgets/onboarding/ui/OnboardingCrewJoin.tsx @@ -22,12 +22,12 @@ export interface OnboardingCrewJoinProps { const INVITE_CODE_LENGTH = 6; export function OnboardingCrewJoin({ - defaultValue, + defaultValue = '', onNext, onPrev, }: OnboardingCrewJoinProps) { const [hasValidationError, setHasValidationError] = useState(false); - const [inviteCode, setInviteCode] = useState(defaultValue ?? ''); + const [inviteCode, setInviteCode] = useState(defaultValue); const [crewInfo, setCrewInfo] = useState(null); const isActive = inviteCode.length === INVITE_CODE_LENGTH;