import { WindowTitle } from "@saleor/components/WindowTitle"; import { DEFAULT_INITIAL_SEARCH_DATA } from "@saleor/config"; import useNavigator from "@saleor/hooks/useNavigator"; import useUser from "@saleor/hooks/useUser"; import OrderCannotCancelOrderDialog from "@saleor/orders/components/OrderCannotCancelOrderDialog"; import OrderInvoiceEmailSendDialog from "@saleor/orders/components/OrderInvoiceEmailSendDialog"; import { OrderDiscountProvider } from "@saleor/products/components/OrderDiscountProviders/OrderDiscountProvider"; import { OrderLineDiscountProvider } from "@saleor/products/components/OrderDiscountProviders/OrderLineDiscountProvider"; import { mapEdgesToItems } from "@saleor/utils/maps"; import { useWarehouseList } from "@saleor/warehouses/queries"; import React from "react"; import { useIntl } from "react-intl"; import { customerUrl } from "../../../../customers/urls"; import { getMutationState, getStringOrPlaceholder } from "../../../../misc"; import { productUrl } from "../../../../products/urls"; import { FulfillmentStatus } from "../../../../types/globalTypes"; import OrderCancelDialog from "../../../components/OrderCancelDialog"; import OrderDetailsPage from "../../../components/OrderDetailsPage"; import OrderFulfillmentCancelDialog from "../../../components/OrderFulfillmentCancelDialog"; import OrderFulfillmentTrackingDialog from "../../../components/OrderFulfillmentTrackingDialog"; import OrderMarkAsPaidDialog from "../../../components/OrderMarkAsPaidDialog/OrderMarkAsPaidDialog"; import OrderPaymentDialog from "../../../components/OrderPaymentDialog"; import OrderPaymentVoidDialog from "../../../components/OrderPaymentVoidDialog"; import OrderProductAddDialog from "../../../components/OrderProductAddDialog"; import OrderShippingMethodEditDialog from "../../../components/OrderShippingMethodEditDialog"; import { useOrderVariantSearch } from "../../../queries"; import { orderFulfillUrl, orderListUrl, orderRefundUrl, orderReturnPath, orderUrl, OrderUrlQueryParams } from "../../../urls"; interface OrderUnconfirmedDetailsProps { id: string; params: OrderUrlQueryParams; data: any; orderAddNote: any; orderLineUpdate: any; orderLineDelete: any; orderInvoiceRequest: any; handleSubmit: any; orderCancel: any; orderShippingMethodUpdate: any; orderLinesAdd: any; orderPaymentMarkAsPaid: any; orderVoid: any; orderPaymentCapture: any; orderFulfillmentCancel: any; orderFulfillmentUpdateTracking: any; orderInvoiceSend: any; updateMetadataOpts: any; updatePrivateMetadataOpts: any; openModal: any; closeModal: any; } export const OrderUnconfirmedDetails: React.FC = ({ id, params, data, orderAddNote, orderLineUpdate, orderLineDelete, orderInvoiceRequest, handleSubmit, orderCancel, orderShippingMethodUpdate, orderLinesAdd, orderPaymentMarkAsPaid, orderVoid, orderPaymentCapture, orderFulfillmentCancel, orderFulfillmentUpdateTracking, orderInvoiceSend, updateMetadataOpts, updatePrivateMetadataOpts, openModal, closeModal }) => { const order = data.order; const navigate = useNavigator(); const { user } = useUser(); const { loadMore, search: variantSearch, result: variantSearchOpts } = useOrderVariantSearch({ variables: { ...DEFAULT_INITIAL_SEARCH_DATA, channel: order.channel.slug } }); const warehouses = useWarehouseList({ displayLoader: true, variables: { first: 30 } }); const intl = useIntl(); const [transactionReference, setTransactionReference] = React.useState(""); const handleBack = () => navigate(orderListUrl()); return ( <> navigate(orderReturnPath(id))} disabled={ updateMetadataOpts.loading || updatePrivateMetadataOpts.loading } onNoteAdd={variables => orderAddNote.mutate({ input: variables, order: id }) } onBack={handleBack} order={order} onOrderLineAdd={() => openModal("add-order-line")} onOrderLineChange={(id, data) => orderLineUpdate.mutate({ id, input: data }) } onOrderLineRemove={id => orderLineDelete.mutate({ id })} onShippingMethodEdit={() => openModal("edit-shipping")} saveButtonBarState={getMutationState( updateMetadataOpts.called || updatePrivateMetadataOpts.called, updateMetadataOpts.loading || updatePrivateMetadataOpts.loading, [ ...(updateMetadataOpts.data?.deleteMetadata.errors || []), ...(updateMetadataOpts.data?.updateMetadata.errors || []), ...(updatePrivateMetadataOpts.data?.deletePrivateMetadata .errors || []), ...(updatePrivateMetadataOpts.data?.updatePrivateMetadata .errors || []) ] )} shippingMethods={data?.order?.availableShippingMethods || []} userPermissions={user?.userPermissions || []} onOrderCancel={() => openModal("cancel")} onOrderFulfill={() => navigate(orderFulfillUrl(id))} onFulfillmentCancel={fulfillmentId => navigate( orderUrl(id, { action: "cancel-fulfillment", id: fulfillmentId }) ) } onFulfillmentTrackingNumberUpdate={fulfillmentId => navigate( orderUrl(id, { action: "edit-fulfillment", id: fulfillmentId }) ) } onPaymentCapture={() => openModal("capture")} onPaymentVoid={() => openModal("void")} onPaymentRefund={() => navigate(orderRefundUrl(id))} onProductClick={id => () => navigate(productUrl(id))} onBillingAddressEdit={() => openModal("edit-billing-address")} onShippingAddressEdit={() => openModal("edit-shipping-address")} onPaymentPaid={() => openModal("mark-paid")} onProfileView={() => navigate(customerUrl(order.user.id))} onInvoiceClick={id => window.open( order.invoices.find(invoice => invoice.id === id)?.url, "_blank" ) } onInvoiceGenerate={() => orderInvoiceRequest.mutate({ orderId: id }) } onInvoiceSend={id => openModal("invoice-send", { id })} onSubmit={handleSubmit} /> fulfillment.status === FulfillmentStatus.FULFILLED ) } /> orderCancel.mutate({ id }) } /> orderShippingMethodUpdate.mutate({ id, input: { shippingMethod: variables.shippingMethod } }) } /> orderLinesAdd.mutate({ id, input: variants.map(variant => ({ quantity: 1, variantId: variant.id })) }) } /> orderPaymentMarkAsPaid.mutate({ id, transactionReference }) } open={params.action === "mark-paid"} transactionReference={transactionReference} handleTransactionReference={({ target }) => setTransactionReference(target.value) } /> orderVoid.mutate({ id })} /> orderPaymentCapture.mutate({ ...variables, id }) } /> orderFulfillmentCancel.mutate({ id: params.id, input: variables }) } onClose={closeModal} /> fulfillment.id === params.id )?.trackingNumber )} onConfirm={variables => orderFulfillmentUpdateTracking.mutate({ id: params.id, input: { ...variables, notifyCustomer: true } }) } onClose={closeModal} /> invoice.id === params.id)} onClose={closeModal} onSend={() => orderInvoiceSend.mutate({ id: params.id })} /> ); }; export default OrderUnconfirmedDetails;