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 { useNavigate } from "react-router-dom" import { PencilSquare } from "@medusajs/icons" import { DataTable } from "../../../../../components/data-table" import { useDataTableDateColumns } from "../../../../../components/data-table/helpers/general/use-data-table-date-columns" import { useDataTableDateFilters } from "../../../../../components/data-table/helpers/general/use-data-table-date-filters" import { useUsers } from "../../../../../hooks/api/users" import { useQueryParams } from "../../../../../hooks/use-query-params" const PAGE_SIZE = 20 export const UserListTable = () => { const { q, order, offset } = useQueryParams(["q", "order", "offset"]) const { users, count, isPending, isError, error } = useUsers( { q, order, offset: offset ? parseInt(offset) : 0, limit: PAGE_SIZE, }, { placeholderData: keepPreviousData, } ) const columns = useColumns() const filters = useFilters() const { t } = useTranslation() if (isError) { throw error } return ( row.id} rowCount={count} pageSize={PAGE_SIZE} heading={t("users.domain")} rowHref={(row) => `${row.id}`} isLoading={isPending} action={{ label: t("users.invite"), to: "invite", }} emptyState={{ empty: { heading: t("users.list.empty.heading"), description: t("users.list.empty.description"), }, filtered: { heading: t("users.list.filtered.heading"), description: t("users.list.filtered.description"), }, }} /> ) } const columnHelper = createDataTableColumnHelper() const useColumns = () => { const { t } = useTranslation() const navigate = useNavigate() const dateColumns = useDataTableDateColumns() return useMemo( () => [ columnHelper.accessor("email", { header: t("fields.email"), cell: ({ row }) => { return row.original.email }, enableSorting: true, sortAscLabel: t("filters.sorting.alphabeticallyAsc"), sortDescLabel: t("filters.sorting.alphabeticallyDesc"), }), columnHelper.accessor("first_name", { header: t("fields.firstName"), cell: ({ row }) => { return row.original.first_name || "-" }, enableSorting: true, sortAscLabel: t("filters.sorting.alphabeticallyAsc"), sortDescLabel: t("filters.sorting.alphabeticallyDesc"), }), columnHelper.accessor("last_name", { header: t("fields.lastName"), cell: ({ row }) => { return row.original.last_name || "-" }, enableSorting: true, sortAscLabel: t("filters.sorting.alphabeticallyAsc"), sortDescLabel: t("filters.sorting.alphabeticallyDesc"), }), ...dateColumns, columnHelper.action({ actions: [ { label: t("actions.edit"), icon: , onClick: (ctx) => { navigate(`${ctx.row.original.id}/edit`) }, }, ], }), ], [t, navigate, dateColumns] ) } const useFilters = () => { const dateFilters = useDataTableDateFilters() return useMemo(() => { return dateFilters }, [dateFilters]) }