refactor(FE): Replace Badge with StatusBadge in uniformity views

This commit is contained in:
rstubryan
2026-01-29 14:58:09 +07:00
parent dada6a542f
commit 0e43957e6e
3 changed files with 406 additions and 460 deletions
@@ -19,6 +19,7 @@ import { isResponseSuccess } from '@/lib/api-helper';
import { type BaseApiResponse } from '@/types/api/api-general'; import { type BaseApiResponse } from '@/types/api/api-general';
import Table from '@/components/Table'; import Table from '@/components/Table';
import Badge from '@/components/Badge'; import Badge from '@/components/Badge';
import StatusBadge from '@/components/helper/StatusBadge';
import CheckboxInput from '@/components/input/CheckboxInput'; import CheckboxInput from '@/components/input/CheckboxInput';
import { useModal } from '@/components/Modal'; import { useModal } from '@/components/Modal';
import ConfirmationModal from '@/components/modal/ConfirmationModal'; import ConfirmationModal from '@/components/modal/ConfirmationModal';
@@ -45,6 +46,7 @@ import {
getStatusColor, getStatusColor,
getStatusIndicatorColor, getStatusIndicatorColor,
getStatusText, getStatusText,
getStatusBadgeColor,
} from '@/components/pages/production/uniformity/uniformity-utils'; } from '@/components/pages/production/uniformity/uniformity-utils';
import { generateUniformityPDF } from '@/components/pages/production/uniformity/export/UniformityExportPDF'; import { generateUniformityPDF } from '@/components/pages/production/uniformity/export/UniformityExportPDF';
import { generateUniformityExcel } from '@/components/pages/production/uniformity/export/UniformityExportExcel'; import { generateUniformityExcel } from '@/components/pages/production/uniformity/export/UniformityExportExcel';
@@ -832,7 +834,7 @@ const UniformityTable = () => {
}, },
cell: ({ row }) => { cell: ({ row }) => {
return ( return (
<div> <div className='w-full flex flex-row justify-center'>
<CheckboxInput <CheckboxInput
name='row' name='row'
checked={row.getIsSelected()} checked={row.getIsSelected()}
@@ -862,8 +864,11 @@ const UniformityTable = () => {
{ {
accessorKey: 'week', accessorKey: 'week',
header: 'Tanggal (Week)', header: 'Tanggal (Week)',
cell: (props) => cell: (props) => (
`${formatDate(props.row.original.applied_at, 'DD MMM YYYY')} (${props.row.original.week})`, <span className='text-nowrap'>
{`${formatDate(props.row.original.applied_at, 'DD MMM YYYY')} (${props.row.original.week})`}
</span>
),
}, },
{ {
accessorKey: 'status', accessorKey: 'status',
@@ -872,20 +877,11 @@ const UniformityTable = () => {
const uniformity = props.row.original; const uniformity = props.row.original;
const status = const status =
uniformity.latest_approval?.action ?? uniformity.status; uniformity.latest_approval?.action ?? uniformity.status;
return (
<div className='w-full'> const badgeColor = getStatusBadgeColor(status);
<Badge const statusText = getStatusText(status);
statusIndicator={true}
variant='soft' return <StatusBadge color={badgeColor} text={statusText} />;
className={{
badge: `rounded-xl w-full justify-start border border-gray-200 text-black ${getStatusColor(status)}`,
status: getStatusIndicatorColor(status),
}}
>
{getStatusText(status)}
</Badge>
</div>
);
}, },
}, },
{ {
@@ -1039,7 +1035,6 @@ const UniformityTable = () => {
</section> </section>
</div> </div>
<section className='p-3 pt-0'>
<Table<Uniformity> <Table<Uniformity>
data={isResponseSuccess(uniformities) ? uniformities?.data : []} data={isResponseSuccess(uniformities) ? uniformities?.data : []}
columns={uniformityColumns} columns={uniformityColumns}
@@ -1057,19 +1052,12 @@ const UniformityTable = () => {
rowSelection={rowSelection} rowSelection={rowSelection}
setRowSelection={setRowSelection} setRowSelection={setRowSelection}
className={{ className={{
containerClassName: cn({ containerClassName: cn('p-3 pt-0', {
'mb-20': 'mb-20':
isResponseSuccess(uniformities) && isResponseSuccess(uniformities) &&
uniformities?.data?.length === 0, uniformities?.data?.length === 0,
}), }),
tableWrapperClassName: 'overflow-x-auto min-h-full rounded-xl', headerColumnClassName: 'text-nowrap',
tableClassName: 'font-inter w-full table-auto min-h-full!',
headerRowClassName: 'border-b border-b-gray-200',
headerColumnClassName:
'px-6 py-3 text-xs font-semibold text-gray-500 last:flex last:flex-row last:justify-end',
bodyRowClassName: 'border-b border-b-gray-200',
bodyColumnClassName:
'px-6 py-3 last:flex last:flex-row last:justify-end',
}} }}
emptyContent={<UniformityTableSkeleton />} emptyContent={<UniformityTableSkeleton />}
/> />
@@ -1384,10 +1372,7 @@ const UniformityTable = () => {
{/* Error List Alert */} {/* Error List Alert */}
{formErrorList.length > 0 && ( {formErrorList.length > 0 && (
<div className='w-full px-4'> <div className='w-full px-4'>
<AlertErrorList <AlertErrorList formErrorList={formErrorList} onClose={close} />
formErrorList={formErrorList}
onClose={close}
/>
</div> </div>
)} )}
</div> </div>
@@ -1457,7 +1442,6 @@ const UniformityTable = () => {
selectedRowIds={selectedRowIds} selectedRowIds={selectedRowIds}
onClose={handleCloseFab} onClose={handleCloseFab}
/> />
</section>
</> </>
); );
}; };
@@ -10,11 +10,10 @@ import {
UniformityInfoUmum, UniformityInfoUmum,
} from '@/types/api/production/uniformity'; } from '@/types/api/production/uniformity';
import Table from '@/components/Table'; import Table from '@/components/Table';
import Badge from '@/components/Badge'; import StatusBadge from '@/components/helper/StatusBadge';
import { import {
getWeightStatusColor,
getWeightStatusIndicatorColor,
getWeightStatusText, getWeightStatusText,
getWeightStatusBadgeColor,
} from '@/components/pages/production/uniformity/uniformity-utils'; } from '@/components/pages/production/uniformity/uniformity-utils';
import { BodyWeightData } from '@/types/api/production/uniformity'; import { BodyWeightData } from '@/types/api/production/uniformity';
@@ -65,30 +64,12 @@ const UniformityDetailsPreview = ({
cell: (props) => { cell: (props) => {
const status = props.row.original.status; const status = props.row.original.status;
return status ? ( return status ? (
<div className='w-full'> <StatusBadge
<Badge color={getWeightStatusBadgeColor(status)}
statusIndicator={true} text={getWeightStatusText(status)}
variant='soft' />
className={{
badge: `rounded-xl w-full justify-start border border-gray-200 text-black ${getWeightStatusColor(status)}`,
status: getWeightStatusIndicatorColor(status),
}}
>
{getWeightStatusText(status)}
</Badge>
</div>
) : ( ) : (
<Badge <StatusBadge color='info' text='Unknown' />
statusIndicator={true}
variant='soft'
className={{
badge:
'rounded-xl w-full justify-start border border-gray-200 text-black bg-info/10',
status: 'bg-info',
}}
>
Unknown
</Badge>
); );
}, },
}, },
@@ -14,12 +14,11 @@ import { useRouter } from 'next/navigation';
import toast from 'react-hot-toast'; import toast from 'react-hot-toast';
import { UniformityApi } from '@/services/api/uniformity'; import { UniformityApi } from '@/services/api/uniformity';
import { isResponseError } from '@/lib/api-helper'; import { isResponseError } from '@/lib/api-helper';
import Badge from '@/components/Badge'; import StatusBadge from '@/components/helper/StatusBadge';
import { formatNumber } from '@/lib/helper'; import { formatNumber } from '@/lib/helper';
import { import {
getWeightStatusColor,
getWeightStatusIndicatorColor,
getWeightStatusText, getWeightStatusText,
getWeightStatusBadgeColor,
} from '@/components/pages/production/uniformity/uniformity-utils'; } from '@/components/pages/production/uniformity/uniformity-utils';
import { DetailOptionType } from '@/types/api/production/uniformity'; import { DetailOptionType } from '@/types/api/production/uniformity';
import { import {
@@ -204,30 +203,12 @@ const UniformityResultForm = () => {
cell: (props) => { cell: (props) => {
const status = props.row.original.status; const status = props.row.original.status;
return status ? ( return status ? (
<div className='w-full'> <StatusBadge
<Badge color={getWeightStatusBadgeColor(status)}
statusIndicator={true} text={getWeightStatusText(status)}
variant='soft' />
className={{
badge: `rounded-xl w-full justify-start border border-gray-200 text-black ${getWeightStatusColor(status)}`,
status: getWeightStatusIndicatorColor(status),
}}
>
{getWeightStatusText(status)}
</Badge>
</div>
) : ( ) : (
<Badge <StatusBadge color='info' text='Unknown' />
statusIndicator={true}
variant='soft'
className={{
badge:
'rounded-xl w-full justify-start border border-gray-200 text-black bg-info/10',
status: 'bg-info',
}}
>
Unknown
</Badge>
); );
}, },
}, },