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])
}