"use client"; import React from "react"; import { useSortable } from "@dnd-kit/sortable"; import { CSS } from "@dnd-kit/utilities"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { Edit, Trash2 } from "lucide-react"; import { cn } from "@/lib/utils"; import { useUpdateCode } from "@/hooks/queries/useCodes"; import type { CodeInfo } from "@/types/commonCode"; interface SortableCodeItemProps { code: CodeInfo; categoryCode: string; onEdit: () => void; onDelete: () => void; isDragOverlay?: boolean; } export function SortableCodeItem({ code, categoryCode, onEdit, onDelete, isDragOverlay = false, }: SortableCodeItemProps) { const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({ id: code.code_value, disabled: isDragOverlay, }); const updateCodeMutation = useUpdateCode(); const style = { transform: CSS.Transform.toString(transform), transition, }; // 활성/비활성 토글 핸들러 const handleToggleActive = async (checked: boolean) => { try { await updateCodeMutation.mutateAsync({ categoryCode, codeValue: code.code_value, data: { codeName: code.code_name, codeNameEng: code.code_name_eng || "", description: code.description || "", sortOrder: code.sort_order, isActive: checked ? "Y" : "N", }, }); } catch (error) { console.error("코드 활성 상태 변경 실패:", error); } }; return (

{code.code_name}

{ e.preventDefault(); e.stopPropagation(); if (!updateCodeMutation.isPending) { handleToggleActive(code.is_active !== "Y"); } }} onPointerDown={(e) => e.stopPropagation()} onMouseDown={(e) => e.stopPropagation()} > {code.is_active === "Y" ? "활성" : "비활성"}

{code.code_value}

{code.description &&

{code.description}

}
{/* 액션 버튼 */}
e.stopPropagation()} onMouseDown={(e) => e.stopPropagation()} >
); }