'use client'; import { ChangeEventHandler, useEffect, useState } from 'react'; import { useSearchParams } from 'next/navigation'; import useSWR from 'swr'; import { ColumnDef, SortingState } from '@tanstack/react-table'; import { Icon } from '@iconify/react'; import Table from '@/components/Table'; import Card from '@/components/Card'; import Collapse from '@/components/Collapse'; import { cn, formatNumber } from '@/lib/helper'; import { isResponseSuccess } from '@/lib/api-helper'; import { useTableFilter } from '@/services/hooks/useTableFilter'; import { ClosingApi } from '@/services/api/closing'; import { ClosingIncomingSapronakSummary } from '@/types/api/closing'; import SapronakClosingSkeleton from '@/components/pages/closing/skeleton/SapronakClosingSkeleton'; interface ClosingIncomingSapronaksSummaryTableProps { projectFlockId: number; } const ClosingIncomingSapronaksSummaryTable = ({ projectFlockId, }: ClosingIncomingSapronaksSummaryTableProps) => { const searchParams = useSearchParams(); const kandangId = searchParams.get('kandangId'); const { state: tableFilterState, updateFilter, setPage, setPageSize, toQueryString: getTableFilterQueryString, } = useTableFilter({ initial: { search: '', nameSort: '', }, paramMap: { page: 'page', pageSize: 'limit', nameSort: 'sort_name', }, }); const { data: incomingSapronakSummaries, isLoading: isLoadingIncomingSapronakSummaries, } = useSWR( `${ClosingApi.basePath}/${projectFlockId}/sapronak/summary${getTableFilterQueryString()}&type=incoming&kandang_id=${kandangId ? `${kandangId}` : ''}`, ClosingApi.getAllIncomingSapronakSummaryFetcher, { keepPreviousData: true, } ); const [open, setOpen] = useState(true); const [sorting, setSorting] = useState([]); const [rowSelection, setRowSelection] = useState>({}); const incomingSapronaksColumns: ColumnDef[] = [ { header: '#', cell: (props) => props.row.index + 1, }, { accessorKey: 'category', header: 'Kategori', }, { accessorKey: 'total_qty', header: 'Total Kuantitas', cell: (props) => `${formatNumber(props.row.original.total_qty)} ${props.row.original.uom.name}`, }, ]; const searchChangeHandler: ChangeEventHandler = (e) => { updateFilter('search', e.target.value); }; // track sorting useEffect(() => { const isNameSorted = sorting.find((sortItem) => sortItem.id === 'name'); if (!isNameSorted) { updateFilter('nameSort', ''); } else { updateFilter('nameSort', isNameSorted.desc ? 'desc' : 'asc'); } }, [sorting, updateFilter]); useEffect(() => { if (!open) { setOpen( isResponseSuccess(incomingSapronakSummaries) ? incomingSapronakSummaries.data.length > 0 : false ); } }, [incomingSapronakSummaries, isResponseSuccess]); return (
Ringkasan Sapronak Masuk
} className='w-full!' titleClassName='w-full p-0!' >
{isLoadingIncomingSapronakSummaries ? ( ) : isResponseSuccess(incomingSapronakSummaries) && incomingSapronakSummaries.data.length === 0 ? ( ) : ( data={ isResponseSuccess(incomingSapronakSummaries) ? incomingSapronakSummaries?.data : [] } columns={incomingSapronaksColumns} pageSize={tableFilterState.pageSize} onPageSizeChange={setPageSize} rowOptions={[10, 20, 50, 100]} page={ isResponseSuccess(incomingSapronakSummaries) ? incomingSapronakSummaries?.meta?.page : 0 } totalItems={ isResponseSuccess(incomingSapronakSummaries) ? incomingSapronakSummaries?.meta?.total_results : 0 } onPageChange={setPage} isLoading={isLoadingIncomingSapronakSummaries} sorting={sorting} setSorting={setSorting} rowSelection={rowSelection} setRowSelection={setRowSelection} className={{ containerClassName: cn({ 'w-full mb-20': isResponseSuccess(incomingSapronakSummaries) && incomingSapronakSummaries?.data?.length === 0, }), }} /> )}
); }; export default ClosingIncomingSapronaksSummaryTable;