'use client'; /* IMPORT */ import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger } from '@/components/ui/alert-dialog'; import { Button } from '@/components/ui/button'; import { Download, Plus, Trash2 } from 'lucide-react'; import { exportTableToExcel } from '@/lib/export'; import { removeRegEvalCriteria } from '../service'; import { type RegEvalCriteriaView } from '@/db/schema'; import { type Table } from '@tanstack/react-table'; import { toast } from 'sonner'; import { useMemo, useState } from 'react'; // ---------------------------------------------------------------------------------------------------- /* TYPES */ interface RegEvalCriteriaTableToolbarActionsProps { table: Table, onCreateCriteria?: () => void, onRefresh?: () => void, } // ---------------------------------------------------------------------------------------------------- /* REGULAR EVALUATION CRITERIA TABLE TOOLBAR ACTIONS COMPONENT */ function RegEvalCriteriaTableToolbarActions(props: RegEvalCriteriaTableToolbarActionsProps) { const { table, onCreateCriteria, onRefresh } = props; const [isDeleting, setIsDeleting] = useState(false); const selectedRows = table.getFilteredSelectedRowModel().rows; const hasSelection = selectedRows.length > 0; const selectedIds = useMemo(() => { return [...new Set(selectedRows.map(row => row.original.criteriaId))]; }, [selectedRows]); // Function for Create New Criteria const handleCreateNew = () => { if (!onCreateCriteria) { return; } onCreateCriteria(); } const handleDeleteSelected = async () => { if (!hasSelection) { return; } try { setIsDeleting(true); for (const selectedId of selectedIds) { if (selectedId) { await removeRegEvalCriteria(selectedId); } } table.resetRowSelection(); toast.success(`${selectedIds.length}개의 평가 기준이 삭제되었습니다.`); if (onRefresh) { onRefresh(); } else { window.location.reload(); } } catch (error) { console.error('Error in Deleting Regular Evaluation Critria: ', error); toast.error( error instanceof Error ? error.message : '평가 기준 삭제 중 오류가 발생했습니다.' ); } finally { setIsDeleting(false); } } // Excel Export const handleExport = () => { try { exportTableToExcel(table, { filename: 'Regular_Evaluation_Criteria', excludeColumns: ['select', 'actions'], }); toast.success('Excel 파일이 다운로드되었습니다.'); } catch (error) { console.error('Error in Exporting to Excel: ', error); toast.error('Excel 내보내기 중 오류가 발생했습니다.'); } }; return (
{hasSelection && ( 정말 삭제하시겠습니까? 선택된 {selectedIds.length}개의 협력업체 평가 기준 항목이 영구적으로 삭제됩니다. 이 작업은 되돌릴 수 없으며, 연관된 평가 기준과 항목들도 함께 삭제됩니다. Cancel {isDeleting ? 'Deleting...' : 'Delete'} )}
); } // ---------------------------------------------------------------------------------------------------- /* EXPORT */ export default RegEvalCriteriaTableToolbarActions;