'use client'; /** * 공정관리 상세 클라이언트 컴포넌트 V2 * * 라우팅 구조 변경: /[id], /[id]/edit, /new → /[id]?mode=view|edit, /new * 기존 ProcessDetail, ProcessForm 컴포넌트 활용 */ import { useState, useEffect, useCallback } from 'react'; import { useRouter, useSearchParams } from 'next/navigation'; import { ProcessDetail } from './ProcessDetail'; import { ProcessForm } from './ProcessForm'; import { getProcessById } from './actions'; import type { Process } from '@/types/process'; import { DetailPageSkeleton } from '@/components/ui/skeleton'; import { ErrorCard } from '@/components/ui/error-card'; import { toast } from 'sonner'; type DetailMode = 'view' | 'edit' | 'create'; interface ProcessDetailClientV2Props { processId?: string; initialMode?: DetailMode; } const BASE_PATH = '/ko/master-data/process-management'; export function ProcessDetailClientV2({ processId, initialMode }: ProcessDetailClientV2Props) { const router = useRouter(); const searchParams = useSearchParams(); // URL 쿼리에서 모드 결정 const modeFromQuery = searchParams.get('mode') as DetailMode | null; const isNewMode = !processId || processId === 'new'; const [mode, setMode] = useState(() => { if (isNewMode) return 'create'; if (initialMode) return initialMode; if (modeFromQuery === 'edit') return 'edit'; return 'view'; }); const [processData, setProcessData] = useState(null); const [isLoading, setIsLoading] = useState(!isNewMode); const [error, setError] = useState(null); // 데이터 로드 useEffect(() => { const loadData = async () => { if (isNewMode) { setIsLoading(false); return; } setIsLoading(true); setError(null); try { const result = await getProcessById(processId!); if (result.success && result.data) { setProcessData(result.data); } else { setError(result.error || '공정 정보를 찾을 수 없습니다.'); toast.error('공정을 불러오는데 실패했습니다.'); } } catch (err) { console.error('공정 조회 실패:', err); setError('공정 정보를 불러오는 중 오류가 발생했습니다.'); toast.error('공정을 불러오는데 실패했습니다.'); } finally { setIsLoading(false); } }; loadData(); }, [processId, isNewMode]); // URL 쿼리 변경 감지 useEffect(() => { if (!isNewMode && modeFromQuery === 'edit') { setMode('edit'); } else if (!isNewMode && !modeFromQuery) { setMode('view'); } }, [modeFromQuery, isNewMode]); // 로딩 중 if (isLoading) { return ; } // 에러 발생 (view/edit 모드에서) if (error && !isNewMode) { return ( ); } // 등록 모드 if (mode === 'create') { return ; } // 수정 모드 if (mode === 'edit' && processData) { return ; } // 상세 보기 모드 if (mode === 'view' && processData) { return ; } // 데이터 없음 (should not reach here) return ( ); }