import { useResultStore } from '@/common/stores/useResultStore' import { Input, Modal, ModalBody, ModalContent, ModalHeader, Pagination, Select, SelectItem, Skeleton, Table, TableBody, TableCell, TableColumn, TableHeader, TableRow } from '@nextui-org/react' import { Product } from 'prisma/generated/client' import { useQuery } from '@tanstack/react-query' import React, { useEffect, useMemo, useState } from 'react' import { useDebounce } from 'usehooks-ts' import { SHOWING_SELECTIONS } from '@/common/constants/product' type Props = { modal: { isOpen: boolean, onOpenChange: () => void } } const ProductModal = ({ modal }: Props) => { const [page, setPage] = useState(1) const [search, setSearch] = useState("") const [show, setShow] = useState("1") const debouncedSearch = useDebounce(search, 500) const { filter } = useResultStore() useEffect(() => { setPage(1) }, [debouncedSearch, show, filter.company]) const { data } = useQuery({ queryKey: ['product', page, debouncedSearch, filter.company, show], queryFn: async () => { const showValue = SHOWING_SELECTIONS.find((item) => item.key === show)?.value || '' const searchParams = new URLSearchParams({ page: page.toString(), search: debouncedSearch, companyId: filter.company, show: showValue }) const response = await fetch(`/api/product?${searchParams}`) const data: { products: (Product & { company: { id: number, name: string } })[], page: number, totalPage: number } = await response.json() return data } }) const [totalPage, setTotalPage] = useState(1) useEffect(() => { if (data?.totalPage) setTotalPage(data?.totalPage) }, [data?.totalPage]) const handleSelectChange = (e: React.ChangeEvent) => { setShow(e.target.value) } return ( Product List
setSearch(e.target.value)} />
{!data && ( )} {!!data && ( NAME ITEM CODE BARCODE ON-HAND QTY DIFFERENCE QTY COMPANY {(product) => ( {product.name} {product.itemCode} {product.barcode} {product.onhandQty} {product.differenceQty} {product.company.name} )}
)} setPage(page)} className='mt-2' />
) } export default ProductModal