'use client'; import Badge from '@/components/Badge'; import Button from '@/components/Button'; import Card from '@/components/Card'; import SelectInput, { OptionType, useSelect, } from '@/components/input/SelectInput'; import PillBadge from '@/components/PillBadge'; import Table from '@/components/Table'; import { isResponseSuccess } from '@/lib/api-helper'; import { cn } from '@/lib/helper'; import { ProjectFlockApi } from '@/services/api/production/project-flock'; import { ProjectFlockKandangApi } from '@/services/api/production'; import { useTableFilter } from '@/services/hooks/useTableFilter'; import { ProjectFlock } from '@/types/api/production/project-flock'; import { ProjectFlockKandang } from '@/types/api/production/project-flock-kandang'; import { Icon } from '@iconify/react'; import { useRouter } from 'next/navigation'; import { useEffect, useState } from 'react'; import useSWR from 'swr'; import { FormHeader } from '@/components/helper/form/FormHeader'; const ProjectFlockChickinDetail = ({ projectFlockId, }: { projectFlockId: number | undefined; }) => { const router = useRouter(); // Tables Props const { state: tableFilterState } = useTableFilter({ initial: { search: '' }, paramMap: { page: 'page', pageSize: 'limit' }, }); // States const [searchProjectFlock, setSearchProjectFlock] = useState(''); const [selectedProjectFlock, setSelectedProjectFlock] = useState(null); const [projectFlock, setProjectFlock] = useState(); // Fetch Data const { data: listProjectFlockKandang } = useSWR( `${ProjectFlockKandangApi.basePath}?${new URLSearchParams({ search: searchProjectFlock, project_flock_id: projectFlock?.id?.toString() ?? projectFlockId?.toString() ?? '', }).toString()}`, ProjectFlockKandangApi.getAllFetcher ); const { options: options, isLoadingOptions: isLoadingListProjectFlock, rawData: listProjectFlock, } = useSelect( ProjectFlockApi.basePath, 'id', 'flock_name', '', { search: searchProjectFlock, } ); // Handle Function const handleChickinClick = async ( projectFlockKandang: ProjectFlockKandang ) => { router.push( `/production/project-flock/chickin/add/kandang?projectFlockKandangId=${projectFlockKandang.id}&projectFlockId=${projectFlockId ?? selectedProjectFlock?.value}` ); }; const handleChangeProjectFlock = (val: OptionType | null) => { setSelectedProjectFlock(val); if (isResponseSuccess(listProjectFlock) && val) { const selected = listProjectFlock.data.find( (pf) => pf.id === Number(val.value) ); setProjectFlock(selected); } else { setProjectFlock(undefined); } if (projectFlockId) { router.push('/production/project-flock/chickin/add'); } if (!val && projectFlockId) { router.push('/production/project-flock/chickin/add'); } }; useEffect(() => { if (projectFlockId && isResponseSuccess(listProjectFlock)) { setProjectFlock( listProjectFlock.data.find((pf) => pf.id === Number(projectFlockId)) ); } }, [projectFlockId, listProjectFlock]); return ( <>
{ setSearchProjectFlock(val); }} isLoading={isLoadingListProjectFlock} value={ projectFlock ? { label: `${projectFlock?.flock_name}`, value: projectFlock?.id, } : null } onChange={(val) => { handleChangeProjectFlock(val as OptionType | null); }} isSearchable isClearable startAdornment={ projectFlock && ( Periode {projectFlock?.period} ) } />
emptyContent={
Pilih project flock terlebih dahulu...
} data={projectFlock ? [projectFlock] : []} columns={[ { header: 'ID', accessorKey: 'id', }, { header: 'Area', accessorKey: 'area.name', }, { header: 'Lokasi', accessorKey: 'location.name', }, { header: 'Nama Flock', accessorKey: 'flock_name', }, { header: 'Kategori', accessorKey: 'category', }, { header: 'Status', accessorKey: 'status', cell: (props) => { return props.row.original.approval?.step_name ? ( { switch ( props.row.original.approval?.step_name.toUpperCase() ) { case 'AKTIF': return 'red'; case 'PENGAJUAN': return 'green'; default: return 'gray'; } })()} content={props.row.original.approval?.step_name .toLowerCase() .replace(/_/g, ' ') .replace(/\b\w/g, (char) => char.toUpperCase())} /> ) : ( '-' ); }, }, { header: 'FCR Layer', accessorKey: 'fcr.name', }, ]} page={undefined} className={{ containerClassName: cn({ 'mb-20': projectFlock && projectFlock.kandangs?.length === 0, }), tableWrapperClassName: 'overflow-x-auto min-h-full!', 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', paginationClassName: 'hidden', }} />
emptyContent={
Pilih project flock terlebih dahulu...
} data={ projectFlock && isResponseSuccess(listProjectFlockKandang) ? listProjectFlockKandang.data : [] } columns={[ { header: '#', cell: (props) => tableFilterState.pageSize * (tableFilterState.page - 1) + props.row.index + 1, }, { accessorFn: (row) => row?.project_flock?.area?.name, header: 'Area', }, { accessorFn: (row) => row?.project_flock?.location?.name, header: 'Lokasi', }, { accessorKey: 'kandang.name', header: 'Kandang', }, { accessorKey: 'kandang.capacity', header: 'Kapasitas', }, { accessorFn: () => projectFlock?.period, header: 'Periode', }, { accessorKey: 'approval.step_name', header: 'Status', cell: (props) => { return props.row.original.approval?.step_name ? ( { switch ( props.row.original.approval?.step_name.toUpperCase() ) { case 'DISETUJUI': return 'green'; case 'PENGAJUAN': return 'yellow'; default: return 'gray'; } })()} content={props.row.original.approval?.step_name .toLowerCase() .replace(/_/g, ' ') .replace(/\b\w/g, (char) => char.toUpperCase())} /> ) : projectFlock?.approval?.step_number === 1 ? ( ) : ( ); }, }, { header: 'Aksi', cell: (props) => { return ( <> ); }, }, ]} page={undefined} className={{ containerClassName: cn({ 'mb-20': projectFlock && projectFlock.kandangs?.length === 0, }), tableWrapperClassName: 'overflow-x-auto min-h-full!', 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', paginationClassName: 'hidden', }} />
); }; export default ProjectFlockChickinDetail;