Files
sam-react-prod/claudedocs/[REF] dashboard-migration-summary.md
byeongcheolryu 21edc932d9 docs: localStorage SSR 수정 작업 세션 체크포인트 생성
- ItemMasterDataManagement.tsx SSR 호환성 작업 계획 수립
- 6곳의 localStorage useState 초기화 수정 대상 파악
- 대용량 파일 작업 전략 및 세션 재개 방법 문서화

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 14:05:29 +09:00

4.2 KiB

Dashboard Migration Summary

Migration Date

2025-11-10

Source

From: /Users/byeongcheolryu/codebridgex/sam_project/sam-react (Vite React) To: /Users/byeongcheolryu/codebridgex/sam_project/sam-next/sma-next-project/sam-react-prod (Next.js)

Components Migrated

Dashboard Components (src/components/business/)

  1. Dashboard.tsx - Main dashboard router with lazy loading
  2. CEODashboard.tsx - CEO role dashboard
  3. ProductionManagerDashboard.tsx - Production Manager dashboard
  4. WorkerDashboard.tsx - Worker role dashboard
  5. SystemAdminDashboard.tsx - System Admin dashboard
  6. SalesLeadDashboard.tsx - Sales Lead dashboard

Layout Components

  1. DashboardLayout.tsx (src/layouts/) - Main layout with sidebar, header, and role switching

Supporting Components

  1. Sidebar.tsx (src/components/layout/) - Navigation sidebar component

Hooks

  1. useUserRole.ts - Hook for managing user roles
  2. useCurrentTime.ts - Hook for current time display

State Management (src/store/)

  1. menuStore.ts - Zustand store for menu state
  2. themeStore.ts - Zustand store for theme management
  3. demoStore.ts - Demo data store

UI Components

  1. calendar.tsx - Calendar component
  2. sheet.tsx - Sheet/drawer component
  3. chart-wrapper.tsx - Chart wrapper component

Dependencies Installed

{
  "zustand": "^latest",
  "recharts": "^latest",
  "react-day-picker": "^8",
  "date-fns": "^latest",
  "@radix-ui/react-dropdown-menu": "^latest",
  "@radix-ui/react-dialog": "^latest",
  "@radix-ui/react-checkbox": "^latest",
  "@radix-ui/react-switch": "^latest",
  "@radix-ui/react-popover": "^latest"
}

Key Adaptations for Next.js

1. Router Changes

  • Before: react-router-dom with useNavigate() and <Outlet />
  • After: Next.js with useRouter(), usePathname() from next/navigation

2. Client Components

  • Added 'use client' directive to:
    • src/layouts/DashboardLayout.tsx
    • src/components/business/Dashboard.tsx
    • All dashboard role components

3. Layout Pattern

  • Before: <Outlet /> for nested routes
  • After: {children} prop pattern

4. Props Interface

Added DashboardLayoutProps interface:

interface DashboardLayoutProps {
  children: React.ReactNode;
}

Role-Based Dashboard System

The system supports 5 user roles:

  1. CEO - Full dashboard with business metrics
  2. ProductionManager - Production-focused dashboard
  3. Worker - Simple work performance dashboard
  4. SystemAdmin - System management dashboard
  5. Sales - Sales and leads dashboard

Role switching is handled via:

  • localStorage user data
  • useUserRole() hook
  • Real-time updates via roleChanged event
  • Dynamic menu generation based on role

Known Issues / Future Work

ESLint Warnings

Many components have ESLint warnings for:

  • Unused variables
  • Unused imports
  • TypeScript any types
  • Missing type definitions

These need to be cleaned up but don't affect functionality.

Missing Features

  • Some business components were copied but may need additional UI components
  • Route definitions in app/ directory need to be created
  • API integration may need updates for Next.js API routes

Next Steps

  1. Create dashboard routes in src/app/dashboard/
  2. Clean up ESLint errors and warnings
  3. Test all role-based dashboards
  4. Add missing UI components as needed
  5. Update API calls for Next.js API routes
  6. Add authentication guards
  7. Test role switching functionality

File Structure

src/
├── app/
│   └── dashboard/          # (To be created)
├── components/
│   ├── business/           # All business components
│   ├── layout/
│   │   └── Sidebar.tsx
│   └── ui/                 # UI primitives
├── hooks/
│   ├── useUserRole.ts
│   └── useCurrentTime.ts
├── layouts/
│   └── DashboardLayout.tsx
└── store/
    ├── menuStore.ts
    ├── themeStore.ts
    └── demoStore.ts

Testing

To test the migration:

  1. Run npm run dev
  2. Navigate to /dashboard
  3. Test role switching via dropdown
  4. Verify each dashboard loads correctly
  5. Check responsive design (mobile/desktop)