saleor-dashboard/src/customers/components/CustomerOrders/CustomerOrders.tsx
Jonatan Witoszek 11a990d197
Remove hover from non-interactive table rows (#2358)
* Disable hover effect when TableRow is not clickable

* Replace TableRow with TableRowLink

* Update snapshots
2022-10-27 12:58:17 +02:00

161 lines
4.9 KiB
TypeScript

import { Card, TableBody, TableCell, TableHead } from "@material-ui/core";
import { Button } from "@saleor/components/Button";
import CardTitle from "@saleor/components/CardTitle";
import { DateTime } from "@saleor/components/Date";
import Money from "@saleor/components/Money";
import ResponsiveTable from "@saleor/components/ResponsiveTable";
import Skeleton from "@saleor/components/Skeleton";
import TableRowLink from "@saleor/components/TableRowLink";
import { CustomerDetailsQuery } from "@saleor/graphql";
import { makeStyles, Pill } from "@saleor/macaw-ui";
import { orderUrl } from "@saleor/orders/urls";
import { RelayToFlat } from "@saleor/types";
import React from "react";
import { FormattedMessage, useIntl } from "react-intl";
import { maybe, renderCollection, transformPaymentStatus } from "../../../misc";
const useStyles = makeStyles(
{
link: {
cursor: "pointer",
},
textRight: {
textAlign: "right",
},
},
{ name: "CustomerOrders" },
);
export interface CustomerOrdersProps {
orders: RelayToFlat<CustomerDetailsQuery["user"]["orders"]>;
viewAllHref: string;
}
const CustomerOrders: React.FC<CustomerOrdersProps> = props => {
const { orders, viewAllHref } = props;
const classes = useStyles(props);
const intl = useIntl();
const orderList = orders
? orders.map(order => ({
...order,
paymentStatus: transformPaymentStatus(order.paymentStatus, intl),
}))
: undefined;
return (
<Card>
<CardTitle
title={intl.formatMessage({
id: "1LiVhv",
defaultMessage: "Recent Orders",
description: "section header",
})}
toolbar={
<Button variant="tertiary" href={viewAllHref}>
<FormattedMessage
id="3+990c"
defaultMessage="View all orders"
description="button"
/>
</Button>
}
/>
<ResponsiveTable>
<TableHead>
<TableRowLink>
<TableCell>
<FormattedMessage
id="nTF6tG"
defaultMessage="No. of Order"
description="number of order"
/>
</TableCell>
<TableCell>
<FormattedMessage
id="ri3kK9"
defaultMessage="Date"
description="order placement date"
/>
</TableCell>
<TableCell>
<FormattedMessage
id="pURrk1"
defaultMessage="Status"
description="order status"
/>
</TableCell>
<TableCell className={classes.textRight}>
<FormattedMessage
id="taX/V3"
defaultMessage="Total"
description="order total amount"
/>
</TableCell>
</TableRowLink>
</TableHead>
<TableBody>
{renderCollection(
orderList,
order => (
<TableRowLink
hover={!!order}
className={!!order ? classes.link : undefined}
href={order && orderUrl(order.id)}
key={order ? order.id : "skeleton"}
>
<TableCell>
{maybe(() => order.number) ? (
"#" + order.number
) : (
<Skeleton />
)}
</TableCell>
<TableCell>
{maybe(() => order.created) ? (
<DateTime date={order.created} />
) : (
<Skeleton />
)}
</TableCell>
<TableCell>
{maybe(() => order.paymentStatus.status) !== undefined ? (
order.paymentStatus.status === null ? null : (
<Pill
color={order.paymentStatus.status}
label={order.paymentStatus.localized}
/>
)
) : (
<Skeleton />
)}
</TableCell>
<TableCell className={classes.textRight} align="right">
{maybe(() => order.total.gross) ? (
<Money money={order.total.gross} />
) : (
<Skeleton />
)}
</TableCell>
</TableRowLink>
),
() => (
<TableRowLink>
<TableCell colSpan={6}>
<FormattedMessage
id="RlfqSV"
defaultMessage="No orders found"
/>
</TableCell>
</TableRowLink>
),
)}
</TableBody>
</ResponsiveTable>
</Card>
);
};
CustomerOrders.displayName = "CustomerOrders";
export default CustomerOrders;