import { useAdminDraftOrders } from "medusa-react" import { Fragment, useEffect, useState } from "react" import { useLocation } from "react-router-dom" import { usePagination, useTable } from "react-table" import { useTranslation } from "react-i18next" import Table from "../../molecules/table" import TableContainer from "../../organisms/table-container" import useDraftOrderTableColumns from "./use-draft-order-column" import { useDraftOrderFilters } from "./use-draft-order-filters" const DEFAULT_PAGE_SIZE = 15 const DraftOrderTable = () => { const location = useLocation() const { t } = useTranslation() const { reset, paginate, setQuery: setFreeText, queryObject, } = useDraftOrderFilters(location.search, {}) const filtersOnLoad = queryObject const offs = parseInt(filtersOnLoad?.offset) || 0 const lim = parseInt(filtersOnLoad?.limit) || DEFAULT_PAGE_SIZE const [query, setQuery] = useState(filtersOnLoad?.query) const [numPages, setNumPages] = useState(0) const { draft_orders, isLoading, isRefetching, count } = useAdminDraftOrders( queryObject, { keepPreviousData: true, } ) useEffect(() => { const controlledPageCount = Math.ceil(count! / queryObject.limit) setNumPages(controlledPageCount) }, [count, queryObject]) const [columns] = useDraftOrderTableColumns() const { getTableProps, getTableBodyProps, headerGroups, rows, prepareRow, canPreviousPage, canNextPage, pageCount, gotoPage, nextPage, previousPage, // Get the state from the instance state: { pageIndex }, } = useTable( { columns, data: draft_orders || [], manualPagination: true, initialState: { pageSize: lim, pageIndex: offs / lim, }, pageCount: numPages, autoResetPage: false, }, usePagination ) // Debounced search useEffect(() => { const delayDebounceFn = setTimeout(() => { if (query) { setFreeText(query) gotoPage(0) } else { // if we delete query string, we reset the table view reset() } }, 400) return () => clearTimeout(delayDebounceFn) }, [query]) const handleNext = () => { if (canNextPage) { paginate(1) nextPage() } } const handlePrev = () => { if (canPreviousPage) { paginate(-1) previousPage() } } return ( {headerGroups?.map((headerGroup) => { return ( {headerGroup.headers.map((col, index) => { return ( {col.render("Header", { customIndex: index })} ) })} ) })} {rows.map((row) => { prepareRow(row) return ( {row.cells.map((cell, index) => { return {cell.render("Cell")} })} ) })}
) } export default DraftOrderTable