import { Button, Container, Heading } from "@medusajs/ui"
import { keepPreviousData } from "@tanstack/react-query"
import { createColumnHelper } from "@tanstack/react-table"
import { useMemo } from "react"
import { useTranslation } from "react-i18next"
import { Link } from "react-router-dom"
import { HttpTypes } from "@medusajs/types"
import { PermissionGuard } from "../../../../../components/common/permission-guard"
import { _DataTable } from "../../../../../components/table/data-table"
import { useCustomers } from "../../../../../hooks/api/customers"
import { useCustomerTableColumns } from "../../../../../hooks/table/columns/use-customer-table-columns"
import { useCustomerTableFilters } from "../../../../../hooks/table/filters/use-customer-table-filters"
import { useCustomerTableQuery } from "../../../../../hooks/table/query/use-customer-table-query"
import { useDataTable } from "../../../../../hooks/use-data-table"
import { CustomerActions } from "./customer-list-table-actions"
const PAGE_SIZE = 20
export const CustomerListTable = () => {
const { t } = useTranslation()
const { searchParams, raw } = useCustomerTableQuery({ pageSize: PAGE_SIZE })
const { customers, count, isLoading, isError, error } = useCustomers(
{
...searchParams,
},
{
placeholderData: keepPreviousData,
}
)
const filters = useCustomerTableFilters()
const columns = useColumns()
const { table } = useDataTable({
data: customers ?? [],
columns,
count,
enablePagination: true,
getRowId: (row) => row.id,
pageSize: PAGE_SIZE,
})
if (isError) {
throw error
}
return (
{t("customers.domain")}
<_DataTable
table={table}
columns={columns}
pageSize={PAGE_SIZE}
count={count}
filters={filters}
orderBy={[
{ key: "email", label: t("fields.email") },
{ key: "first_name", label: t("fields.firstName") },
{ key: "last_name", label: t("fields.lastName") },
{ key: "has_account", label: t("customers.hasAccount") },
{ key: "created_at", label: t("fields.createdAt") },
{ key: "updated_at", label: t("fields.updatedAt") },
]}
isLoading={isLoading}
navigateTo={(row) => row.original.id}
search
queryObject={raw}
noRecords={{
message: t("customers.list.noRecordsMessage"),
}}
/>
)
}
const columnHelper = createColumnHelper()
const useColumns = () => {
const columns = useCustomerTableColumns()
return useMemo(
() => [
...columns,
columnHelper.display({
id: "actions",
cell: ({ row }) => ,
}),
],
[columns]
)
}