import type { TableColumnsType } from 'antd'; import { Button, Table } from 'antd'; import { ReportDetail } from 'models'; import { useReportList } from 'queries/report'; import React, { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { downloadReport } from 'request/report'; import { formatPercent, ensureMin, ensureMax } from 'utils/metric-format'; const ReportTable: React.FC = () => { const { isLoading, data: reportData } = useReportList({ page_size: 100, }); const report_data: any = reportData; const navigate = useNavigate(); const [pagination, setPagination] = useState(() => ({ page: 1, page_size: 10, })); const handleDownloadReport = async (report_id: string) => { const {file, filename} = await downloadReport(report_id); const anchorElement = document.createElement('a'); anchorElement.href = URL.createObjectURL(file); anchorElement.download = filename; document.body.appendChild(anchorElement); anchorElement.click(); // Clean up document.body.removeChild(anchorElement); URL.revokeObjectURL(anchorElement.href); }; const columns: TableColumnsType = [ { title: 'ID', dataIndex: 'ID', key: 'ID', }, { title: 'Report Date', dataIndex: 'Created Date', key: 'Created Date', render: (_, record) => { return {record['Created Date'].toString().split('T')[0]}; }, width: 110, }, { title: 'Start Date', dataIndex: 'Start Date', key: 'Start Date', render: (_, record) => { return {record['Start Date'].toString().split('T')[0]}; }, width: 110, }, { title: 'End Date', dataIndex: 'End Date', key: 'End Date', render: (_, record) => { return {record['End Date'].toString().split('T')[0]}; }, width: 110, }, { title: 'Subsidiary', dataIndex: 'Subsidiary', key: 'Subsidiary', render: (_, record) => { return {String(record['Subsidiary']).toUpperCase()}; }, width: 110, }, { title: 'No. Requests', dataIndex: 'No. Requests', key: 'No. Requests', }, { title: 'Status', dataIndex: 'status', key: 'status', render: (_, record) => { return <>{record.Status}; }, }, { title: 'Purchase Date Acc', dataIndex: 'Purchase Date Acc', key: 'Purchase Date Acc', render: (_, record) => { const isAbnormal = ensureMin(record['Purchase Date Acc'], 0.95); return ( {formatPercent(record['Purchase Date Acc'])} ); }, }, { title: 'Retailer Acc', dataIndex: 'Retailer Acc', key: 'Retailer Acc', render: (_, record) => { const isAbnormal = ensureMin(record['Retailer Acc'], 0.95); return ( {formatPercent(record['Retailer Acc'])} ); }, }, { title: 'IMEI Acc', dataIndex: 'IMEI Acc', key: 'IMEI Acc', render: (_, record) => { const isAbnormal = ensureMin(record['IMEI Acc'], 0.95); return ( {record['IMEI Acc'] && formatPercent(Number(record['IMEI Acc']))} ); }, }, { title: 'Avg. Accuracy', dataIndex: 'Avg. Accuracy', key: 'Avg. Accuracy', render: (_, record) => { const isAbnormal = ensureMin(record['Avg. Accuracy'], 0.95); return ( {record['Avg. Accuracy'] && formatPercent(Number(record['Avg. Accuracy']))} ); }, }, { title: 'Avg. OCR Processing Time', dataIndex: 'Avg. OCR Processing Time', key: 'Avg. OCR Processing Time', render: (_, record) => { const isAbnormal = ensureMax(record['Avg. OCR Processing Time'], 2); return ( {record['Avg. OCR Processing Time'] && Number(record['Avg. OCR Processing Time'])?.toFixed(2)} ); }, }, { title: 'Actions', dataIndex: 'actions', key: 'actions', width: 240, render: (_, record) => { return (
); }, }, ]; return ( <> { setPagination({ page, page_size: pageSize || 10 }); }, showSizeChanger: false, }} /> ); }; export default ReportTable;