import { HttpTypes } from "@medusajs/types" import { Container, createDataTableColumnHelper } from "@medusajs/ui" import { keepPreviousData } from "@tanstack/react-query" import { useMemo } from "react" import { useTranslation } from "react-i18next" import { DataTable } from "../../../../../components/data-table" import { useDataTableDateFilters } from "../../../../../components/data-table/helpers/general/use-data-table-date-filters" import { useCustomerGroups } from "../../../../../hooks/api" import { useDate } from "../../../../../hooks/use-date" import { useQueryParams } from "../../../../../hooks/use-query-params" import { CustomerGroupListTableActions } from "./customer-group-list-table-actions" const PAGE_SIZE = 10 export const CustomerGroupListTable = () => { const { t } = useTranslation() const { q, order, offset, created_at, updated_at } = useQueryParams([ "q", "order", "offset", "created_at", "updated_at", ]) const columns = useColumns() const filters = useFilters() const { customer_groups, count, isPending, isError, error } = useCustomerGroups( { q, order, offset: offset ? parseInt(offset) : undefined, limit: PAGE_SIZE, created_at: created_at ? JSON.parse(created_at) : undefined, updated_at: updated_at ? JSON.parse(updated_at) : undefined, fields: "id,name,created_at,updated_at,customers.id", }, { placeholderData: keepPreviousData, } ) if (isError) { throw error } return ( row.id} rowHref={(row) => `/customer-groups/${row.id}`} action={{ label: t("actions.create"), to: "/customer-groups/create", }} emptyState={{ empty: { heading: t("customerGroups.list.empty.heading"), description: t("customerGroups.list.empty.description"), }, filtered: { heading: t("customerGroups.list.filtered.heading"), description: t("customerGroups.list.filtered.description"), }, }} pageSize={PAGE_SIZE} isLoading={isPending} /> ) } const columnHelper = createDataTableColumnHelper() const useColumns = () => { const { t } = useTranslation() const { getFullDate } = useDate() return useMemo(() => { return [ columnHelper.accessor("name", { header: t("fields.name"), enableSorting: true, sortAscLabel: t("filters.sorting.alphabeticallyAsc"), sortDescLabel: t("filters.sorting.alphabeticallyDesc"), }), columnHelper.accessor("customers", { header: t("customers.domain"), cell: ({ row }) => { return {row.original.customers?.length ?? 0} }, }), columnHelper.accessor("created_at", { header: t("fields.createdAt"), cell: ({ row }) => { return ( {getFullDate({ date: row.original.created_at, includeTime: true, })} ) }, enableSorting: true, sortAscLabel: t("filters.sorting.dateAsc"), sortDescLabel: t("filters.sorting.dateDesc"), }), columnHelper.accessor("updated_at", { header: t("fields.updatedAt"), cell: ({ row }) => { return ( {getFullDate({ date: row.original.updated_at, includeTime: true, })} ) }, enableSorting: true, sortAscLabel: t("filters.sorting.dateAsc"), sortDescLabel: t("filters.sorting.dateDesc"), }), columnHelper.display({ id: "action", cell: ({ row }) => ( ), }), ] }, [t, getFullDate]) } const useFilters = () => { const dateFilters = useDataTableDateFilters() return useMemo(() => { return dateFilters }, [dateFilters]) }