"use client"; import { useState, useEffect } from "react"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Badge } from "@/components/ui/badge"; import { LoadingSpinner } from "@/components/common/LoadingSpinner"; import { useCommonCode } from "@/hooks/useCommonCode"; // import { useMultiLang } from "@/hooks/useMultiLang"; // 무한 루프 방지를 위해 임시 제거 import { CodeFormModal } from "./CodeFormModal"; import { AlertModal } from "@/components/common/AlertModal"; import { Search, Plus, Edit, Trash2 } from "lucide-react"; import { cn } from "@/lib/utils"; interface CodeDetailPanelProps { categoryCode: string; } export function CodeDetailPanel({ categoryCode }: CodeDetailPanelProps) { // const { getText } = useMultiLang(); // 무한 루프 방지를 위해 임시 제거 const { codes, codesLoading, codesError, fetchCodes, deleteCode } = useCommonCode(); // 카테고리 변경 시 코드 조회 useEffect(() => { if (categoryCode) { console.log("🔍 카테고리 변경됨, 코드 조회:", categoryCode); fetchCodes(categoryCode); } }, [categoryCode, fetchCodes]); // 로컬 상태 const [searchTerm, setSearchTerm] = useState(""); const [showFormModal, setShowFormModal] = useState(false); const [editingCode, setEditingCode] = useState<{ categoryCode: string; codeValue: string }>({ categoryCode: "", codeValue: "", }); const [showDeleteModal, setShowDeleteModal] = useState(false); const [deletingCode, setDeletingCode] = useState<{ categoryCode: string; codeValue: string }>({ categoryCode: "", codeValue: "", }); // 검색 필터링 const filteredCodes = codes.filter( (code) => code.code_name.toLowerCase().includes(searchTerm.toLowerCase()) || code.code_value.toLowerCase().includes(searchTerm.toLowerCase()), ); // 코드 생성 핸들러 const handleCreateCode = () => { if (!categoryCode) return; setEditingCode({ categoryCode: "", codeValue: "" }); setShowFormModal(true); }; // 코드 수정 핸들러 const handleEditCode = (codeValue: string) => { setEditingCode({ categoryCode, codeValue }); setShowFormModal(true); }; // 코드 삭제 핸들러 const handleDeleteCode = (codeValue: string) => { setDeletingCode({ categoryCode, codeValue }); setShowDeleteModal(true); }; // 삭제 확인 핸들러 const handleConfirmDelete = async () => { if (!deletingCode.categoryCode || !deletingCode.codeValue) return; try { await deleteCode(deletingCode.categoryCode, deletingCode.codeValue); setShowDeleteModal(false); setDeletingCode({ categoryCode: "", codeValue: "" }); } catch (error) { console.error("코드 삭제 오류:", error); // 에러 처리는 useCommonCode 훅에서 처리됨 } }; // 카테고리가 선택되지 않은 경우 if (!categoryCode) { return (
카테고리를 선택하세요
왼쪽에서 카테고리를 선택하면 해당 코드 목록이 표시됩니다.
❌ {codesError}
코드를 불러오는 중...
코드가 없습니다.
{code.description}
)}