'use client'; /** * 점검표 상세 클라이언트 컴포넌트 * * 라우팅: * - /[id] → 상세 보기 (view) * - /[id]?mode=edit → 수정 (edit) * - ?mode=new → 등록 (create) */ import { useState, useEffect } from 'react'; import { useSearchParams } from 'next/navigation'; import { ChecklistDetail } from './ChecklistDetail'; import { ChecklistForm } from './ChecklistForm'; import { getChecklistById } from './actions'; import type { Checklist } from '@/types/checklist'; import { DetailPageSkeleton } from '@/components/ui/skeleton'; import { ErrorCard } from '@/components/ui/error-card'; import { toast } from 'sonner'; type DetailMode = 'view' | 'edit' | 'create'; interface ChecklistDetailClientProps { checklistId?: string; } const BASE_PATH = '/ko/master-data/checklist-management'; export function ChecklistDetailClient({ checklistId }: ChecklistDetailClientProps) { const searchParams = useSearchParams(); const modeFromQuery = searchParams.get('mode') as DetailMode | null; const isNewMode = !checklistId || checklistId === 'new'; const [mode, setMode] = useState(() => { if (isNewMode) return 'create'; if (modeFromQuery === 'edit') return 'edit'; return 'view'; }); const [checklistData, setChecklistData] = useState(null); const [isLoading, setIsLoading] = useState(!isNewMode); const [error, setError] = useState(null); useEffect(() => { if (isNewMode) { setIsLoading(false); return; } const loadData = async () => { setIsLoading(true); setError(null); try { const result = await getChecklistById(checklistId!); if (result.success && result.data) { setChecklistData(result.data); } else { setError(result.error || '점검표 정보를 찾을 수 없습니다.'); toast.error('점검표를 불러오는데 실패했습니다.'); } } catch { setError('점검표 정보를 불러오는 중 오류가 발생했습니다.'); toast.error('점검표를 불러오는데 실패했습니다.'); } finally { setIsLoading(false); } }; loadData(); }, [checklistId, isNewMode]); useEffect(() => { if (!isNewMode && modeFromQuery === 'edit') { setMode('edit'); } else if (!isNewMode && !modeFromQuery) { setMode('view'); } }, [modeFromQuery, isNewMode]); if (isLoading) { return ; } if (error && !isNewMode) { return ( ); } if (mode === 'create') { return ; } if (mode === 'edit' && checklistData) { return ; } if (mode === 'view' && checklistData) { return ; } return ( ); }