import { makeStyles } from "@material-ui/core/styles"; import Typography from "@material-ui/core/Typography"; import AppHeader from "@saleor/components/AppHeader"; import CardMenu from "@saleor/components/CardMenu"; import { CardSpacer } from "@saleor/components/CardSpacer"; import { ConfirmButtonTransitionState } from "@saleor/components/ConfirmButton"; import { Container } from "@saleor/components/Container"; import { DateTime } from "@saleor/components/Date"; import Form from "@saleor/components/Form"; import Grid from "@saleor/components/Grid"; import Metadata, { MetadataFormData } from "@saleor/components/Metadata"; import PageHeader from "@saleor/components/PageHeader"; import SaveButtonBar from "@saleor/components/SaveButtonBar"; import Skeleton from "@saleor/components/Skeleton"; import { sectionNames } from "@saleor/intl"; import { UserPermissionProps } from "@saleor/types"; import { mapMetadataItemToInput } from "@saleor/utils/maps"; import useMetadataChangeTrigger from "@saleor/utils/metadata/useMetadataChangeTrigger"; import React from "react"; import { useIntl } from "react-intl"; import { maybe, renderCollection } from "../../../misc"; import { OrderStatus } from "../../../types/globalTypes"; import { OrderDetails_order } from "../../types/OrderDetails"; import OrderCustomer from "../OrderCustomer"; import OrderCustomerNote from "../OrderCustomerNote"; import OrderFulfillment from "../OrderFulfillment"; import OrderHistory, { FormData as HistoryFormData } from "../OrderHistory"; import OrderInvoiceList from "../OrderInvoiceList"; import OrderPayment from "../OrderPayment/OrderPayment"; import OrderUnfulfilledItems from "../OrderUnfulfilledItems/OrderUnfulfilledItems"; const useStyles = makeStyles( theme => ({ date: { marginBottom: theme.spacing(3) }, header: { display: "flex", marginBottom: 0 } }), { name: "OrderDetailsPage" } ); export interface OrderDetailsPageProps extends UserPermissionProps { order: OrderDetails_order; shippingMethods?: Array<{ id: string; name: string; }>; countries?: Array<{ code: string; label: string; }>; disabled: boolean; saveButtonBarState: ConfirmButtonTransitionState; onBack(); onBillingAddressEdit(); onFulfillmentCancel(id: string); onFulfillmentTrackingNumberUpdate(id: string); onOrderFulfill(); onProductClick?(id: string); onPaymentCapture(); onPaymentPaid(); onPaymentRefund(); onPaymentVoid(); onShippingAddressEdit(); onOrderCancel(); onNoteAdd(data: HistoryFormData); onProfileView(); onInvoiceClick(invoiceId: string); onInvoiceGenerate(); onInvoiceSend(invoiceId: string); onSubmit(data: MetadataFormData): Promise; } const OrderDetailsPage: React.FC = props => { const { disabled, order, saveButtonBarState, userPermissions, onBack, onBillingAddressEdit, onFulfillmentCancel, onFulfillmentTrackingNumberUpdate, onNoteAdd, onOrderCancel, onOrderFulfill, onPaymentCapture, onPaymentPaid, onPaymentRefund, onPaymentVoid, onShippingAddressEdit, onProfileView, onInvoiceClick, onInvoiceGenerate, onInvoiceSend, onSubmit } = props; const classes = useStyles(props); const intl = useIntl(); const { isMetadataModified, isPrivateMetadataModified, makeChangeHandler: makeMetadataChangeHandler } = useMetadataChangeTrigger(); const canCancel = maybe(() => order.status) !== OrderStatus.CANCELED; const canEditAddresses = maybe(() => order.status) !== OrderStatus.CANCELED; const canFulfill = maybe(() => order.status) !== OrderStatus.CANCELED; const unfulfilled = maybe(() => order.lines, []).filter( line => line.quantityFulfilled < line.quantity ); const handleSubmit = (data: MetadataFormData) => { const metadata = isMetadataModified ? data.metadata : undefined; const privateMetadata = isPrivateMetadataModified ? data.privateMetadata : undefined; return onSubmit({ metadata, privateMetadata }); }; const initial: MetadataFormData = { metadata: order?.metadata.map(mapMetadataItemToInput), privateMetadata: order?.privateMetadata.map(mapMetadataItemToInput) }; return (
{({ change, data, hasChanged, submit }) => { const changeMetadata = makeMetadataChangeHandler(change); return ( {intl.formatMessage(sectionNames.orders)} order.number) ? "#" + order.number : undefined} > {canCancel && ( )}
{order && order.created ? ( ) : ( )}
{unfulfilled.length > 0 && ( )} {renderCollection( maybe(() => order.fulfillments), (fulfillment, fulfillmentIndex) => ( fulfillment.id, "loading")} > {!( unfulfilled.length === 0 && fulfillmentIndex === 0 ) && } order.number)} onOrderFulfillmentCancel={() => onFulfillmentCancel(fulfillment.id) } onTrackingCodeAdd={() => onFulfillmentTrackingNumberUpdate(fulfillment.id) } /> ) )} order.events)} onNoteAdd={onNoteAdd} />
order.customerNote)} />
); }}
); }; OrderDetailsPage.displayName = "OrderDetailsPage"; export default OrderDetailsPage;