From 70d9b4d8ed605f9afa5eb63251dd9fc9707b2408 Mon Sep 17 00:00:00 2001 From: rstubryan Date: Mon, 29 Dec 2025 09:23:25 +0700 Subject: [PATCH] feat(FE-438): Add approval badge to uniformity detail --- .../uniformity/detail/UniformityDetail.tsx | 69 +++++++++++++++++-- src/types/api/uniformity/uniformity.d.ts | 1 + 2 files changed, 66 insertions(+), 4 deletions(-) diff --git a/src/components/pages/uniformity/detail/UniformityDetail.tsx b/src/components/pages/uniformity/detail/UniformityDetail.tsx index 88f1d7fa..1ba06b0f 100644 --- a/src/components/pages/uniformity/detail/UniformityDetail.tsx +++ b/src/components/pages/uniformity/detail/UniformityDetail.tsx @@ -7,9 +7,41 @@ import { ColumnDef } from '@tanstack/react-table'; import Button from '@/components/Button'; import DrawerHeader from '@/components/helper/drawer/DrawerHeader'; import Table from '@/components/Table'; +import Badge from '@/components/Badge'; import { type OptionType } from '@/components/input/SelectInput'; import RequirePermission from '@/components/helper/RequirePermission'; import { UniformityDetail as UniformityDetailType } from '@/types/api/uniformity/uniformity'; +import { formatDate } from '@/lib/helper'; + +const statusColorMap: Record = { + APPROVED: 'bg-[#00D39033]', + REJECTED: 'bg-error/10', + CREATED: 'bg-[#f3f3f4]', +}; + +const statusIndicatorColorMap: Record = { + APPROVED: 'bg-[#008000]', + REJECTED: 'bg-error', + CREATED: 'bg-[#D9D9D9]', +}; + +const statusTextMap: Record = { + APPROVED: 'Disetujui', + REJECTED: 'Ditolak', + CREATED: 'Pengajuan', +}; + +const getStatusColor = (status: string): string => { + return statusColorMap[status] || 'bg-info'; +}; + +const getStatusIndicatorColor = (status: string): string => { + return statusIndicatorColorMap[status] || 'bg-info'; +}; + +const getStatusText = (status: string): string => { + return statusTextMap[status] || status; +}; type DetailOptionType = OptionType & { id: string; @@ -59,7 +91,12 @@ const UniformityDetail: React.FC = ({ { id: 'file-name', value: 'file-name', - label: 'File Name', + label: 'File Uniformity', + }, + { + id: 'approval-status', + value: 'approval-status', + label: 'Status', }, ]; }, [initialValues]); @@ -76,16 +113,40 @@ const UniformityDetail: React.FC = ({ header: 'Value', cell: (props) => { const id = props.row.original.id; - const { info_umum } = initialValues!; + const { info_umum, latest_approval } = initialValues!; + + const statusValue = latest_approval?.action ?? '-'; const valueMap: Record = { - tanggal: info_umum.tanggal, + tanggal: formatDate(info_umum.tanggal, 'DD MMMM YYYY'), 'lokasi-farm': info_umum.lokasi_farm, 'project-flock': info_umum.project_flock, kandang: info_umum.kandang, 'file-name': info_umum.file_name, + 'approval-status': statusValue, }; + if (id === 'approval-status') { + const status = latest_approval?.action; + if (status) { + return ( +
+ + {getStatusText(status)} + +
+ ); + } + return -; + } + return {valueMap[id] || '-'}; }, }, @@ -114,7 +175,7 @@ const UniformityDetail: React.FC = ({ data={infoUmumTableData} columns={columnsInfoUmum} - pageSize={5} + pageSize={6} className={{ containerClassName: 'mb-0', paginationClassName: 'hidden', diff --git a/src/types/api/uniformity/uniformity.d.ts b/src/types/api/uniformity/uniformity.d.ts index 1cdefadb..78269ad6 100644 --- a/src/types/api/uniformity/uniformity.d.ts +++ b/src/types/api/uniformity/uniformity.d.ts @@ -63,6 +63,7 @@ export type UniformityDetail = BaseMetadata & { sampling: UniformitySampling; result: UniformityResult; uniformity_details: UniformityDetailItem[]; + latest_approval?: BaseApproval; }; // ==================== VERIFY RESPONSE ====================