2020-05-14 09:30:32 +00:00
|
|
|
import NotFoundPage from "@saleor/components/NotFoundPage";
|
2019-06-19 14:40:52 +00:00
|
|
|
import { WindowTitle } from "@saleor/components/WindowTitle";
|
2019-11-21 14:59:06 +00:00
|
|
|
import { DEFAULT_INITIAL_SEARCH_DATA } from "@saleor/config";
|
2019-06-19 14:40:52 +00:00
|
|
|
import useNavigator from "@saleor/hooks/useNavigator";
|
2019-10-09 10:18:44 +00:00
|
|
|
import useUser from "@saleor/hooks/useUser";
|
2020-05-14 09:30:32 +00:00
|
|
|
import OrderCannotCancelOrderDialog from "@saleor/orders/components/OrderCannotCancelOrderDialog";
|
2019-11-19 16:32:35 +00:00
|
|
|
import useCustomerSearch from "@saleor/searches/useCustomerSearch";
|
2019-12-06 14:58:28 +00:00
|
|
|
import createDialogActionHandlers from "@saleor/utils/handlers/dialogActionHandlers";
|
2020-04-27 14:26:57 +00:00
|
|
|
import { useWarehouseList } from "@saleor/warehouses/queries";
|
2020-05-14 09:30:32 +00:00
|
|
|
import React from "react";
|
|
|
|
import { useIntl } from "react-intl";
|
|
|
|
|
2019-06-19 14:40:52 +00:00
|
|
|
import { customerUrl } from "../../../customers/urls";
|
2020-03-16 12:28:52 +00:00
|
|
|
import {
|
2020-05-14 09:30:32 +00:00
|
|
|
getStringOrPlaceholder,
|
2020-03-16 12:28:52 +00:00
|
|
|
maybe,
|
2020-05-14 09:30:32 +00:00
|
|
|
transformAddressToForm
|
2020-03-16 12:28:52 +00:00
|
|
|
} from "../../../misc";
|
2019-06-19 14:40:52 +00:00
|
|
|
import { productUrl } from "../../../products/urls";
|
2020-05-14 09:30:32 +00:00
|
|
|
import { FulfillmentStatus, OrderStatus } from "../../../types/globalTypes";
|
2019-06-19 14:40:52 +00:00
|
|
|
import OrderAddressEditDialog from "../../components/OrderAddressEditDialog";
|
|
|
|
import OrderCancelDialog from "../../components/OrderCancelDialog";
|
|
|
|
import OrderDetailsPage from "../../components/OrderDetailsPage";
|
|
|
|
import OrderDraftCancelDialog from "../../components/OrderDraftCancelDialog/OrderDraftCancelDialog";
|
|
|
|
import OrderDraftFinalizeDialog, {
|
|
|
|
OrderDraftFinalizeWarning
|
|
|
|
} from "../../components/OrderDraftFinalizeDialog";
|
|
|
|
import OrderDraftPage from "../../components/OrderDraftPage";
|
|
|
|
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 OrderOperations from "../../containers/OrderOperations";
|
2019-11-20 10:24:42 +00:00
|
|
|
import { TypedOrderDetailsQuery, useOrderVariantSearch } from "../../queries";
|
2019-06-19 14:40:52 +00:00
|
|
|
import { OrderDetails_order } from "../../types/OrderDetails";
|
|
|
|
import {
|
2020-05-14 09:30:32 +00:00
|
|
|
orderFulfillUrl,
|
2019-06-19 14:40:52 +00:00
|
|
|
orderListUrl,
|
|
|
|
orderUrl,
|
2020-04-20 17:18:20 +00:00
|
|
|
OrderUrlDialog,
|
2020-05-14 09:30:32 +00:00
|
|
|
OrderUrlQueryParams
|
2019-06-19 14:40:52 +00:00
|
|
|
} from "../../urls";
|
|
|
|
import { OrderDetailsMessages } from "./OrderDetailsMessages";
|
|
|
|
|
|
|
|
const orderDraftFinalizeWarnings = (order: OrderDetails_order) => {
|
|
|
|
const warnings = [] as OrderDraftFinalizeWarning[];
|
|
|
|
if (!(order && order.shippingAddress)) {
|
2019-10-17 11:47:11 +00:00
|
|
|
warnings.push(OrderDraftFinalizeWarning.NO_SHIPPING);
|
2019-06-19 14:40:52 +00:00
|
|
|
}
|
|
|
|
if (!(order && order.billingAddress)) {
|
2019-10-17 11:47:11 +00:00
|
|
|
warnings.push(OrderDraftFinalizeWarning.NO_BILLING);
|
2019-06-19 14:40:52 +00:00
|
|
|
}
|
|
|
|
if (!(order && (order.user || order.userEmail))) {
|
2019-10-17 11:47:11 +00:00
|
|
|
warnings.push(OrderDraftFinalizeWarning.NO_USER);
|
2019-06-19 14:40:52 +00:00
|
|
|
}
|
|
|
|
if (
|
|
|
|
order &&
|
|
|
|
order.lines &&
|
|
|
|
order.lines.filter(line => line.isShippingRequired).length > 0 &&
|
|
|
|
order.shippingMethod === null
|
|
|
|
) {
|
2019-10-17 11:47:11 +00:00
|
|
|
warnings.push(OrderDraftFinalizeWarning.NO_SHIPPING_METHOD);
|
2019-06-19 14:40:52 +00:00
|
|
|
}
|
|
|
|
if (
|
|
|
|
order &&
|
|
|
|
order.lines &&
|
|
|
|
order.lines.filter(line => line.isShippingRequired).length === 0 &&
|
|
|
|
order.shippingMethod !== null
|
|
|
|
) {
|
2019-10-17 11:47:11 +00:00
|
|
|
warnings.push(OrderDraftFinalizeWarning.UNNECESSARY_SHIPPING_METHOD);
|
2019-06-19 14:40:52 +00:00
|
|
|
}
|
|
|
|
return warnings;
|
|
|
|
};
|
|
|
|
|
|
|
|
interface OrderDetailsProps {
|
|
|
|
id: string;
|
|
|
|
params: OrderUrlQueryParams;
|
|
|
|
}
|
|
|
|
|
2019-11-07 11:34:54 +00:00
|
|
|
export const OrderDetails: React.FC<OrderDetailsProps> = ({ id, params }) => {
|
2019-06-19 14:40:52 +00:00
|
|
|
const navigate = useNavigator();
|
2019-10-09 10:18:44 +00:00
|
|
|
const { user } = useUser();
|
2019-11-19 16:32:35 +00:00
|
|
|
const {
|
|
|
|
loadMore: loadMoreCustomers,
|
|
|
|
search: searchUsers,
|
|
|
|
result: users
|
|
|
|
} = useCustomerSearch({
|
|
|
|
variables: DEFAULT_INITIAL_SEARCH_DATA
|
|
|
|
});
|
2019-11-20 10:24:42 +00:00
|
|
|
const {
|
|
|
|
loadMore,
|
|
|
|
search: variantSearch,
|
|
|
|
result: variantSearchOpts
|
|
|
|
} = useOrderVariantSearch({
|
|
|
|
variables: DEFAULT_INITIAL_SEARCH_DATA
|
|
|
|
});
|
2020-04-27 14:26:57 +00:00
|
|
|
const warehouses = useWarehouseList({
|
|
|
|
displayLoader: true,
|
|
|
|
variables: {
|
|
|
|
first: 30
|
|
|
|
}
|
|
|
|
});
|
2020-03-16 12:28:52 +00:00
|
|
|
const intl = useIntl();
|
|
|
|
|
|
|
|
const [openModal, closeModal] = createDialogActionHandlers<
|
|
|
|
OrderUrlDialog,
|
|
|
|
OrderUrlQueryParams
|
|
|
|
>(navigate, params => orderUrl(id, params), params);
|
2019-06-19 14:40:52 +00:00
|
|
|
|
2020-02-20 14:18:22 +00:00
|
|
|
const handleBack = () => navigate(orderListUrl());
|
|
|
|
|
2019-06-19 14:40:52 +00:00
|
|
|
return (
|
2020-02-20 14:18:22 +00:00
|
|
|
<TypedOrderDetailsQuery displayLoader variables={{ id }}>
|
2019-06-19 14:40:52 +00:00
|
|
|
{({ data, loading }) => {
|
2020-02-20 14:18:22 +00:00
|
|
|
const order = data?.order;
|
|
|
|
|
|
|
|
if (order === null) {
|
|
|
|
return <NotFoundPage onBack={handleBack} />;
|
|
|
|
}
|
|
|
|
|
2019-06-19 14:40:52 +00:00
|
|
|
return (
|
2020-03-16 12:28:52 +00:00
|
|
|
<OrderDetailsMessages id={id} params={params}>
|
2019-11-19 16:32:35 +00:00
|
|
|
{orderMessages => (
|
|
|
|
<OrderOperations
|
|
|
|
order={id}
|
|
|
|
onNoteAdd={orderMessages.handleNoteAdd}
|
|
|
|
onOrderCancel={orderMessages.handleOrderCancel}
|
|
|
|
onOrderVoid={orderMessages.handleOrderVoid}
|
|
|
|
onPaymentCapture={orderMessages.handlePaymentCapture}
|
|
|
|
onPaymentRefund={orderMessages.handlePaymentRefund}
|
|
|
|
onUpdate={orderMessages.handleUpdate}
|
|
|
|
onDraftUpdate={orderMessages.handleDraftUpdate}
|
|
|
|
onShippingMethodUpdate={
|
|
|
|
orderMessages.handleShippingMethodUpdate
|
|
|
|
}
|
|
|
|
onOrderLineDelete={orderMessages.handleOrderLineDelete}
|
|
|
|
onOrderLinesAdd={orderMessages.handleOrderLinesAdd}
|
|
|
|
onOrderLineUpdate={orderMessages.handleOrderLineUpdate}
|
|
|
|
onOrderFulfillmentCancel={
|
|
|
|
orderMessages.handleOrderFulfillmentCancel
|
|
|
|
}
|
|
|
|
onOrderFulfillmentUpdate={
|
|
|
|
orderMessages.handleOrderFulfillmentUpdate
|
|
|
|
}
|
|
|
|
onDraftFinalize={orderMessages.handleDraftFinalize}
|
|
|
|
onDraftCancel={orderMessages.handleDraftCancel}
|
|
|
|
onOrderMarkAsPaid={orderMessages.handleOrderMarkAsPaid}
|
|
|
|
>
|
|
|
|
{({
|
|
|
|
orderAddNote,
|
|
|
|
orderCancel,
|
|
|
|
orderDraftUpdate,
|
|
|
|
orderLinesAdd,
|
|
|
|
orderLineDelete,
|
|
|
|
orderLineUpdate,
|
|
|
|
orderPaymentCapture,
|
|
|
|
orderPaymentRefund,
|
|
|
|
orderVoid,
|
|
|
|
orderShippingMethodUpdate,
|
|
|
|
orderUpdate,
|
|
|
|
orderFulfillmentCancel,
|
|
|
|
orderFulfillmentUpdateTracking,
|
|
|
|
orderDraftCancel,
|
|
|
|
orderDraftFinalize,
|
|
|
|
orderPaymentMarkAsPaid
|
2019-12-06 17:11:46 +00:00
|
|
|
}) => (
|
|
|
|
<>
|
2020-03-16 12:28:52 +00:00
|
|
|
{order?.status !== OrderStatus.DRAFT ? (
|
2019-12-06 17:11:46 +00:00
|
|
|
<>
|
|
|
|
<WindowTitle
|
2020-03-16 12:28:52 +00:00
|
|
|
title={intl.formatMessage(
|
|
|
|
{
|
|
|
|
defaultMessage: "Order #{orderNumber}",
|
|
|
|
description: "window title"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
orderNumber: getStringOrPlaceholder(
|
|
|
|
data?.order?.number
|
|
|
|
)
|
|
|
|
}
|
|
|
|
)}
|
2019-12-06 17:11:46 +00:00
|
|
|
/>
|
|
|
|
<OrderDetailsPage
|
|
|
|
onNoteAdd={variables =>
|
|
|
|
orderAddNote.mutate({
|
|
|
|
input: variables,
|
|
|
|
order: id
|
|
|
|
})
|
|
|
|
}
|
2020-02-20 14:18:22 +00:00
|
|
|
onBack={handleBack}
|
2019-12-06 17:11:46 +00:00
|
|
|
order={order}
|
|
|
|
shippingMethods={maybe(
|
|
|
|
() => data.order.availableShippingMethods,
|
|
|
|
[]
|
|
|
|
)}
|
2020-04-23 15:43:08 +00:00
|
|
|
userPermissions={user?.userPermissions || []}
|
2019-12-06 17:11:46 +00:00
|
|
|
onOrderCancel={() => openModal("cancel")}
|
2020-04-20 17:18:20 +00:00
|
|
|
onOrderFulfill={() => navigate(orderFulfillUrl(id))}
|
2019-12-06 17:11:46 +00:00
|
|
|
onFulfillmentCancel={fulfillmentId =>
|
|
|
|
navigate(
|
|
|
|
orderUrl(id, {
|
|
|
|
action: "cancel-fulfillment",
|
|
|
|
id: fulfillmentId
|
2019-11-19 16:32:35 +00:00
|
|
|
})
|
2019-12-06 17:11:46 +00:00
|
|
|
)
|
|
|
|
}
|
|
|
|
onFulfillmentTrackingNumberUpdate={fulfillmentId =>
|
|
|
|
navigate(
|
|
|
|
orderUrl(id, {
|
|
|
|
action: "edit-fulfillment",
|
|
|
|
id: fulfillmentId
|
2019-11-19 16:32:35 +00:00
|
|
|
})
|
2019-12-06 17:11:46 +00:00
|
|
|
)
|
|
|
|
}
|
|
|
|
onPaymentCapture={() => openModal("capture")}
|
|
|
|
onPaymentVoid={() => openModal("void")}
|
|
|
|
onPaymentRefund={() => openModal("refund")}
|
|
|
|
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))
|
|
|
|
}
|
2020-06-30 12:38:04 +00:00
|
|
|
onInvoiceClick={invoice =>
|
2020-06-22 16:34:59 +00:00
|
|
|
window.open(invoice.url, "_blank")
|
|
|
|
}
|
2019-12-06 17:11:46 +00:00
|
|
|
/>
|
2020-04-28 01:09:31 +00:00
|
|
|
<OrderCannotCancelOrderDialog
|
|
|
|
onClose={closeModal}
|
|
|
|
open={
|
|
|
|
params.action === "cancel" &&
|
|
|
|
order?.fulfillments.some(
|
|
|
|
fulfillment =>
|
|
|
|
fulfillment.status ===
|
|
|
|
FulfillmentStatus.FULFILLED
|
|
|
|
)
|
|
|
|
}
|
|
|
|
/>
|
2019-12-06 17:11:46 +00:00
|
|
|
<OrderCancelDialog
|
2020-03-16 12:28:52 +00:00
|
|
|
confirmButtonState={orderCancel.opts.status}
|
|
|
|
errors={
|
2020-03-03 11:20:39 +00:00
|
|
|
orderCancel.opts.data?.orderCancel.errors || []
|
2020-03-16 12:28:52 +00:00
|
|
|
}
|
|
|
|
number={order?.number}
|
2019-12-06 17:11:46 +00:00
|
|
|
open={params.action === "cancel"}
|
|
|
|
onClose={closeModal}
|
2020-04-28 01:09:31 +00:00
|
|
|
onSubmit={() =>
|
2019-12-06 17:11:46 +00:00
|
|
|
orderCancel.mutate({
|
2020-04-28 01:09:31 +00:00
|
|
|
id
|
2019-12-06 17:11:46 +00:00
|
|
|
})
|
|
|
|
}
|
|
|
|
/>
|
|
|
|
<OrderMarkAsPaidDialog
|
2020-03-16 12:28:52 +00:00
|
|
|
confirmButtonState={
|
|
|
|
orderPaymentMarkAsPaid.opts.status
|
|
|
|
}
|
|
|
|
errors={
|
|
|
|
orderPaymentMarkAsPaid.opts.data?.orderMarkAsPaid
|
|
|
|
.errors || []
|
|
|
|
}
|
2019-12-06 17:11:46 +00:00
|
|
|
onClose={closeModal}
|
|
|
|
onConfirm={() =>
|
|
|
|
orderPaymentMarkAsPaid.mutate({
|
|
|
|
id
|
|
|
|
})
|
|
|
|
}
|
|
|
|
open={params.action === "mark-paid"}
|
|
|
|
/>
|
|
|
|
<OrderPaymentVoidDialog
|
2020-03-16 12:28:52 +00:00
|
|
|
confirmButtonState={orderVoid.opts.status}
|
|
|
|
errors={orderVoid.opts.data?.orderVoid.errors || []}
|
2019-12-06 17:11:46 +00:00
|
|
|
open={params.action === "void"}
|
|
|
|
onClose={closeModal}
|
|
|
|
onConfirm={() => orderVoid.mutate({ id })}
|
|
|
|
/>
|
|
|
|
<OrderPaymentDialog
|
2020-03-16 12:28:52 +00:00
|
|
|
confirmButtonState={orderPaymentCapture.opts.status}
|
|
|
|
errors={
|
|
|
|
orderPaymentCapture.opts.data?.orderCapture
|
|
|
|
.errors || []
|
|
|
|
}
|
|
|
|
initial={order?.total.gross.amount}
|
2019-12-06 17:11:46 +00:00
|
|
|
open={params.action === "capture"}
|
|
|
|
variant="capture"
|
|
|
|
onClose={closeModal}
|
|
|
|
onSubmit={variables =>
|
|
|
|
orderPaymentCapture.mutate({
|
|
|
|
...variables,
|
|
|
|
id
|
|
|
|
})
|
|
|
|
}
|
|
|
|
/>
|
|
|
|
<OrderPaymentDialog
|
2020-03-16 12:28:52 +00:00
|
|
|
confirmButtonState={orderPaymentRefund.opts.status}
|
|
|
|
errors={
|
2020-03-03 11:20:39 +00:00
|
|
|
orderPaymentRefund.opts.data?.orderRefund.errors ||
|
2020-03-16 12:28:52 +00:00
|
|
|
[]
|
|
|
|
}
|
|
|
|
initial={order?.total.gross.amount}
|
2019-12-06 17:11:46 +00:00
|
|
|
open={params.action === "refund"}
|
|
|
|
variant="refund"
|
|
|
|
onClose={closeModal}
|
|
|
|
onSubmit={variables =>
|
|
|
|
orderPaymentRefund.mutate({
|
|
|
|
...variables,
|
|
|
|
id
|
|
|
|
})
|
|
|
|
}
|
|
|
|
/>
|
|
|
|
<OrderFulfillmentCancelDialog
|
2020-03-16 12:28:52 +00:00
|
|
|
confirmButtonState={
|
|
|
|
orderFulfillmentCancel.opts.status
|
|
|
|
}
|
|
|
|
errors={
|
|
|
|
orderFulfillmentCancel.opts.data
|
|
|
|
?.orderFulfillmentCancel.errors || []
|
|
|
|
}
|
2019-12-06 17:11:46 +00:00
|
|
|
open={params.action === "cancel-fulfillment"}
|
2020-04-27 14:26:57 +00:00
|
|
|
warehouses={
|
|
|
|
warehouses.data?.warehouses.edges.map(
|
|
|
|
edge => edge.node
|
|
|
|
) || []
|
|
|
|
}
|
2019-12-06 17:11:46 +00:00
|
|
|
onConfirm={variables =>
|
|
|
|
orderFulfillmentCancel.mutate({
|
|
|
|
id: params.id,
|
|
|
|
input: variables
|
|
|
|
})
|
|
|
|
}
|
|
|
|
onClose={closeModal}
|
|
|
|
/>
|
|
|
|
<OrderFulfillmentTrackingDialog
|
2020-03-16 12:28:52 +00:00
|
|
|
confirmButtonState={
|
|
|
|
orderFulfillmentUpdateTracking.opts.status
|
|
|
|
}
|
|
|
|
errors={
|
|
|
|
orderFulfillmentUpdateTracking.opts.data
|
|
|
|
?.orderFulfillmentUpdateTracking.errors || []
|
|
|
|
}
|
2019-12-06 17:11:46 +00:00
|
|
|
open={params.action === "edit-fulfillment"}
|
2020-03-16 12:28:52 +00:00
|
|
|
trackingNumber={getStringOrPlaceholder(
|
|
|
|
data?.order?.fulfillments.find(
|
|
|
|
fulfillment => fulfillment.id === params.id
|
|
|
|
)?.trackingNumber
|
2019-12-06 17:11:46 +00:00
|
|
|
)}
|
|
|
|
onConfirm={variables =>
|
|
|
|
orderFulfillmentUpdateTracking.mutate({
|
|
|
|
id: params.id,
|
|
|
|
input: {
|
2019-11-19 16:32:35 +00:00
|
|
|
...variables,
|
2019-12-06 17:11:46 +00:00
|
|
|
notifyCustomer: true
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
onClose={closeModal}
|
|
|
|
/>
|
|
|
|
</>
|
|
|
|
) : (
|
|
|
|
<>
|
|
|
|
<WindowTitle
|
2020-03-16 12:28:52 +00:00
|
|
|
title={intl.formatMessage(
|
|
|
|
{
|
|
|
|
defaultMessage: "Draft Order #{orderNumber}",
|
|
|
|
description: "window title"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
orderNumber: getStringOrPlaceholder(
|
|
|
|
data?.order?.number
|
|
|
|
)
|
|
|
|
}
|
2019-12-06 17:11:46 +00:00
|
|
|
)}
|
|
|
|
/>
|
|
|
|
<OrderDraftPage
|
|
|
|
disabled={loading}
|
|
|
|
onNoteAdd={variables =>
|
|
|
|
orderAddNote.mutate({
|
|
|
|
input: variables,
|
|
|
|
order: id
|
|
|
|
})
|
|
|
|
}
|
|
|
|
users={maybe(
|
|
|
|
() =>
|
|
|
|
users.data.search.edges.map(edge => edge.node),
|
|
|
|
[]
|
|
|
|
)}
|
|
|
|
hasMore={maybe(
|
|
|
|
() => users.data.search.pageInfo.hasNextPage,
|
|
|
|
false
|
|
|
|
)}
|
|
|
|
onFetchMore={loadMoreCustomers}
|
|
|
|
fetchUsers={searchUsers}
|
|
|
|
loading={users.loading}
|
|
|
|
usersLoading={users.loading}
|
|
|
|
onCustomerEdit={data =>
|
|
|
|
orderDraftUpdate.mutate({
|
|
|
|
id,
|
|
|
|
input: data
|
|
|
|
})
|
|
|
|
}
|
|
|
|
onDraftFinalize={() => openModal("finalize")}
|
|
|
|
onDraftRemove={() => openModal("cancel")}
|
|
|
|
onOrderLineAdd={() => openModal("add-order-line")}
|
|
|
|
onBack={() => navigate(orderListUrl())}
|
|
|
|
order={order}
|
|
|
|
countries={maybe(() => data.shop.countries, []).map(
|
|
|
|
country => ({
|
|
|
|
code: country.code,
|
|
|
|
label: country.country
|
|
|
|
})
|
|
|
|
)}
|
|
|
|
onProductClick={id => () =>
|
|
|
|
navigate(productUrl(encodeURIComponent(id)))}
|
|
|
|
onBillingAddressEdit={() =>
|
|
|
|
openModal("edit-billing-address")
|
|
|
|
}
|
|
|
|
onShippingAddressEdit={() =>
|
|
|
|
openModal("edit-shipping-address")
|
|
|
|
}
|
|
|
|
onShippingMethodEdit={() =>
|
|
|
|
openModal("edit-shipping")
|
|
|
|
}
|
|
|
|
onOrderLineRemove={id =>
|
|
|
|
orderLineDelete.mutate({ id })
|
|
|
|
}
|
|
|
|
onOrderLineChange={(id, data) =>
|
|
|
|
orderLineUpdate.mutate({
|
|
|
|
id,
|
|
|
|
input: data
|
|
|
|
})
|
|
|
|
}
|
|
|
|
saveButtonBarState="default"
|
|
|
|
onProfileView={() =>
|
|
|
|
navigate(customerUrl(order.user.id))
|
|
|
|
}
|
2020-04-23 15:43:08 +00:00
|
|
|
userPermissions={user?.userPermissions || []}
|
2019-12-06 17:11:46 +00:00
|
|
|
/>
|
|
|
|
<OrderDraftCancelDialog
|
2020-03-16 12:28:52 +00:00
|
|
|
confirmButtonState={orderDraftCancel.opts.status}
|
|
|
|
errors={
|
|
|
|
orderDraftCancel.opts.data?.draftOrderDelete
|
|
|
|
.errors || []
|
|
|
|
}
|
2019-12-06 17:11:46 +00:00
|
|
|
onClose={closeModal}
|
|
|
|
onConfirm={() => orderDraftCancel.mutate({ id })}
|
|
|
|
open={params.action === "cancel"}
|
2020-03-16 12:28:52 +00:00
|
|
|
orderNumber={getStringOrPlaceholder(order?.number)}
|
2019-12-06 17:11:46 +00:00
|
|
|
/>
|
|
|
|
<OrderDraftFinalizeDialog
|
2019-12-06 17:17:44 +00:00
|
|
|
confirmButtonState={orderDraftFinalize.opts.status}
|
2020-03-16 12:28:52 +00:00
|
|
|
errors={
|
|
|
|
orderDraftFinalize.opts.data?.draftOrderComplete
|
|
|
|
.errors || []
|
|
|
|
}
|
2019-12-06 17:11:46 +00:00
|
|
|
onClose={closeModal}
|
|
|
|
onConfirm={() => orderDraftFinalize.mutate({ id })}
|
|
|
|
open={params.action === "finalize"}
|
2020-03-16 12:28:52 +00:00
|
|
|
orderNumber={getStringOrPlaceholder(order?.number)}
|
2019-12-06 17:11:46 +00:00
|
|
|
warnings={orderDraftFinalizeWarnings(order)}
|
|
|
|
/>
|
|
|
|
<OrderShippingMethodEditDialog
|
2020-03-16 12:28:52 +00:00
|
|
|
confirmButtonState={
|
|
|
|
orderShippingMethodUpdate.opts.status
|
|
|
|
}
|
|
|
|
errors={
|
|
|
|
orderShippingMethodUpdate.opts.data
|
|
|
|
?.orderUpdateShipping.errors || []
|
|
|
|
}
|
2019-12-06 17:11:46 +00:00
|
|
|
open={params.action === "edit-shipping"}
|
2020-03-16 12:28:52 +00:00
|
|
|
shippingMethod={order?.shippingMethod?.id}
|
|
|
|
shippingMethods={order?.availableShippingMethods}
|
2019-12-06 17:11:46 +00:00
|
|
|
onClose={closeModal}
|
|
|
|
onSubmit={variables =>
|
|
|
|
orderShippingMethodUpdate.mutate({
|
|
|
|
id,
|
|
|
|
input: {
|
|
|
|
shippingMethod: variables.shippingMethod
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
/>
|
|
|
|
<OrderProductAddDialog
|
2020-03-16 12:28:52 +00:00
|
|
|
confirmButtonState={orderLinesAdd.opts.status}
|
|
|
|
errors={
|
|
|
|
orderLinesAdd.opts.data?.draftOrderLinesCreate
|
|
|
|
.errors || []
|
|
|
|
}
|
2019-12-06 17:11:46 +00:00
|
|
|
loading={variantSearchOpts.loading}
|
|
|
|
open={params.action === "add-order-line"}
|
2020-03-16 12:28:52 +00:00
|
|
|
hasMore={
|
|
|
|
variantSearchOpts.data?.search.pageInfo.hasNextPage
|
|
|
|
}
|
|
|
|
products={variantSearchOpts.data?.search.edges.map(
|
|
|
|
edge => edge.node
|
2019-12-06 17:11:46 +00:00
|
|
|
)}
|
|
|
|
onClose={closeModal}
|
|
|
|
onFetch={variantSearch}
|
|
|
|
onFetchMore={loadMore}
|
|
|
|
onSubmit={variants =>
|
|
|
|
orderLinesAdd.mutate({
|
|
|
|
id,
|
|
|
|
input: variants.map(variant => ({
|
|
|
|
quantity: 1,
|
|
|
|
variantId: variant.id
|
|
|
|
}))
|
|
|
|
})
|
|
|
|
}
|
|
|
|
/>
|
|
|
|
</>
|
|
|
|
)}
|
|
|
|
<OrderAddressEditDialog
|
2020-03-16 12:28:52 +00:00
|
|
|
confirmButtonState={orderUpdate.opts.status}
|
|
|
|
address={transformAddressToForm(order?.shippingAddress)}
|
|
|
|
countries={
|
|
|
|
data?.shop?.countries.map(country => ({
|
2019-12-06 17:11:46 +00:00
|
|
|
code: country.code,
|
|
|
|
label: country.country
|
2020-03-16 12:28:52 +00:00
|
|
|
})) || []
|
|
|
|
}
|
|
|
|
errors={orderUpdate.opts.data?.orderUpdate.errors || []}
|
2019-12-06 17:11:46 +00:00
|
|
|
open={params.action === "edit-shipping-address"}
|
|
|
|
variant="shipping"
|
|
|
|
onClose={closeModal}
|
|
|
|
onConfirm={shippingAddress =>
|
|
|
|
orderUpdate.mutate({
|
|
|
|
id,
|
|
|
|
input: {
|
|
|
|
shippingAddress
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
/>
|
|
|
|
<OrderAddressEditDialog
|
2020-03-16 12:28:52 +00:00
|
|
|
confirmButtonState={orderUpdate.opts.status}
|
|
|
|
address={transformAddressToForm(order?.billingAddress)}
|
|
|
|
countries={
|
|
|
|
data?.shop?.countries.map(country => ({
|
2019-12-06 17:11:46 +00:00
|
|
|
code: country.code,
|
|
|
|
label: country.country
|
2020-03-16 12:28:52 +00:00
|
|
|
})) || []
|
|
|
|
}
|
|
|
|
errors={orderUpdate.opts.data?.orderUpdate.errors || []}
|
2019-12-06 17:11:46 +00:00
|
|
|
open={params.action === "edit-billing-address"}
|
|
|
|
variant="billing"
|
|
|
|
onClose={closeModal}
|
|
|
|
onConfirm={billingAddress =>
|
|
|
|
orderUpdate.mutate({
|
|
|
|
id,
|
|
|
|
input: {
|
|
|
|
billingAddress
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
/>
|
|
|
|
</>
|
|
|
|
)}
|
2019-11-19 16:32:35 +00:00
|
|
|
</OrderOperations>
|
2019-06-19 14:40:52 +00:00
|
|
|
)}
|
2019-11-19 16:32:35 +00:00
|
|
|
</OrderDetailsMessages>
|
2019-06-19 14:40:52 +00:00
|
|
|
);
|
|
|
|
}}
|
|
|
|
</TypedOrderDetailsQuery>
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
|
|
|
export default OrderDetails;
|