import { useAdminCollections } from "medusa-react" import React, { useEffect, useState } from "react" import { usePagination, useTable } from "react-table" import { useDebounce } from "../../../hooks/use-debounce" import Spinner from "../../atoms/spinner" import Table from "../../molecules/table" import { FilteringOptionProps } from "../../molecules/table/filtering-option" import TableContainer from "../../organisms/table-container" import useCollectionActions from "./use-collection-actions" import useCollectionTableColumn from "./use-collection-column" const DEFAULT_PAGE_SIZE = 15 const CollectionsTable: React.FC = () => { const [filteringOptions, setFilteringOptions] = useState< FilteringOptionProps[] >([]) const [offset, setOffset] = useState(0) const limit = DEFAULT_PAGE_SIZE const [query, setQuery] = useState("") const [numPages, setNumPages] = useState(0) const debouncedSearchTerm = useDebounce(query, 300) const { collections, isLoading, isRefetching, count } = useAdminCollections( { q: debouncedSearchTerm, offset: offset, limit, }, { keepPreviousData: true, } ) useEffect(() => { if (typeof count !== "undefined") { const controlledPageCount = Math.ceil(count / limit) setNumPages(controlledPageCount) } }, [count]) const [columns] = useCollectionTableColumn() const { getTableProps, getTableBodyProps, headerGroups, rows, prepareRow, canPreviousPage, canNextPage, pageCount, nextPage, previousPage, // Get the state from the instance state: { pageIndex }, } = useTable( { columns, data: collections || [], manualPagination: true, initialState: { pageIndex: Math.floor(offset / limit), pageSize: limit, }, pageCount: numPages, autoResetPage: false, }, usePagination ) const handleNext = () => { if (canNextPage) { setOffset(offset + limit) nextPage() } } const handleSearch = (q: string) => { setOffset(0) setQuery(q) } const handlePrev = () => { if (canPreviousPage) { setOffset(offset - limit) previousPage() } } useEffect(() => { setFilteringOptions([ { title: "Sort", options: [ { title: "All", count: collections?.length || 0, onClick: () => console.log("Not implemented yet"), }, ], }, ]) }, [collections]) return ( {headerGroups?.map((headerGroup) => ( {headerGroup.headers.map((col, idx) => ( {col.render("Header")} ))} ))} {isLoading || isRefetching || !collections ? (
) : ( {rows.map((row, idx) => { prepareRow(row) return })} )}
) } const CollectionRow = ({ row }) => { const collection = row.original const { getActions } = useCollectionActions(collection) return ( {row.cells.map((cell, index) => { return ( {cell.render("Cell", { index })} ) })} ) } export default CollectionsTable