From d8361be28fcb6bff6237311f2060e85bbef2da16 Mon Sep 17 00:00:00 2001 From: rstubryan Date: Wed, 28 Jan 2026 14:45:48 +0700 Subject: [PATCH 01/29] refactor(FE): Replace UniformityTable with Uniformity page --- .../pages/production/uniformity/UniformityPageWrapper.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/pages/production/uniformity/UniformityPageWrapper.tsx b/src/components/pages/production/uniformity/UniformityPageWrapper.tsx index ac14ebb5..07f313b6 100644 --- a/src/components/pages/production/uniformity/UniformityPageWrapper.tsx +++ b/src/components/pages/production/uniformity/UniformityPageWrapper.tsx @@ -3,7 +3,7 @@ import { usePathname, useRouter } from 'next/navigation'; import Drawer from '@/components/Drawer'; import React, { ReactNode } from 'react'; -import UniformityTable from '@/components/pages/production/uniformity/UniformityTable'; +import Uniformity from '@/app/production/uniformity/page'; import { useUiStore } from '@/stores/ui/ui.store'; export default function UniformityPageWrapper({ @@ -40,8 +40,8 @@ export default function UniformityPageWrapper({ return ( <> -
- +
+
Date: Wed, 28 Jan 2026 15:10:36 +0700 Subject: [PATCH 02/29] refactor(FE): Refactor Uniformity header and add filter badge --- .../production/uniformity/UniformityChart.tsx | 2 +- .../production/uniformity/UniformityTable.tsx | 177 +++++++++++++----- 2 files changed, 135 insertions(+), 44 deletions(-) diff --git a/src/components/pages/production/uniformity/UniformityChart.tsx b/src/components/pages/production/uniformity/UniformityChart.tsx index 6ddf50d3..db37c8f1 100644 --- a/src/components/pages/production/uniformity/UniformityChart.tsx +++ b/src/components/pages/production/uniformity/UniformityChart.tsx @@ -101,7 +101,7 @@ const UniformityChart = ({ const shouldShowEmptyState = !isFiltered; return ( -
+
{ [] ); + // ===== CALCULATE FILTER COUNT ===== + const filterCount = useMemo(() => { + let count = 0; + + if (filterStartDate && filterEndDate) { + count += 1; + } + + if (filterLocation) { + count += 1; + } + + if (filterProjectFlock) { + count += 1; + } + + if (filterKandang) { + count += 1; + } + + return count; + }, [ + filterStartDate, + filterEndDate, + filterLocation, + filterProjectFlock, + filterKandang, + ]); + + const isFilterActive = filterCount > 0; + return ( <> -
-
- - - -
- -
- - - - - Export +
+
+
+ + - } - align='end' - > - - - - - + +
+ +
+ + + +
+ + + Export + +
+ + +
+ + } + > + + + +
-
-
- -
- -
+
+ +
+
From 3c96855b86ac6fc9903d0ff82af790f58aa30c97 Mon Sep 17 00:00:00 2001 From: rstubryan Date: Wed, 28 Jan 2026 15:59:18 +0700 Subject: [PATCH 03/29] refactor(FE): Replace Card with section in UniformityTable --- .../pages/production/uniformity/UniformityTable.tsx | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/components/pages/production/uniformity/UniformityTable.tsx b/src/components/pages/production/uniformity/UniformityTable.tsx index d1ad7343..8b549458 100644 --- a/src/components/pages/production/uniformity/UniformityTable.tsx +++ b/src/components/pages/production/uniformity/UniformityTable.tsx @@ -1039,12 +1039,7 @@ const UniformityTable = () => { - +
data={isResponseSuccess(uniformities) ? uniformities?.data : []} columns={uniformityColumns} @@ -1457,7 +1452,7 @@ const UniformityTable = () => { selectedRowIds={selectedRowIds} onClose={handleCloseFab} /> - +
); }; From 1a800a1157a100eec925a1cb8cbebfa7cd3b24ce Mon Sep 17 00:00:00 2001 From: rstubryan Date: Wed, 28 Jan 2026 16:14:26 +0700 Subject: [PATCH 04/29] refactor(FE): Refine drawer header and uniformity form styles --- src/components/helper/drawer/DrawerHeader.tsx | 12 +++++++++--- .../uniformity/form/UniformityForm.tsx | 19 ++++++++++--------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/components/helper/drawer/DrawerHeader.tsx b/src/components/helper/drawer/DrawerHeader.tsx index f9d70a04..8bb635ae 100644 --- a/src/components/helper/drawer/DrawerHeader.tsx +++ b/src/components/helper/drawer/DrawerHeader.tsx @@ -58,6 +58,7 @@ const DrawerHeader = ({ if (leftIconOnClick) { return ( - {/* Error List Alert */} - {formErrorList.length > 0 && ( -
- -
- )} -
@@ -1387,6 +1380,18 @@ const UniformityTable = () => {
+
+ {/* Error List Alert */} + {formErrorList.length > 0 && ( +
+ +
+ )} +
+ {/* Action Buttons */}
- + No Filters Selected - + Please choose filters to narrow down your results and make your search easier. diff --git a/src/components/pages/production/uniformity/skeleton/UniformityGaugeChartSkeleton.tsx b/src/components/pages/production/uniformity/skeleton/UniformityGaugeChartSkeleton.tsx index 17ed7ee9..a72875f5 100644 --- a/src/components/pages/production/uniformity/skeleton/UniformityGaugeChartSkeleton.tsx +++ b/src/components/pages/production/uniformity/skeleton/UniformityGaugeChartSkeleton.tsx @@ -56,18 +56,19 @@ const UniformityGaugeChartSkeleton: React.FC<
-
-
- + No Filters Selected - + Please choose filters to narrow down your results and make your search easier. From 23402370b841649df23ead106e8d81b805c7e242 Mon Sep 17 00:00:00 2001 From: rstubryan Date: Thu, 29 Jan 2026 11:57:44 +0700 Subject: [PATCH 07/29] refactor(FE): Add rounded corners to uniformity components --- .../pages/production/uniformity/UniformityChart.tsx | 4 ++-- .../pages/production/uniformity/UniformityTable.tsx | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/pages/production/uniformity/UniformityChart.tsx b/src/components/pages/production/uniformity/UniformityChart.tsx index db37c8f1..a6d9833f 100644 --- a/src/components/pages/production/uniformity/UniformityChart.tsx +++ b/src/components/pages/production/uniformity/UniformityChart.tsx @@ -106,7 +106,7 @@ const UniformityChart = ({ title='Performance Overview ⓘ' variant='bordered' className={{ - wrapper: 'xl:col-span-1 2xl:col-span-3 w-full', + wrapper: 'xl:col-span-1 2xl:col-span-3 w-full rounded-xl', body: 'h-96', }} > @@ -125,7 +125,7 @@ const UniformityChart = ({ variant='bordered' title='Weekly Performance ⓘ' className={{ - wrapper: 'xl:col-span-1 2xl:col-span-1 w-full', + wrapper: 'xl:col-span-1 2xl:col-span-1 w-full rounded-xl', body: 'h-110', }} > diff --git a/src/components/pages/production/uniformity/UniformityTable.tsx b/src/components/pages/production/uniformity/UniformityTable.tsx index 86826b15..793a0fe2 100644 --- a/src/components/pages/production/uniformity/UniformityTable.tsx +++ b/src/components/pages/production/uniformity/UniformityTable.tsx @@ -1062,7 +1062,7 @@ const UniformityTable = () => { isResponseSuccess(uniformities) && uniformities?.data?.length === 0, }), - tableWrapperClassName: 'overflow-x-auto min-h-full ', + tableWrapperClassName: 'overflow-x-auto min-h-full rounded-xl', tableClassName: 'font-inter w-full table-auto min-h-full!', headerRowClassName: 'border-b border-b-gray-200', headerColumnClassName: From 2c8160f816fe49c3dcb6e98db3230c3c165be017 Mon Sep 17 00:00:00 2001 From: rstubryan Date: Thu, 29 Jan 2026 12:00:10 +0700 Subject: [PATCH 08/29] refactor(FE): Add padding to UniformityChart card bodies --- .../pages/production/uniformity/UniformityChart.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/pages/production/uniformity/UniformityChart.tsx b/src/components/pages/production/uniformity/UniformityChart.tsx index a6d9833f..84fa794b 100644 --- a/src/components/pages/production/uniformity/UniformityChart.tsx +++ b/src/components/pages/production/uniformity/UniformityChart.tsx @@ -107,7 +107,7 @@ const UniformityChart = ({ variant='bordered' className={{ wrapper: 'xl:col-span-1 2xl:col-span-3 w-full rounded-xl', - body: 'h-96', + body: 'h-96 p-4', }} >
@@ -126,7 +126,7 @@ const UniformityChart = ({ title='Weekly Performance ⓘ' className={{ wrapper: 'xl:col-span-1 2xl:col-span-1 w-full rounded-xl', - body: 'h-110', + body: 'h-110 p-4', }} > From 564d6d0da169b4f11607b21655bc5188bfb29927 Mon Sep 17 00:00:00 2001 From: rstubryan Date: Thu, 29 Jan 2026 13:58:42 +0700 Subject: [PATCH 09/29] refactor(FE): Add wrapperContent and refactor uniformity charts --- src/components/Card.tsx | 7 ++- .../production/uniformity/UniformityChart.tsx | 59 ++++++++++++------- .../skeleton/UniformityBarChartSkeleton.tsx | 2 +- 3 files changed, 44 insertions(+), 24 deletions(-) diff --git a/src/components/Card.tsx b/src/components/Card.tsx index e04fa4c7..c78766e1 100644 --- a/src/components/Card.tsx +++ b/src/components/Card.tsx @@ -22,6 +22,7 @@ export interface CardProps onCollapsedChange?: (collapsed: boolean) => void; className?: { wrapper?: string; + wrapperContent?: string; image?: string; body?: string; title?: string; @@ -144,6 +145,10 @@ const Card = ({ return cn('border-t border-base-300 mt-4 pt-4', className?.footer); }; + const getWrapperContentClasses = () => { + return cn('space-y-4', className?.wrapperContent); + }; + const renderCardContent = () => { const hasContent = children || actions || footer; @@ -177,7 +182,7 @@ const Card = ({ ); const cardContent = ( -
+
{children} {actions &&
{actions}
} {footer &&
{footer}
} diff --git a/src/components/pages/production/uniformity/UniformityChart.tsx b/src/components/pages/production/uniformity/UniformityChart.tsx index 84fa794b..0033e957 100644 --- a/src/components/pages/production/uniformity/UniformityChart.tsx +++ b/src/components/pages/production/uniformity/UniformityChart.tsx @@ -5,6 +5,7 @@ import UniformityGaugeChart from '@/components/pages/production/uniformity/chart import UniformityBarChartSkeleton from '@/components/pages/production/uniformity/skeleton/UniformityBarChartSkeleton'; import UniformityGaugeChartSkeleton from '@/components/pages/production/uniformity/skeleton/UniformityGaugeChartSkeleton'; import { Uniformity, type ChartData } from '@/types/api/production/uniformity'; +import { Icon } from '@iconify/react'; interface UniformityChartProps { uniformityData?: Uniformity | null; @@ -103,13 +104,23 @@ const UniformityChart = ({ return (
+
+
+ Performance Overview{' '} + +
+
{shouldShowEmptyState || !uniformityData || @@ -120,26 +131,30 @@ const UniformityChart = ({ )}
- {shouldShowEmptyState || !uniformityData || !gaugeChartData ? ( - + +
+
+ Weekly Performance{' '} + +
+
+ {shouldShowEmptyState || !uniformityData || !gaugeChartData ? ( -
- ) : ( - + ) : ( - - )} + )} +
); }; diff --git a/src/components/pages/production/uniformity/skeleton/UniformityBarChartSkeleton.tsx b/src/components/pages/production/uniformity/skeleton/UniformityBarChartSkeleton.tsx index 91c7c72d..b9d90dd9 100644 --- a/src/components/pages/production/uniformity/skeleton/UniformityBarChartSkeleton.tsx +++ b/src/components/pages/production/uniformity/skeleton/UniformityBarChartSkeleton.tsx @@ -90,7 +90,7 @@ const EmptyState = () => { const UniformityBarChartSkeleton = () => { return ( -
+
From 9817864c3ddfd6853cb0534263c7d9e86ef82746 Mon Sep 17 00:00:00 2001 From: rstubryan Date: Thu, 29 Jan 2026 14:04:35 +0700 Subject: [PATCH 10/29] refactor(FE): Reduce UniformityBarChartSkeleton min height --- .../uniformity/skeleton/UniformityBarChartSkeleton.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/pages/production/uniformity/skeleton/UniformityBarChartSkeleton.tsx b/src/components/pages/production/uniformity/skeleton/UniformityBarChartSkeleton.tsx index b9d90dd9..fe7f9aff 100644 --- a/src/components/pages/production/uniformity/skeleton/UniformityBarChartSkeleton.tsx +++ b/src/components/pages/production/uniformity/skeleton/UniformityBarChartSkeleton.tsx @@ -90,7 +90,7 @@ const EmptyState = () => { const UniformityBarChartSkeleton = () => { return ( -
+
From 1ed83351e0ef1fd6e01ef472f1c139c382421a17 Mon Sep 17 00:00:00 2001 From: rstubryan Date: Thu, 29 Jan 2026 14:09:38 +0700 Subject: [PATCH 11/29] refacto(FE): Refine UniformityTableSkeleton styles and icon --- .../skeleton/UniformityTableSkeleton.tsx | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/components/pages/production/uniformity/skeleton/UniformityTableSkeleton.tsx b/src/components/pages/production/uniformity/skeleton/UniformityTableSkeleton.tsx index b90048a1..79f0117e 100644 --- a/src/components/pages/production/uniformity/skeleton/UniformityTableSkeleton.tsx +++ b/src/components/pages/production/uniformity/skeleton/UniformityTableSkeleton.tsx @@ -3,19 +3,20 @@ import { Icon } from '@iconify/react'; const UniformityTableSkeleton = () => { return ( -
-
-
- + No Data Available - + There is no uniformity data displayed. Enter uniformity check data to get started. From 4452b6fd03dcd9799ffca158ad52acd6ace3bd02 Mon Sep 17 00:00:00 2001 From: rstubryan Date: Thu, 29 Jan 2026 14:10:36 +0700 Subject: [PATCH 12/29] refactor(FE): Add spacing to UniformityTableSkeleton --- .../production/uniformity/skeleton/UniformityTableSkeleton.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/pages/production/uniformity/skeleton/UniformityTableSkeleton.tsx b/src/components/pages/production/uniformity/skeleton/UniformityTableSkeleton.tsx index 79f0117e..08c1e0b5 100644 --- a/src/components/pages/production/uniformity/skeleton/UniformityTableSkeleton.tsx +++ b/src/components/pages/production/uniformity/skeleton/UniformityTableSkeleton.tsx @@ -3,7 +3,7 @@ import { Icon } from '@iconify/react'; const UniformityTableSkeleton = () => { return ( -
+
{/* Form Section */} -
-
+
{verifyUniformityResult ? (
diff --git a/src/components/pages/production/uniformity/form/UniformityResultForm.tsx b/src/components/pages/production/uniformity/form/UniformityResultForm.tsx index df144c64..103fc791 100644 --- a/src/components/pages/production/uniformity/form/UniformityResultForm.tsx +++ b/src/components/pages/production/uniformity/form/UniformityResultForm.tsx @@ -241,23 +241,24 @@ const UniformityResultForm = () => { {/* Form Section */} -
-
+
{verifyUniformityResult ? (
-

Sampling and Range

+

+ Sampling and Range +

data={samplingTableData} columns={columnsSampling} @@ -270,7 +271,9 @@ const UniformityResultForm = () => {
-

Result

+

+ Result +

data={resultTableData} columns={resultColumns} From d9a1d340bb8ca04fa5cf3257ccd6f5286635c517 Mon Sep 17 00:00:00 2001 From: rstubryan Date: Thu, 29 Jan 2026 14:32:52 +0700 Subject: [PATCH 14/29] refactor(FE): Reduce vertical spacing in Uniformity components --- .../pages/production/uniformity/UniformityTable.tsx | 4 ++-- .../pages/production/uniformity/form/UniformityForm.tsx | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/pages/production/uniformity/UniformityTable.tsx b/src/components/pages/production/uniformity/UniformityTable.tsx index 793a0fe2..be133c7c 100644 --- a/src/components/pages/production/uniformity/UniformityTable.tsx +++ b/src/components/pages/production/uniformity/UniformityTable.tsx @@ -1274,8 +1274,8 @@ const UniformityTable = () => {
-
-
+
+
- + Date: Thu, 29 Jan 2026 14:57:25 +0700 Subject: [PATCH 15/29] refactor(FE): Add badge color helpers for status and weight --- .../production/uniformity/uniformity-utils.ts | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/components/pages/production/uniformity/uniformity-utils.ts b/src/components/pages/production/uniformity/uniformity-utils.ts index 340bb555..1b513de4 100644 --- a/src/components/pages/production/uniformity/uniformity-utils.ts +++ b/src/components/pages/production/uniformity/uniformity-utils.ts @@ -25,6 +25,20 @@ export const getWeightStatusText = (status: string): string => { return weightStatusTextMap[status] || status; }; +export const weightStatusBadgeColorMap: Record< + string, + 'success' | 'error' | 'neutral' | 'info' +> = { + ideal: 'success', + outside: 'error', +}; + +export const getWeightStatusBadgeColor = ( + status: string +): 'success' | 'error' | 'neutral' | 'info' => { + return weightStatusBadgeColorMap[status] || 'neutral'; +}; + export const statusColorMap: Record = { APPROVED: 'bg-[#00D39033]', Disetujui: 'bg-[#00D39033]', @@ -63,3 +77,29 @@ export const getStatusIndicatorColor = (status: string): string => { export const getStatusText = (status: string): string => { return statusTextMap[status] || status; }; + +export const statusBadgeColorMap: Record< + string, + 'success' | 'error' | 'neutral' | 'info' +> = { + APPROVED: 'success', + Disetujui: 'success', + approved: 'success', + disetujui: 'success', + REJECTED: 'error', + Ditolak: 'error', + rejected: 'error', + ditolak: 'error', + CREATED: 'neutral', + Pengajuan: 'neutral', + created: 'neutral', + pengajuan: 'neutral', + PENDING: 'neutral', + pending: 'neutral', +}; + +export const getStatusBadgeColor = ( + status: string +): 'success' | 'error' | 'neutral' | 'info' => { + return statusBadgeColorMap[status] || 'neutral'; +}; From 0e43957e6ea2bc9d735a35a792f3430a1808cdf7 Mon Sep 17 00:00:00 2001 From: rstubryan Date: Thu, 29 Jan 2026 14:58:09 +0700 Subject: [PATCH 16/29] refactor(FE): Replace Badge with StatusBadge in uniformity views --- .../production/uniformity/UniformityTable.tsx | 800 +++++++++--------- .../detail/UniformityDetailsPreview.tsx | 33 +- .../uniformity/form/UniformityResultForm.tsx | 33 +- 3 files changed, 406 insertions(+), 460 deletions(-) diff --git a/src/components/pages/production/uniformity/UniformityTable.tsx b/src/components/pages/production/uniformity/UniformityTable.tsx index be133c7c..6cf28f02 100644 --- a/src/components/pages/production/uniformity/UniformityTable.tsx +++ b/src/components/pages/production/uniformity/UniformityTable.tsx @@ -19,6 +19,7 @@ import { isResponseSuccess } from '@/lib/api-helper'; import { type BaseApiResponse } from '@/types/api/api-general'; import Table from '@/components/Table'; import Badge from '@/components/Badge'; +import StatusBadge from '@/components/helper/StatusBadge'; import CheckboxInput from '@/components/input/CheckboxInput'; import { useModal } from '@/components/Modal'; import ConfirmationModal from '@/components/modal/ConfirmationModal'; @@ -45,6 +46,7 @@ import { getStatusColor, getStatusIndicatorColor, getStatusText, + getStatusBadgeColor, } from '@/components/pages/production/uniformity/uniformity-utils'; import { generateUniformityPDF } from '@/components/pages/production/uniformity/export/UniformityExportPDF'; import { generateUniformityExcel } from '@/components/pages/production/uniformity/export/UniformityExportExcel'; @@ -832,7 +834,7 @@ const UniformityTable = () => { }, cell: ({ row }) => { return ( -
+
{ { accessorKey: 'week', header: 'Tanggal (Week)', - cell: (props) => - `${formatDate(props.row.original.applied_at, 'DD MMM YYYY')} (${props.row.original.week})`, + cell: (props) => ( + + {`${formatDate(props.row.original.applied_at, 'DD MMM YYYY')} (${props.row.original.week})`} + + ), }, { accessorKey: 'status', @@ -872,20 +877,11 @@ const UniformityTable = () => { const uniformity = props.row.original; const status = uniformity.latest_approval?.action ?? uniformity.status; - return ( -
- - {getStatusText(status)} - -
- ); + + const badgeColor = getStatusBadgeColor(status); + const statusText = getStatusText(status); + + return ; }, }, { @@ -1039,425 +1035,413 @@ const UniformityTable = () => {
-
- - data={isResponseSuccess(uniformities) ? uniformities?.data : []} - columns={uniformityColumns} - pageSize={tableFilterState.pageSize} - page={isResponseSuccess(uniformities) ? uniformities?.meta?.page : 0} - totalItems={ - isResponseSuccess(uniformities) - ? uniformities?.meta?.total_results - : 0 - } - onPageChange={setPage} - isLoading={isLoading} - sorting={sorting} - setSorting={setSorting} - rowSelection={rowSelection} - setRowSelection={setRowSelection} - className={{ - containerClassName: cn({ - 'mb-20': - isResponseSuccess(uniformities) && - uniformities?.data?.length === 0, - }), - tableWrapperClassName: 'overflow-x-auto min-h-full rounded-xl', - 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={} - /> + + data={isResponseSuccess(uniformities) ? uniformities?.data : []} + columns={uniformityColumns} + pageSize={tableFilterState.pageSize} + page={isResponseSuccess(uniformities) ? uniformities?.meta?.page : 0} + totalItems={ + isResponseSuccess(uniformities) + ? uniformities?.meta?.total_results + : 0 + } + onPageChange={setPage} + isLoading={isLoading} + sorting={sorting} + setSorting={setSorting} + rowSelection={rowSelection} + setRowSelection={setRowSelection} + className={{ + containerClassName: cn('p-3 pt-0', { + 'mb-20': + isResponseSuccess(uniformities) && + uniformities?.data?.length === 0, + }), + headerColumnClassName: 'text-nowrap', + }} + emptyContent={} + /> - -
- {createdUniformity ? ( - - ) : selectedRowIds.length === 1 ? ( - - ) : ( -
- {selectedRowIds.length} data dipilih -
- )} -
-
- - -
- -
-
- - -
- {selectedRowIds.length === 1 ? ( - - ) : ( -
- {selectedRowIds.length} data dipilih -
- )} -
-
- - -
- -
-
- - -
- {selectedRowIds.length === 1 ? ( - - ) : ( -
- {selectedRowIds.length} data dipilih -
- )} -
-
- - -
- {selectedRowIds.length === 1 ? ( - - ) : ( -
- {selectedRowIds.length} data dipilih -
- )} -
-
- - {/* Filter Modal */} - -
- {/* Modal Header */} -
-
- -

Filter Data

-
- + +
+ {createdUniformity ? ( + + ) : selectedRowIds.length === 1 ? ( + + ) : ( +
+ {selectedRowIds.length} data dipilih
+ )} +
+
-
-
-
- -
+ +
+ +
+
-
- -
-
+ +
+ {selectedRowIds.length === 1 ? ( + + ) : ( +
+ {selectedRowIds.length} data dipilih +
+ )} +
+
+ +
+ +
+
+ + +
+ {selectedRowIds.length === 1 ? ( + + ) : ( +
+ {selectedRowIds.length} data dipilih +
+ )} +
+
+ + +
+ {selectedRowIds.length === 1 ? ( + + ) : ( +
+ {selectedRowIds.length} data dipilih +
+ )} +
+
+ + {/* Filter Modal */} + +
+ {/* Modal Header */} +
+
+ +

Filter Data

+
+ +
+ +
+
- { - handleFilterLocationChange(value); - }} - options={filterLocationOptions} - onInputChange={setFilterLocationInputValue} - isLoading={isLoadingFilterLocations} - onMenuScrollToBottom={loadMoreFilterLocations} + label='Tanggal mulai' + name='start_date' + value={filterFormik.values.start_date} + onChange={handleFilterStartDateChange} + onBlur={filterFormik.handleBlur} isError={ - filterFormik.touched.location && - Boolean(filterFormik.errors.location) + filterFormik.touched.start_date && + Boolean(filterFormik.errors.start_date) } - errorMessage={filterFormik.errors.location} - isClearable + errorMessage={filterFormik.errors.start_date} className={{ wrapper: 'w-full' }} />
- { - handleFilterProjectFlockChange(value); - }} - options={filterProjectFlockOptions} - onInputChange={setFilterProjectFlockSearchValue} - isLoading={isLoadingFilterProjectFlocks} - onMenuScrollToBottom={loadMoreFilterProjectFlocks} - isDisabled={!filterFormik.values.location} + label='Tanggal akhir' + name='end_date' + value={filterFormik.values.end_date} + onChange={handleFilterEndDateChange} + onBlur={filterFormik.handleBlur} isError={ - filterFormik.touched.project_flock && - Boolean(filterFormik.errors.project_flock) + filterFormik.touched.end_date && + Boolean(filterFormik.errors.end_date) } - errorMessage={filterFormik.errors.project_flock} - isClearable - className={{ wrapper: 'w-full' }} - /> -
- -
- { - handleFilterKandangChange(value); - }} - options={filterKandangOptions} - isDisabled={!filterFormik.values.project_flock} - isError={ - filterFormik.touched.kandang && - Boolean(filterFormik.errors.kandang) - } - errorMessage={filterFormik.errors.kandang} - isClearable + errorMessage={filterFormik.errors.end_date} className={{ wrapper: 'w-full' }} />
-
- {/* Error List Alert */} - {formErrorList.length > 0 && ( -
- -
- )} +
+ { + handleFilterLocationChange(value); + }} + options={filterLocationOptions} + onInputChange={setFilterLocationInputValue} + isLoading={isLoadingFilterLocations} + onMenuScrollToBottom={loadMoreFilterLocations} + isError={ + filterFormik.touched.location && + Boolean(filterFormik.errors.location) + } + errorMessage={filterFormik.errors.location} + isClearable + className={{ wrapper: 'w-full' }} + />
- {/* Action Buttons */} -
- - +
+ { + handleFilterProjectFlockChange(value); + }} + options={filterProjectFlockOptions} + onInputChange={setFilterProjectFlockSearchValue} + isLoading={isLoadingFilterProjectFlocks} + onMenuScrollToBottom={loadMoreFilterProjectFlocks} + isDisabled={!filterFormik.values.location} + isError={ + filterFormik.touched.project_flock && + Boolean(filterFormik.errors.project_flock) + } + errorMessage={filterFormik.errors.project_flock} + isClearable + className={{ wrapper: 'w-full' }} + /> +
+ +
+ { + handleFilterKandangChange(value); + }} + options={filterKandangOptions} + isDisabled={!filterFormik.values.project_flock} + isError={ + filterFormik.touched.kandang && + Boolean(filterFormik.errors.kandang) + } + errorMessage={filterFormik.errors.kandang} + isClearable + className={{ wrapper: 'w-full' }} + />
- - {/* Floating Actions Button */} - + {/* Error List Alert */} + {formErrorList.length > 0 && ( +
+ +
+ )} +
+ + {/* Action Buttons */} +
+ + +
+
+ + + {/* Floating Actions Button */} + -
+ permissions: 'lti.production.uniformity.detail', + }, + { + action: 'DELETE', + icon: 'mdi:delete-outline', + label: 'Delete', + hidden: selectedRowIds.length !== 1, + onClick: handleDelete, + permissions: 'lti.production.uniformity.delete', + }, + ]} + approvals={[ + { + action: 'APPROVED', + icon: 'mdi:check-circle-outline', + label: 'Approve', + onClick: handleBulkApprove, + permissions: 'lti.production.uniformity.approve', + disabled: !canApproveReject, + }, + { + action: 'REJECTED', + icon: 'mdi:close-circle-outline', + label: 'Reject', + onClick: handleBulkReject, + permissions: 'lti.production.uniformity.approve', + disabled: !canApproveReject, + }, + ]} + selectedRowIds={selectedRowIds} + onClose={handleCloseFab} + /> ); }; diff --git a/src/components/pages/production/uniformity/detail/UniformityDetailsPreview.tsx b/src/components/pages/production/uniformity/detail/UniformityDetailsPreview.tsx index 9188ba59..8d38d669 100644 --- a/src/components/pages/production/uniformity/detail/UniformityDetailsPreview.tsx +++ b/src/components/pages/production/uniformity/detail/UniformityDetailsPreview.tsx @@ -10,11 +10,10 @@ import { UniformityInfoUmum, } from '@/types/api/production/uniformity'; import Table from '@/components/Table'; -import Badge from '@/components/Badge'; +import StatusBadge from '@/components/helper/StatusBadge'; import { - getWeightStatusColor, - getWeightStatusIndicatorColor, getWeightStatusText, + getWeightStatusBadgeColor, } from '@/components/pages/production/uniformity/uniformity-utils'; import { BodyWeightData } from '@/types/api/production/uniformity'; @@ -65,30 +64,12 @@ const UniformityDetailsPreview = ({ cell: (props) => { const status = props.row.original.status; return status ? ( -
- - {getWeightStatusText(status)} - -
+ ) : ( - - Unknown - + ); }, }, diff --git a/src/components/pages/production/uniformity/form/UniformityResultForm.tsx b/src/components/pages/production/uniformity/form/UniformityResultForm.tsx index 103fc791..5963df8a 100644 --- a/src/components/pages/production/uniformity/form/UniformityResultForm.tsx +++ b/src/components/pages/production/uniformity/form/UniformityResultForm.tsx @@ -14,12 +14,11 @@ import { useRouter } from 'next/navigation'; import toast from 'react-hot-toast'; import { UniformityApi } from '@/services/api/uniformity'; import { isResponseError } from '@/lib/api-helper'; -import Badge from '@/components/Badge'; +import StatusBadge from '@/components/helper/StatusBadge'; import { formatNumber } from '@/lib/helper'; import { - getWeightStatusColor, - getWeightStatusIndicatorColor, getWeightStatusText, + getWeightStatusBadgeColor, } from '@/components/pages/production/uniformity/uniformity-utils'; import { DetailOptionType } from '@/types/api/production/uniformity'; import { @@ -204,30 +203,12 @@ const UniformityResultForm = () => { cell: (props) => { const status = props.row.original.status; return status ? ( -
- - {getWeightStatusText(status)} - -
+ ) : ( - - Unknown - + ); }, }, From b8031448ff33ae173d45ce6bcae728a8372b1eda Mon Sep 17 00:00:00 2001 From: rstubryan Date: Thu, 29 Jan 2026 15:24:30 +0700 Subject: [PATCH 17/29] refactor(FE): Adjust checkbox alignment and column padding --- .../pages/production/uniformity/UniformityTable.tsx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/components/pages/production/uniformity/UniformityTable.tsx b/src/components/pages/production/uniformity/UniformityTable.tsx index 6cf28f02..bf482edc 100644 --- a/src/components/pages/production/uniformity/UniformityTable.tsx +++ b/src/components/pages/production/uniformity/UniformityTable.tsx @@ -821,7 +821,7 @@ const UniformityTable = () => { ); return ( -
+
{ }, cell: ({ row }) => { return ( -
+
{ isResponseSuccess(uniformities) && uniformities?.data?.length === 0, }), - headerColumnClassName: 'text-nowrap', + headerColumnClassName: + 'first:pl-3 first:pr-0 xl:first:pl-3 py-3 text-nowrap', + bodyColumnClassName: + 'first:pl-3 first:pr-0 xl:first:pl-3 py-3 text-nowrap', }} emptyContent={} /> From e93a9c801181ce6b6e5940dd403ebebbb457ee32 Mon Sep 17 00:00:00 2001 From: rstubryan Date: Thu, 29 Jan 2026 15:33:00 +0700 Subject: [PATCH 18/29] refactor(FE): Add divider above Next button in UniformityForm --- .../uniformity/form/UniformityForm.tsx | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/src/components/pages/production/uniformity/form/UniformityForm.tsx b/src/components/pages/production/uniformity/form/UniformityForm.tsx index 341c29a1..257de339 100644 --- a/src/components/pages/production/uniformity/form/UniformityForm.tsx +++ b/src/components/pages/production/uniformity/form/UniformityForm.tsx @@ -757,20 +757,23 @@ const UniformityForm = ({
{!isNextStep && ( - - - + <> +
+ + + + )}
From 6c6634fa1d001c3c5bd8050e7d63e00320932804 Mon Sep 17 00:00:00 2001 From: rstubryan Date: Thu, 29 Jan 2026 15:35:32 +0700 Subject: [PATCH 19/29] refactor(FE): Rename column header 'No' to 'Number' --- .../production/uniformity/detail/UniformityDetailsPreview.tsx | 2 +- .../pages/production/uniformity/form/UniformityPreviewForm.tsx | 2 +- .../pages/production/uniformity/form/UniformityResultForm.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/pages/production/uniformity/detail/UniformityDetailsPreview.tsx b/src/components/pages/production/uniformity/detail/UniformityDetailsPreview.tsx index 8d38d669..04c43a02 100644 --- a/src/components/pages/production/uniformity/detail/UniformityDetailsPreview.tsx +++ b/src/components/pages/production/uniformity/detail/UniformityDetailsPreview.tsx @@ -50,7 +50,7 @@ const UniformityDetailsPreview = ({ () => [ { accessorKey: 'number', - header: 'No', + header: 'Number', cell: (props) => props.row.original.number, }, { diff --git a/src/components/pages/production/uniformity/form/UniformityPreviewForm.tsx b/src/components/pages/production/uniformity/form/UniformityPreviewForm.tsx index 8cac641a..314eabfd 100644 --- a/src/components/pages/production/uniformity/form/UniformityPreviewForm.tsx +++ b/src/components/pages/production/uniformity/form/UniformityPreviewForm.tsx @@ -50,7 +50,7 @@ const UniformityPreviewForm = () => { () => [ { accessorKey: 'number', - header: 'No', + header: 'Number', cell: (props) => props.row.original.number, }, { diff --git a/src/components/pages/production/uniformity/form/UniformityResultForm.tsx b/src/components/pages/production/uniformity/form/UniformityResultForm.tsx index 5963df8a..98db02fc 100644 --- a/src/components/pages/production/uniformity/form/UniformityResultForm.tsx +++ b/src/components/pages/production/uniformity/form/UniformityResultForm.tsx @@ -189,7 +189,7 @@ const UniformityResultForm = () => { () => [ { accessorKey: 'number', - header: 'No', + header: 'Number', cell: (props) => props.row.original.number, }, { From aab8e0c5ce709f01d54664e6dbafb0e9bbeefcef Mon Sep 17 00:00:00 2001 From: rstubryan Date: Thu, 29 Jan 2026 15:37:53 +0700 Subject: [PATCH 20/29] refactor(FE): Remove unused imports and accessorKey props --- .../pages/production/uniformity/UniformityTable.tsx | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/components/pages/production/uniformity/UniformityTable.tsx b/src/components/pages/production/uniformity/UniformityTable.tsx index bf482edc..d45cb217 100644 --- a/src/components/pages/production/uniformity/UniformityTable.tsx +++ b/src/components/pages/production/uniformity/UniformityTable.tsx @@ -24,7 +24,6 @@ import CheckboxInput from '@/components/input/CheckboxInput'; import { useModal } from '@/components/Modal'; import ConfirmationModal from '@/components/modal/ConfirmationModal'; import toast from 'react-hot-toast'; -import Card from '@/components/Card'; import UniformityTableSkeleton from '@/components/pages/production/uniformity/skeleton/UniformityTableSkeleton'; import RequirePermission from '@/components/helper/RequirePermission'; import { useUniformityStore } from '@/stores/uniformity/uniformity.store'; @@ -51,8 +50,6 @@ import { import { generateUniformityPDF } from '@/components/pages/production/uniformity/export/UniformityExportPDF'; import { generateUniformityExcel } from '@/components/pages/production/uniformity/export/UniformityExportExcel'; import Dropdown from '@/components/Dropdown'; -import Menu from '@/components/menu/Menu'; -import MenuItem from '@/components/menu/MenuItem'; import { useFormik } from 'formik'; import { UniformityTableFilterSchema, @@ -115,12 +112,10 @@ const UniformityConfirmationPreview = ({ const columns: ColumnDef[] = [ { - accessorKey: 'label', header: 'Label', cell: (props) => props.row.original.label, }, { - accessorKey: 'value', header: 'Value', cell: (props) => { const id = props.row.original.id; From db33247d6c3bb2b9e349bd8bda72121df2782238 Mon Sep 17 00:00:00 2001 From: rstubryan Date: Thu, 29 Jan 2026 15:41:05 +0700 Subject: [PATCH 21/29] refactor(FE): Use English copy for bulk reject modal --- src/components/pages/production/uniformity/UniformityTable.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/pages/production/uniformity/UniformityTable.tsx b/src/components/pages/production/uniformity/UniformityTable.tsx index d45cb217..018e2537 100644 --- a/src/components/pages/production/uniformity/UniformityTable.tsx +++ b/src/components/pages/production/uniformity/UniformityTable.tsx @@ -1209,7 +1209,8 @@ const UniformityTable = () => { ref={bulkRejectModal.ref} type='error' iconPosition='left' - text={`Apakah anda yakin ingin menolak ${selectedRowIds.length} data Uniformity yang dipilih?`} + text={`Reject This Submission?`} + subtitleText={`Are you sure you want to reject this submission? (${selectedRowIds.length} data)`} secondaryButton={{ text: 'Cancel', }} From a51a020dfa7ae08802a4e83b966c8c7915d4bee8 Mon Sep 17 00:00:00 2001 From: rstubryan Date: Thu, 29 Jan 2026 17:07:56 +0700 Subject: [PATCH 22/29] refactor(FE): Replace Button with static icon tiles in skeletons --- .../skeleton/UniformityBarChartSkeleton.tsx | 37 +++++++++++-------- .../skeleton/UniformityGaugeChartSkeleton.tsx | 33 ++++++++++------- .../skeleton/UniformityTableSkeleton.tsx | 33 ++++++++++------- 3 files changed, 59 insertions(+), 44 deletions(-) diff --git a/src/components/pages/production/uniformity/skeleton/UniformityBarChartSkeleton.tsx b/src/components/pages/production/uniformity/skeleton/UniformityBarChartSkeleton.tsx index fe7f9aff..8d5994b2 100644 --- a/src/components/pages/production/uniformity/skeleton/UniformityBarChartSkeleton.tsx +++ b/src/components/pages/production/uniformity/skeleton/UniformityBarChartSkeleton.tsx @@ -1,4 +1,3 @@ -import Button from '@/components/Button'; import { Icon } from '@iconify/react'; const LeftLegend = () => { @@ -65,26 +64,32 @@ const ChartArea = () => { const EmptyState = () => { return ( - <> -
-
- +
+
+ {/* Filter icon */} +
+
+
+ +
+
- + + {/* Empty state text */} +

No Filters Selected - - +

+

Please choose filters to narrow down your results and make your search easier. - +

- +
); }; diff --git a/src/components/pages/production/uniformity/skeleton/UniformityGaugeChartSkeleton.tsx b/src/components/pages/production/uniformity/skeleton/UniformityGaugeChartSkeleton.tsx index a72875f5..f49ebc85 100644 --- a/src/components/pages/production/uniformity/skeleton/UniformityGaugeChartSkeleton.tsx +++ b/src/components/pages/production/uniformity/skeleton/UniformityGaugeChartSkeleton.tsx @@ -1,4 +1,3 @@ -import Button from '@/components/Button'; import { Icon } from '@iconify/react'; import React from 'react'; import { Cell, Pie, PieChart, ResponsiveContainer } from 'recharts'; @@ -55,23 +54,29 @@ const UniformityGaugeChartSkeleton: React.FC< -
-
- +
+ {/* Filter icon */} +
+
+
+ +
+
- + + {/* Empty state text */} +

No Filters Selected - - +

+

Please choose filters to narrow down your results and make your search easier. - +

diff --git a/src/components/pages/production/uniformity/skeleton/UniformityTableSkeleton.tsx b/src/components/pages/production/uniformity/skeleton/UniformityTableSkeleton.tsx index 08c1e0b5..f70b23e1 100644 --- a/src/components/pages/production/uniformity/skeleton/UniformityTableSkeleton.tsx +++ b/src/components/pages/production/uniformity/skeleton/UniformityTableSkeleton.tsx @@ -1,25 +1,30 @@ -import Button from '@/components/Button'; import { Icon } from '@iconify/react'; const UniformityTableSkeleton = () => { return ( -
-
- +
+ {/* Document icon */} +
+
+
+ +
+
- + + {/* Empty state text */} +

No Data Available - - +

+

There is no uniformity data displayed. Enter uniformity check data to get started. - +

); }; From fc81fa9ad3f1f1740ec3ce6e3666d6856a1a39f2 Mon Sep 17 00:00:00 2001 From: rstubryan Date: Fri, 30 Jan 2026 09:22:52 +0700 Subject: [PATCH 23/29] refactor(FE): Fix bg class syntax in uniformity skeletons --- .../uniformity/skeleton/UniformityBarChartSkeleton.tsx | 2 +- .../uniformity/skeleton/UniformityGaugeChartSkeleton.tsx | 2 +- .../production/uniformity/skeleton/UniformityTableSkeleton.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/pages/production/uniformity/skeleton/UniformityBarChartSkeleton.tsx b/src/components/pages/production/uniformity/skeleton/UniformityBarChartSkeleton.tsx index 8d5994b2..27e50c2c 100644 --- a/src/components/pages/production/uniformity/skeleton/UniformityBarChartSkeleton.tsx +++ b/src/components/pages/production/uniformity/skeleton/UniformityBarChartSkeleton.tsx @@ -68,7 +68,7 @@ const EmptyState = () => {
{/* Filter icon */}
-
+
{/* Filter icon */}
-
+
{
{/* Document icon */}
-
+
Date: Fri, 30 Jan 2026 09:38:38 +0700 Subject: [PATCH 24/29] refactor(FE): Use text-base for UniformityChart headings --- .../pages/production/uniformity/UniformityChart.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/pages/production/uniformity/UniformityChart.tsx b/src/components/pages/production/uniformity/UniformityChart.tsx index 0033e957..3f4a9781 100644 --- a/src/components/pages/production/uniformity/UniformityChart.tsx +++ b/src/components/pages/production/uniformity/UniformityChart.tsx @@ -111,7 +111,7 @@ const UniformityChart = ({ }} >
-
+
Performance Overview{' '}
-
+
Weekly Performance{' '} Date: Fri, 30 Jan 2026 09:46:10 +0700 Subject: [PATCH 25/29] refactor(FE): Adjust 2xl grid layout in UniformityChart --- .../pages/production/uniformity/UniformityChart.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/pages/production/uniformity/UniformityChart.tsx b/src/components/pages/production/uniformity/UniformityChart.tsx index 3f4a9781..2eb17548 100644 --- a/src/components/pages/production/uniformity/UniformityChart.tsx +++ b/src/components/pages/production/uniformity/UniformityChart.tsx @@ -102,11 +102,11 @@ const UniformityChart = ({ const shouldShowEmptyState = !isFiltered; return ( -
+
@@ -134,7 +134,7 @@ const UniformityChart = ({ Date: Fri, 30 Jan 2026 09:56:30 +0700 Subject: [PATCH 26/29] refactor(FE): Make UniformityBarChartSkeleton more responsive --- .../uniformity/skeleton/UniformityBarChartSkeleton.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/pages/production/uniformity/skeleton/UniformityBarChartSkeleton.tsx b/src/components/pages/production/uniformity/skeleton/UniformityBarChartSkeleton.tsx index 27e50c2c..3ce40a3a 100644 --- a/src/components/pages/production/uniformity/skeleton/UniformityBarChartSkeleton.tsx +++ b/src/components/pages/production/uniformity/skeleton/UniformityBarChartSkeleton.tsx @@ -44,11 +44,11 @@ const ChartArea = () => { ))}
-
+
{ranges.map((range) => (
))}
From 27ab373ebbb360488bb5c15156e3ea2b298e4b65 Mon Sep 17 00:00:00 2001 From: rstubryan Date: Fri, 30 Jan 2026 10:14:13 +0700 Subject: [PATCH 27/29] refactor(FE): Add subtle border to UniformityChart cards --- .../pages/production/uniformity/UniformityChart.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/pages/production/uniformity/UniformityChart.tsx b/src/components/pages/production/uniformity/UniformityChart.tsx index 2eb17548..91f7a3fe 100644 --- a/src/components/pages/production/uniformity/UniformityChart.tsx +++ b/src/components/pages/production/uniformity/UniformityChart.tsx @@ -106,7 +106,7 @@ const UniformityChart = ({ @@ -134,7 +134,7 @@ const UniformityChart = ({ Date: Fri, 30 Jan 2026 10:15:07 +0700 Subject: [PATCH 28/29] refactor(FE): Add border class to UniformityChart cards --- .../pages/production/uniformity/UniformityChart.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/components/pages/production/uniformity/UniformityChart.tsx b/src/components/pages/production/uniformity/UniformityChart.tsx index 91f7a3fe..8c9eab84 100644 --- a/src/components/pages/production/uniformity/UniformityChart.tsx +++ b/src/components/pages/production/uniformity/UniformityChart.tsx @@ -106,7 +106,8 @@ const UniformityChart = ({ @@ -134,7 +135,8 @@ const UniformityChart = ({ Date: Fri, 30 Jan 2026 10:37:11 +0700 Subject: [PATCH 29/29] refactor(FE): Refactor filter modal into form and adjust UI --- .../production/uniformity/UniformityTable.tsx | 238 +++++++++--------- 1 file changed, 120 insertions(+), 118 deletions(-) diff --git a/src/components/pages/production/uniformity/UniformityTable.tsx b/src/components/pages/production/uniformity/UniformityTable.tsx index 018e2537..e9405dd6 100644 --- a/src/components/pages/production/uniformity/UniformityTable.tsx +++ b/src/components/pages/production/uniformity/UniformityTable.tsx @@ -1242,156 +1242,158 @@ const UniformityTable = () => { ref={filterModal.ref} className={{ modal: 'p-0', - modalBox: 'p-0 rounded-2xl xl:max-w-4/12 max-w-sm', + modalBox: 'p-0 rounded-[0.875rem]', }} > -
+
{/* Modal Header */} -
+
-

Filter Data

+

Filter Data

-
-
+
+
+ {/* Rentang Waktu */}
- + Tanggal + +
+ +
+ +
+
+ +
+ { + handleFilterLocationChange(value); + }} + options={filterLocationOptions} + onInputChange={setFilterLocationInputValue} + isLoading={isLoadingFilterLocations} + onMenuScrollToBottom={loadMoreFilterLocations} isError={ - filterFormik.touched.start_date && - Boolean(filterFormik.errors.start_date) + filterFormik.touched.location && + Boolean(filterFormik.errors.location) } - errorMessage={filterFormik.errors.start_date} + errorMessage={filterFormik.errors.location} + isClearable className={{ wrapper: 'w-full' }} />
- { + handleFilterProjectFlockChange(value); + }} + options={filterProjectFlockOptions} + onInputChange={setFilterProjectFlockSearchValue} + isLoading={isLoadingFilterProjectFlocks} + onMenuScrollToBottom={loadMoreFilterProjectFlocks} + isDisabled={!filterFormik.values.location} isError={ - filterFormik.touched.end_date && - Boolean(filterFormik.errors.end_date) + filterFormik.touched.project_flock && + Boolean(filterFormik.errors.project_flock) } - errorMessage={filterFormik.errors.end_date} + errorMessage={filterFormik.errors.project_flock} + isClearable className={{ wrapper: 'w-full' }} />
-
-
- { - handleFilterLocationChange(value); - }} - options={filterLocationOptions} - onInputChange={setFilterLocationInputValue} - isLoading={isLoadingFilterLocations} - onMenuScrollToBottom={loadMoreFilterLocations} - isError={ - filterFormik.touched.location && - Boolean(filterFormik.errors.location) - } - errorMessage={filterFormik.errors.location} - isClearable - className={{ wrapper: 'w-full' }} - /> -
- -
- { - handleFilterProjectFlockChange(value); - }} - options={filterProjectFlockOptions} - onInputChange={setFilterProjectFlockSearchValue} - isLoading={isLoadingFilterProjectFlocks} - onMenuScrollToBottom={loadMoreFilterProjectFlocks} - isDisabled={!filterFormik.values.location} - isError={ - filterFormik.touched.project_flock && - Boolean(filterFormik.errors.project_flock) - } - errorMessage={filterFormik.errors.project_flock} - isClearable - className={{ wrapper: 'w-full' }} - /> -
- -
- { - handleFilterKandangChange(value); - }} - options={filterKandangOptions} - isDisabled={!filterFormik.values.project_flock} - isError={ - filterFormik.touched.kandang && - Boolean(filterFormik.errors.kandang) - } - errorMessage={filterFormik.errors.kandang} - isClearable - className={{ wrapper: 'w-full' }} - /> -
-
- -
- {/* Error List Alert */} - {formErrorList.length > 0 && ( -
- +
+ { + handleFilterKandangChange(value); + }} + options={filterKandangOptions} + isDisabled={!filterFormik.values.project_flock} + isError={ + filterFormik.touched.kandang && + Boolean(filterFormik.errors.kandang) + } + errorMessage={filterFormik.errors.kandang} + isClearable + className={{ wrapper: 'w-full' }} + />
- )} -
- {/* Action Buttons */} -
- - -
+ {formErrorList.length > 0 && ( +
+ +
+ )} +
+ + {/* Action Buttons */} +
+ + +
+