import { ArrowPath } from "@medusajs/icons" import { HttpTypes } from "@medusajs/types" import { 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 { ActionMenu } from "../../../../../components/common/action-menu" import { _DataTable } from "../../../../../components/table/data-table" import { useOrders } from "../../../../../hooks/api/orders" import { useOrderTableColumns } from "../../../../../hooks/table/columns/use-order-table-columns" import { useOrderTableFilters } from "../../../../../hooks/table/filters/use-order-table-filters" import { useOrderTableQuery } from "../../../../../hooks/table/query/use-order-table-query" import { useDataTable } from "../../../../../hooks/use-data-table" type CustomerGeneralSectionProps = { customer: HttpTypes.AdminCustomer } const PREFIX = "cusord" const PAGE_SIZE = 10 const DEFAULT_RELATIONS = "*customer,*items,*sales_channel,*payment_collections,+shipping_address.country_code" const DEFAULT_FIELDS = "id,status,display_id,created_at,email,fulfillment_status,payment_status,total,currency_code" export const CustomerOrderSection = ({ customer, }: CustomerGeneralSectionProps) => { const { t } = useTranslation() const { searchParams, raw } = useOrderTableQuery({ pageSize: PAGE_SIZE, prefix: PREFIX, }) const { orders, count, isLoading, isError, error } = useOrders( { customer_id: customer.id, fields: DEFAULT_FIELDS + "," + DEFAULT_RELATIONS, ...searchParams, }, { placeholderData: keepPreviousData, } ) const columns = useColumns() const filters = useOrderTableFilters() const { table } = useDataTable({ data: orders ?? [], columns, enablePagination: true, count, pageSize: PAGE_SIZE, prefix: PREFIX, }) if (isError) { throw error } return (
{t("orders.domain")} {/* TODO: ENABLE WHEN DRAFT ORDERS ARE DONE*/} {/*
*/} {/* */} {/*
*/}
<_DataTable columns={columns} table={table} pagination navigateTo={(row) => `/orders/${row.original.id}`} filters={filters} count={count} isLoading={isLoading} pageSize={PAGE_SIZE} orderBy={[ { key: "display_id", label: t("orders.fields.displayId") }, { key: "created_at", label: t("fields.createdAt") }, { key: "updated_at", label: t("fields.updatedAt") }, ]} search={true} queryObject={raw} prefix={PREFIX} />
) } const CustomerOrderActions = ({ order }: { order: HttpTypes.AdminOrder }) => { const { t } = useTranslation() return ( , }, ], }, ]} /> ) } const columnHelper = createColumnHelper() const useColumns = () => { const base = useOrderTableColumns({ exclude: ["customer"] }) return useMemo( () => [ ...base, columnHelper.display({ id: "actions", cell: ({ row }) => , }), ], [base] ) }