From cd4cef883e725aaac9595c65b6ef64ff535e0c84 Mon Sep 17 00:00:00 2001 From: ValdiANS Date: Mon, 13 Apr 2026 10:08:09 +0700 Subject: [PATCH 1/3] fix: change kandang filter to project flock kandang with period --- .../report/expense/tab/ReportExpenseTab.tsx | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/components/pages/report/expense/tab/ReportExpenseTab.tsx b/src/components/pages/report/expense/tab/ReportExpenseTab.tsx index 03c35958..5e8931c4 100644 --- a/src/components/pages/report/expense/tab/ReportExpenseTab.tsx +++ b/src/components/pages/report/expense/tab/ReportExpenseTab.tsx @@ -33,18 +33,18 @@ import { generateReportExpensePDF } from '../export/ReportExpenseExportPDF'; import { generateReportExpenseExcel } from '../export/ReportExpenseExportXLSX'; import toast from 'react-hot-toast'; import { - KandangApi, LocationApi, NonstockApi, SupplierApi, } from '@/services/api/master-data'; import { Supplier } from '@/types/api/master-data/supplier'; -import { Kandang } from '@/types/api/master-data/kandang'; import { Nonstock } from '@/types/api/master-data/nonstock'; import { ColumnDef } from '@tanstack/react-table'; import { httpClient } from '@/services/http/client'; import { BaseApiResponse } from '@/types/api/api-general'; import ButtonFilter from '@/components/helper/ButtonFilter'; +import { ProjectFlockKandang } from '@/types/api/production/project-flock-kandang'; +import { ProjectFlockKandangApi } from '@/services/api/production/project-flock-kandang'; interface ReportExpenseTabProps { tabId: string; @@ -139,7 +139,7 @@ const ReportExpenseTab = ({ tabId }: ReportExpenseTabProps) => { options: locationOptions, isLoadingOptions: isLoadingLocations, loadMore: loadMoreLocations, - } = useSelect(LocationApi.basePath, 'id', 'name', 'search'); + } = useSelect(LocationApi.basePath, 'id', 'name', 'search'); const { setInputValue: setSupplierInputValue, @@ -149,14 +149,14 @@ const ReportExpenseTab = ({ tabId }: ReportExpenseTabProps) => { } = useSelect(SupplierApi.basePath, 'id', 'name', 'search'); const { - setInputValue: setKandangInputValue, - options: kandangOptions, - isLoadingOptions: isLoadingKandangs, - loadMore: loadMoreKandangs, - } = useSelect( - KandangApi.basePath, + setInputValue: setProjectFlockKandangInputValue, + options: projectFlockKandangOptions, + isLoadingOptions: isLoadingProjectFlockKandangs, + loadMore: loadMoreProjectFlockKandangs, + } = useSelect( + ProjectFlockKandangApi.basePath, 'id', - 'name', + 'name_with_period', 'search', formik.values.location_id?.value ? { location_id: String(formik.values.location_id.value) } @@ -658,14 +658,14 @@ const ReportExpenseTab = ({ tabId }: ReportExpenseTabProps) => { { formik.setFieldValue('kandang_id', val); }} - onInputChange={setKandangInputValue} - onMenuScrollToBottom={loadMoreKandangs} + onInputChange={setProjectFlockKandangInputValue} + onMenuScrollToBottom={loadMoreProjectFlockKandangs} isClearable isDisabled={!formik.values.location_id} className={{ wrapper: 'w-full' }} From 12afa88f2c2627f3ee47bcb9baca08fe20749c22 Mon Sep 17 00:00:00 2001 From: ValdiANS Date: Mon, 13 Apr 2026 12:19:08 +0700 Subject: [PATCH 2/3] fix: make kandang_id optional --- .../production-result/filter/ProductionResultFilter.ts | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/components/pages/report/production-result/filter/ProductionResultFilter.ts b/src/components/pages/report/production-result/filter/ProductionResultFilter.ts index 6df3759e..4c1afdd0 100644 --- a/src/components/pages/report/production-result/filter/ProductionResultFilter.ts +++ b/src/components/pages/report/production-result/filter/ProductionResultFilter.ts @@ -43,15 +43,7 @@ export const ProductionResultFilterSchema = yup.object({ } return !!value; }), - kandang_id: yup - .mixed() - .required('Kandang wajib dipilih') - .test('is-not-empty', 'Kandang wajib dipilih', (value) => { - if (Array.isArray(value)) { - return value.length > 0; - } - return !!value; - }), + kandang_id: yup.mixed().nullable(), }) as yup.ObjectSchema; export type ProductionResultFilterValues = yup.InferType< From e4b1deecdc86629da7e9aea8a8ad9e8a9958c9ef Mon Sep 17 00:00:00 2001 From: ValdiANS Date: Mon, 13 Apr 2026 12:19:38 +0700 Subject: [PATCH 3/3] fix: render one project flock kandang if kandang is selected --- ...ProductionResultProjectFlockKandangTab.tsx | 39 +++++++++++++------ 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/src/components/pages/report/production-result/tab/ProductionResultProjectFlockKandangTab.tsx b/src/components/pages/report/production-result/tab/ProductionResultProjectFlockKandangTab.tsx index eb2c629c..8f5fbdc9 100644 --- a/src/components/pages/report/production-result/tab/ProductionResultProjectFlockKandangTab.tsx +++ b/src/components/pages/report/production-result/tab/ProductionResultProjectFlockKandangTab.tsx @@ -46,6 +46,7 @@ import Modal, { useModal } from '@/components/Modal'; import { formatNumber } from '@/lib/helper'; import Pagination from '@/components/Pagination'; import ProductionResultSkeleton from '@/components/pages/report/production-result/skeleton/ProductionResultSkeleton'; +import { ProjectFlock } from '@/types/api/production/project-flock'; interface ProductionResultTabProps { tabId: string; @@ -238,6 +239,17 @@ const ProductionResultContent = ({ tabId }: ProductionResultTabProps) => { ? String(values.kandang_id.value) : undefined, }); + + const selectedProjectFlockKandangRawData = isResponseSuccess( + projectFlockKandangsRawData + ) + ? projectFlockKandangsRawData.data.find( + (item) => item.id === values.kandang_id?.value + ) + : undefined; + + setSelectedProjectFlockKandang(selectedProjectFlockKandangRawData); + filterModal.closeModal(); setIsSubmitted(true); setPage(1); @@ -255,6 +267,9 @@ const ProductionResultContent = ({ tabId }: ProductionResultTabProps) => { formik.validateForm(); }; + const [selectedProjectFlockKandang, setSelectedProjectFlockKandang] = + useState(); + // ===== OPTIONS ===== const { setInputValue: setAreaInputValue, @@ -279,7 +294,7 @@ const ProductionResultContent = ({ tabId }: ProductionResultTabProps) => { options: projectFlockOptions, isLoadingOptions: isLoadingProjectFlocks, loadMore: loadMoreProjectFlocks, - } = useSelect( + } = useSelect( ProjectFlockApi.basePath, 'id', 'flock_name', @@ -300,10 +315,11 @@ const ProductionResultContent = ({ tabId }: ProductionResultTabProps) => { options: projectFlockKandangOptions, isLoadingOptions: isLoadingProjectFlockKandangs, loadMore: loadMoreProjectFlockKandangs, - } = useSelect( + rawData: projectFlockKandangsRawData, + } = useSelect( ProjectFlockKandangApi.basePath, 'id', - 'kandang.name', + 'name_with_period', 'search', { area_id: formik.values.area_id?.value @@ -359,13 +375,15 @@ const ProductionResultContent = ({ tabId }: ProductionResultTabProps) => { ([url]: string[]) => httpClient>(url) ); - const projectFlockKandangs = useMemo( - () => - isResponseSuccess(projectFlockKandangsData) - ? projectFlockKandangsData.data - : null, - [projectFlockKandangsData] - ); + const projectFlockKandangs = useMemo(() => { + if (selectedProjectFlockKandang) { + return [selectedProjectFlockKandang]; + } + + return isResponseSuccess(projectFlockKandangsData) + ? projectFlockKandangsData.data + : null; + }, [projectFlockKandangsData, selectedProjectFlockKandang]); const projectFlockKandangMetadata = useMemo( () => @@ -804,7 +822,6 @@ const ProductionResultContent = ({ tabId }: ProductionResultTabProps) => { />