feat: implement direct routing to eliminate double redirects after registration

Replace dashboard intermediate routing with direct role-based navigation to improve UX
and reduce registration flow time from 4-5 seconds to 2-3 seconds.

Key Changes:
- Add routing utility lib/routing.ts with getHomePathFromUser function
- Update auth-flow.tsx, app/page.tsx, login/page.tsx to use direct routing
- Remove dashboard route and redirect components (3 files)
- Preserve critical components: sidebar/ and user-settings/ (43 dependencies)
- Fix breadcrumbs in seller/warehouse and fulfillment-supplies layouts
- Add comprehensive documentation and test coverage

Route Mapping:
- FULFILLMENT → /fulfillment/home
- SELLER → /seller/home
- LOGIST → /logistics/home
- WHOLESALE → /wholesale/home
- Fallback → /register

Testing:
- 8 comprehensive tests passed
- All routing scenarios validated
- Production build successful
- Critical components verified

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Veronika Smirnova
2025-09-19 18:46:22 +03:00
parent 24a6ff74b5
commit ca4d44d090
11 changed files with 591 additions and 177 deletions

View File

@ -5,6 +5,7 @@ import { useRouter } from 'next/navigation'
import { useState, useEffect } from 'react'
import { useAuthContext } from '@/contexts/AuthContext'
import { getHomePathFromUser } from '@/lib/routing'
import { CabinetSelectStep } from './cabinet-select-step'
import { ConfirmationStep } from './confirmation-step'
@ -89,7 +90,7 @@ export function AuthFlow({ partnerCode, referralCode }: AuthFlowProps = {}) {
// ⭐ КРИТИЧНО: Отслеживаем только смену шагов
console.warn('🎯 STEP:', step)
// Добавляем useEffect для отслеживания изменений step
useEffect(() => {
console.warn('🔄 STEP CHANGED TO:', step)
@ -147,14 +148,15 @@ export function AuthFlow({ partnerCode, referralCode }: AuthFlowProps = {}) {
useEffect(() => {
if (step === 'complete') {
const timer = setTimeout(() => {
// Безопасно перенаправляем в дашборд через Next.js router
console.warn('🎢 AuthFlow - Registration complete, redirecting to /dashboard')
router.push('/dashboard')
// Прямое перенаправление в соответствующий home без промежуточного dashboard
const homePath = getHomePathFromUser(user)
console.warn('🎢 AuthFlow - Registration complete, redirecting to', homePath)
router.push(homePath)
}, 2000) // Задержка для показа сообщения о завершении
return () => clearTimeout(timer)
}
}, [step, router])
}, [step, router, user])
const handlePhoneNext = (phone: string) => {
console.warn('📞 PHONE→SMS:', phone)
@ -282,9 +284,7 @@ export function AuthFlow({ partnerCode, referralCode }: AuthFlowProps = {}) {
{step === 'phone' && (
<PhoneStep onNext={handlePhoneNext} registrationType={registrationType} referrerCode={activeCode} />
)}
{step === 'sms' && (
<SmsStep phone={authData.phone} onNext={handleSmsNext} onBack={handleSmsBack} />
)}
{step === 'sms' && <SmsStep phone={authData.phone} onNext={handleSmsNext} onBack={handleSmsBack} />}
{step === 'cabinet-select' && <CabinetSelectStep onNext={handleCabinetNext} onBack={handleCabinetBack} />}
{step === 'inn' && <InnStep onNext={handleInnNext} onBack={handleInnBack} />}
{step === 'marketplace-api' && (
@ -309,16 +309,17 @@ export function AuthFlow({ partnerCode, referralCode }: AuthFlowProps = {}) {
/>
)}
{/* ОТЛАДКА: Логируем authData перед передачей в ConfirmationStep */}
{step === 'confirmation' && (() => {
console.warn('📊 AuthFlow - Passing to ConfirmationStep:', {
phone: authData.phone,
phoneLength: authData.phone?.length,
cabinetType: authData.cabinetType,
inn: authData.inn,
allAuthData: authData,
})
return null
})()}
{step === 'confirmation' &&
(() => {
console.warn('📊 AuthFlow - Passing to ConfirmationStep:', {
phone: authData.phone,
phoneLength: authData.phone?.length,
cabinetType: authData.cabinetType,
inn: authData.inn,
allAuthData: authData,
})
return null
})()}
{(step as string) === 'complete' && (
<div className="space-y-6 text-center">
<div className="flex justify-center">