Files
sam-react-prod/claudedocs/dashboard/[REF] dashboard-migration-summary.md
byeongcheolryu 65a8510c0b fix: 품목기준관리 실시간 동기화 수정
- BOM 항목 추가/수정/삭제 시 섹션탭 즉시 반영
- 섹션 복제 시 UI 즉시 업데이트 (null vs undefined 이슈 해결)
- 항목 수정 기능 추가 (useTemplateManagement)
- 실시간 동기화 문서 추가

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-27 22:19:50 +09:00

5.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)

관련 파일

프론트엔드

  • src/components/business/Dashboard.tsx - 대시보드 라우터 (lazy loading)
  • src/components/business/CEODashboard.tsx - CEO 대시보드
  • src/components/business/ProductionManagerDashboard.tsx - 생산관리자 대시보드
  • src/components/business/WorkerDashboard.tsx - 작업자 대시보드
  • src/components/business/SystemAdminDashboard.tsx - 시스템관리자 대시보드
  • src/components/business/SalesLeadDashboard.tsx - 영업 대시보드
  • src/layouts/DashboardLayout.tsx - 대시보드 레이아웃
  • src/components/layout/Sidebar.tsx - 사이드바 컴포넌트
  • src/hooks/useUserRole.ts - 역할 관리 훅
  • src/hooks/useCurrentTime.ts - 현재 시간 훅
  • src/store/menuStore.ts - 메뉴 상태 관리 (Zustand)
  • src/store/themeStore.ts - 테마 상태 관리 (Zustand)

참조 문서

  • claudedocs/dashboard/[IMPL-2025-11-10] dashboard-integration-complete.md - 대시보드 통합 완료