diff --git a/src/components/pages/production/transfer-to-laying/TransferToLayingFilterModal.tsx b/src/components/pages/production/transfer-to-laying/TransferToLayingFilterModal.tsx new file mode 100644 index 00000000..db758762 --- /dev/null +++ b/src/components/pages/production/transfer-to-laying/TransferToLayingFilterModal.tsx @@ -0,0 +1,208 @@ +'use client'; + +import { RefObject } from 'react'; +import { useFormik } from 'formik'; + +import { Icon } from '@iconify/react'; +import Modal from '@/components/Modal'; +import Button from '@/components/Button'; +import DateInput from '@/components/input/DateInput'; +import SelectInputCheckbox from '@/components/input/SelectInputCheckbox'; + +import { OptionType, useSelect } from '@/components/input/SelectInput'; +import { ProjectFlockApi } from '@/services/api/production'; +import { Flock } from '@/types/api/master-data/flock'; +import { TransferToLayingFilter } from '@/types/api/production/transfer-to-laying'; + +interface TransferToLayingFilterModal { + ref: RefObject; + onSubmit?: (values: TransferToLayingFilter) => void; + onReset?: () => void; +} + +const TransferToLayingFilterModal = ({ + ref, + onSubmit, + onReset, +}: TransferToLayingFilterModal) => { + const closeModalHandler = () => { + ref.current?.close(); + }; + + // Flock Source + const { + setInputValue: setFlockSourceInputValue, + options: flockSourceOptions, + isLoadingOptions: isLoadingFlockSourceOptions, + loadMore: loadMoreFlockSource, + } = useSelect(ProjectFlockApi.basePath, 'id', 'flock_name', 'search', { + category: 'GROWING', + }); + + // Flock Destination + const { + setInputValue: setFlockDestinationInputValue, + options: flockDestinationOptions, + isLoadingOptions: isLoadingFlockDestinationOptions, + loadMore: loadMoreFlockDestination, + } = useSelect(ProjectFlockApi.basePath, 'id', 'flock_name', 'search', { + category: 'LAYING', + }); + + const formik = useFormik<{ + startDate: string; + endDate: string; + flockSource: { value: number; label: string }[]; + flockDestination: { value: number; label: string }[]; + status: { value: number; label: string }[]; + }>({ + initialValues: { + startDate: '', + endDate: '', + flockSource: [], + flockDestination: [], + status: [], + }, + onSubmit: async (values) => { + const formattedValues = { + ...values, + flockSource: values.flockSource.map((item) => item.value), + flockDestination: values.flockDestination.map((item) => item.value), + status: values.status.map((item) => item.value), + }; + + onSubmit?.(formattedValues); + closeModalHandler(); + }, + onReset: () => { + onReset?.(); + closeModalHandler(); + }, + }); + + const flockSourceChangeHandler = (val: OptionType | OptionType[] | null) => { + formik.setFieldValue('flockSource', val as OptionType[]); + }; + + const flockDestinationChangeHandler = ( + val: OptionType | OptionType[] | null + ) => { + formik.setFieldValue('flockDestination', val as OptionType[]); + }; + + const statusChangeHandler = (val: OptionType | OptionType[] | null) => { + formik.setFieldValue('status', val as OptionType[]); + }; + + return ( + +
+ {/* Modal Header */} +
+
+ +

Filter Data

+
+ + +
+ + {/* Modal Body */} +
+
+ Tanggal +
+ +
+ +
+ + + + + + +
+
+ + {/* Modal Footer */} +
+ + + +
+
+
+ ); +}; + +export default TransferToLayingFilterModal;