"use client" import * as React from "react" import { ColumnDef } from "@tanstack/react-table" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Checkbox } from "@/components/ui/checkbox" import { DataTableColumnHeaderSimple } from "@/components/data-table/data-table-column-simple-header" import { type ApprovalLog } from "../service" import { formatDate } from "@/lib/utils" import { MoreHorizontal, Eye } from "lucide-react" import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu" interface GetColumnsProps { setRowAction: React.Dispatch>; } export function getColumns({ setRowAction }: GetColumnsProps): ColumnDef[] { return [ { id: "select", header: ({ table }) => ( table.toggleAllPageRowsSelected(!!value)} aria-label="Select all" className="translate-y-[2px]" /> ), cell: ({ row }) => ( row.toggleSelected(!!value)} aria-label="Select row" className="translate-y-[2px]" /> ), enableSorting: false, enableHiding: false, }, { accessorKey: "apInfId", header: ({ column }) => ( ), cell: ({ row }) => { const apInfId = row.getValue("apInfId") as string; return (
{apInfId}
) }, }, { accessorKey: "subject", header: ({ column }) => ( ), cell: ({ row }) => { return (
{row.getValue("subject")}
) }, }, { accessorKey: "status", header: ({ column }) => ( ), cell: ({ row }) => { const status = row.getValue("status") as string; // 클라이언트 측에서 상태 텍스트 변환 const getStatusText = (status: string) => { const statusMap: Record = { '-3': '암호화실패', '-2': '암호화중', '-1': '예약상신', '0': '보류', '1': '진행중', '2': '완결', '3': '반려', '4': '상신취소', '5': '전결', '6': '후완결' }; return statusMap[status] || '알 수 없음'; }; const getStatusVariant = (status: string) => { switch (status) { case '2': return 'default'; // 완결 case '3': return 'destructive'; // 반려 case '4': return 'destructive'; // 상신취소 case '5': return 'default'; // 전결 case '6': return 'default'; // 후완결 case '1': return 'secondary'; // 진행중 default: return 'outline'; // 기타 } }; return (
{getStatusText(status)}
) }, }, { accessorKey: "userId", header: ({ column }) => ( ), cell: ({ row }) => { return (
{row.getValue("userId") || "-"}
) }, }, { accessorKey: "emailAddress", header: ({ column }) => ( ), cell: ({ row }) => { return (
{row.getValue("emailAddress")}
) }, }, { accessorKey: "sbmDt", header: ({ column }) => ( ), cell: ({ row }) => { const sbmDt = row.getValue("sbmDt") as string; if (!sbmDt) return -; // YYYYMMDDHHMMSS 형식을 YYYY-MM-DD HH:MM:SS로 변환 const formatted = sbmDt.replace( /(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/, '$1-$2-$3 $4:$5:$6' ); return (
{formatted}
) }, }, { accessorKey: "urgYn", header: ({ column }) => ( ), cell: ({ row }) => { const urgYn = row.getValue("urgYn") as string; if (urgYn === 'Y') { return (
긴급
); } return -; }, }, { accessorKey: "docSecuType", header: ({ column }) => ( ), cell: ({ row }) => { const docSecuType = row.getValue("docSecuType") as string; const getSecurityVariant = (type: string) => { switch (type) { case 'CONFIDENTIAL_STRICT': return 'destructive'; case 'CONFIDENTIAL': return 'secondary'; default: return 'outline'; } }; const getSecurityText = (type: string) => { switch (type) { case 'CONFIDENTIAL_STRICT': return '극비'; case 'CONFIDENTIAL': return '기밀'; case 'PERSONAL': return '개인'; default: return type || '개인'; } }; return (
{getSecurityText(docSecuType)}
) }, }, { accessorKey: "createdAt", header: ({ column }) => ( ), cell: ({ row }) => { return (
{formatDate(row.getValue("createdAt"))}
) }, }, { id: "actions", cell: ({ row }) => { return ( { setRowAction({ type: "view", row }); }} > ); }, enableSorting: false, enableHiding: false, size: 80, }, ] }