
* Create user addresses select modal * Prepare user addresses select modal form * Add user addresses select modal to order draft details page * Update draft order validation of adresses in edit modal * Add Customer Change modal * Update snapshots and messages * Indication of address form errors by address type * Refactor addresses submiting * Refactor address transform functions * Add data-testids to addresses change dialog * Update customer address choice style * Trigger CI * Update customer addresses edit flow * Move styles outside of component files * Refactor after review * Refactor after review * Do not update customer if the same selected * Handle setting adress after edit customer with no addresses * Trigger CI
313 lines
9.5 KiB
TypeScript
313 lines
9.5 KiB
TypeScript
import messages from "@saleor/containers/BackgroundTasks/messages";
|
||
import useNavigator from "@saleor/hooks/useNavigator";
|
||
import useNotifier from "@saleor/hooks/useNotifier";
|
||
import getOrderErrorMessage from "@saleor/utils/errors/order";
|
||
import createDialogActionHandlers from "@saleor/utils/handlers/dialogActionHandlers";
|
||
import React from "react";
|
||
import { useIntl } from "react-intl";
|
||
|
||
import { InvoiceEmailSend } from "../../types/InvoiceEmailSend";
|
||
import { InvoiceRequest } from "../../types/InvoiceRequest";
|
||
import { OrderAddNote } from "../../types/OrderAddNote";
|
||
import { OrderCancel } from "../../types/OrderCancel";
|
||
import { OrderCapture } from "../../types/OrderCapture";
|
||
import { OrderDraftCancel } from "../../types/OrderDraftCancel";
|
||
import { OrderDraftFinalize } from "../../types/OrderDraftFinalize";
|
||
import { OrderDraftUpdate } from "../../types/OrderDraftUpdate";
|
||
import { OrderFulfillmentCancel } from "../../types/OrderFulfillmentCancel";
|
||
import { OrderFulfillmentUpdateTracking } from "../../types/OrderFulfillmentUpdateTracking";
|
||
import { OrderLineDelete } from "../../types/OrderLineDelete";
|
||
import { OrderLinesAdd } from "../../types/OrderLinesAdd";
|
||
import { OrderLineUpdate } from "../../types/OrderLineUpdate";
|
||
import { OrderMarkAsPaid } from "../../types/OrderMarkAsPaid";
|
||
import { OrderShippingMethodUpdate } from "../../types/OrderShippingMethodUpdate";
|
||
import { OrderUpdate } from "../../types/OrderUpdate";
|
||
import { OrderVoid } from "../../types/OrderVoid";
|
||
import { orderUrl, OrderUrlQueryParams } from "../../urls";
|
||
|
||
interface OrderDetailsMessages {
|
||
children: (props: {
|
||
handleDraftCancel: (data: OrderDraftCancel) => void;
|
||
handleDraftFinalize: (data: OrderDraftFinalize) => void;
|
||
handleDraftUpdate: (data: OrderDraftUpdate) => void;
|
||
handleNoteAdd: (data: OrderAddNote) => void;
|
||
handleOrderCancel: (data: OrderCancel) => void;
|
||
handleOrderFulfillmentCancel: (data: OrderFulfillmentCancel) => void;
|
||
handleOrderFulfillmentUpdate: (
|
||
data: OrderFulfillmentUpdateTracking
|
||
) => void;
|
||
handleOrderLinesAdd: (data: OrderLinesAdd) => void;
|
||
handleOrderLineDelete: (data: OrderLineDelete) => void;
|
||
handleOrderLineUpdate: (data: OrderLineUpdate) => void;
|
||
handleOrderMarkAsPaid: (data: OrderMarkAsPaid) => void;
|
||
handleOrderVoid: (data: OrderVoid) => void;
|
||
handlePaymentCapture: (data: OrderCapture) => void;
|
||
handleShippingMethodUpdate: (data: OrderShippingMethodUpdate) => void;
|
||
handleUpdate: (data: OrderUpdate) => void;
|
||
handleInvoiceGeneratePending: (data: InvoiceRequest) => void;
|
||
handleInvoiceGenerateFinished: (data: InvoiceRequest) => void;
|
||
handleInvoiceSend: (data: InvoiceEmailSend) => void;
|
||
}) => React.ReactElement;
|
||
id: string;
|
||
params: OrderUrlQueryParams;
|
||
}
|
||
|
||
export const OrderDetailsMessages: React.FC<OrderDetailsMessages> = ({
|
||
children,
|
||
id,
|
||
params
|
||
}) => {
|
||
const navigate = useNavigator();
|
||
const pushMessage = useNotifier();
|
||
const intl = useIntl();
|
||
|
||
const [, closeModal] = createDialogActionHandlers(
|
||
navigate,
|
||
params => orderUrl(id, params),
|
||
params
|
||
);
|
||
|
||
const handlePaymentCapture = (data: OrderCapture) => {
|
||
const errs = data.orderCapture?.errors;
|
||
if (errs.length === 0) {
|
||
pushMessage({
|
||
status: "success",
|
||
text: intl.formatMessage({
|
||
defaultMessage: "Payment successfully captured"
|
||
})
|
||
});
|
||
closeModal();
|
||
}
|
||
};
|
||
const handleOrderMarkAsPaid = (data: OrderMarkAsPaid) => {
|
||
const errs = data.orderMarkAsPaid?.errors;
|
||
if (errs.length === 0) {
|
||
pushMessage({
|
||
status: "success",
|
||
text: intl.formatMessage({
|
||
defaultMessage: "Order marked as paid"
|
||
})
|
||
});
|
||
closeModal();
|
||
}
|
||
};
|
||
const handleOrderCancel = (data: OrderCancel) => {
|
||
const errs = data.orderCancel?.errors;
|
||
if (errs.length === 0) {
|
||
pushMessage({
|
||
status: "success",
|
||
text: intl.formatMessage({
|
||
defaultMessage: "Order successfully cancelled"
|
||
})
|
||
});
|
||
closeModal();
|
||
}
|
||
};
|
||
const handleDraftCancel = (data: OrderDraftCancel) => {
|
||
const errs = data.draftOrderDelete?.errors;
|
||
if (errs.length === 0) {
|
||
pushMessage({
|
||
status: "success",
|
||
text: intl.formatMessage({
|
||
defaultMessage: "Order successfully cancelled"
|
||
})
|
||
});
|
||
closeModal();
|
||
}
|
||
};
|
||
const handleOrderVoid = (data: OrderVoid) => {
|
||
const errs = data.orderVoid?.errors;
|
||
if (errs.length === 0) {
|
||
pushMessage({
|
||
status: "success",
|
||
text: intl.formatMessage({
|
||
defaultMessage: "Order payment successfully voided"
|
||
})
|
||
});
|
||
closeModal();
|
||
}
|
||
};
|
||
const handleNoteAdd = (data: OrderAddNote) => {
|
||
const errs = data.orderAddNote?.errors;
|
||
if (errs.length === 0) {
|
||
pushMessage({
|
||
status: "success",
|
||
text: intl.formatMessage({
|
||
defaultMessage: "Note successfully added"
|
||
})
|
||
});
|
||
}
|
||
};
|
||
const handleUpdate = (data: OrderUpdate) => {
|
||
const errs = data.orderUpdate?.errors;
|
||
if (errs.length === 0) {
|
||
pushMessage({
|
||
status: "success",
|
||
text: intl.formatMessage({
|
||
defaultMessage: "Order successfully updated"
|
||
})
|
||
});
|
||
closeModal();
|
||
}
|
||
};
|
||
const handleDraftUpdate = (data: OrderDraftUpdate) => {
|
||
const errs = data.draftOrderUpdate?.errors;
|
||
if (errs.length === 0) {
|
||
pushMessage({
|
||
status: "success",
|
||
text: intl.formatMessage({
|
||
defaultMessage: "Order successfully updated"
|
||
})
|
||
});
|
||
closeModal();
|
||
}
|
||
};
|
||
const handleShippingMethodUpdate = (data: OrderShippingMethodUpdate) => {
|
||
const errs = data.orderUpdateShipping?.errors;
|
||
if (errs.length === 0) {
|
||
pushMessage({
|
||
status: "success",
|
||
text: intl.formatMessage({
|
||
defaultMessage: "Shipping method successfully updated"
|
||
})
|
||
});
|
||
closeModal();
|
||
}
|
||
};
|
||
const handleOrderLineDelete = (data: OrderLineDelete) => {
|
||
const errs = data.orderLineDelete?.errors;
|
||
if (errs.length === 0) {
|
||
pushMessage({
|
||
status: "success",
|
||
text: intl.formatMessage({
|
||
defaultMessage: "Order line deleted"
|
||
})
|
||
});
|
||
}
|
||
};
|
||
const handleOrderLinesAdd = (data: OrderLinesAdd) => {
|
||
const errs = data.orderLinesCreate?.errors;
|
||
if (errs.length === 0) {
|
||
pushMessage({
|
||
status: "success",
|
||
text: intl.formatMessage({
|
||
defaultMessage: "Order line added"
|
||
})
|
||
});
|
||
closeModal();
|
||
}
|
||
};
|
||
const handleOrderLineUpdate = (data: OrderLineUpdate) => {
|
||
const errs = data.orderLineUpdate?.errors;
|
||
if (errs.length === 0) {
|
||
pushMessage({
|
||
status: "success",
|
||
text: intl.formatMessage({
|
||
defaultMessage: "Order line updated"
|
||
})
|
||
});
|
||
} else {
|
||
errs.forEach(error =>
|
||
pushMessage({
|
||
status: "error",
|
||
text: getOrderErrorMessage(error, intl)
|
||
})
|
||
);
|
||
}
|
||
};
|
||
const handleOrderFulfillmentCancel = (data: OrderFulfillmentCancel) => {
|
||
const errs = data.orderFulfillmentCancel?.errors;
|
||
if (errs.length === 0) {
|
||
pushMessage({
|
||
status: "success",
|
||
text: intl.formatMessage({
|
||
defaultMessage: "Fulfillment successfully cancelled"
|
||
})
|
||
});
|
||
closeModal();
|
||
}
|
||
};
|
||
const handleOrderFulfillmentUpdate = (
|
||
data: OrderFulfillmentUpdateTracking
|
||
) => {
|
||
const errs = data.orderFulfillmentUpdateTracking?.errors;
|
||
if (errs.length === 0) {
|
||
pushMessage({
|
||
status: "success",
|
||
text: intl.formatMessage({
|
||
defaultMessage: "Fulfillment successfully updated"
|
||
})
|
||
});
|
||
closeModal();
|
||
}
|
||
};
|
||
const handleDraftFinalize = (data: OrderDraftFinalize) => {
|
||
const errs = data.draftOrderComplete?.errors;
|
||
if (errs.length === 0) {
|
||
pushMessage({
|
||
status: "success",
|
||
text: intl.formatMessage({
|
||
defaultMessage: "Draft order successfully finalized"
|
||
})
|
||
});
|
||
}
|
||
};
|
||
const handleInvoiceGeneratePending = (data: InvoiceRequest) => {
|
||
const errs = data.invoiceRequest?.errors;
|
||
if (errs.length === 0) {
|
||
pushMessage({
|
||
text: intl.formatMessage({
|
||
defaultMessage:
|
||
"We’re generating the invoice you requested. Please wait a couple of moments"
|
||
}),
|
||
title: intl.formatMessage({
|
||
defaultMessage: "Invoice is Generating"
|
||
})
|
||
});
|
||
closeModal();
|
||
}
|
||
};
|
||
const handleInvoiceGenerateFinished = (data: InvoiceRequest) => {
|
||
const errs = data.invoiceRequest?.errors;
|
||
if (errs.length === 0) {
|
||
pushMessage({
|
||
status: "success",
|
||
text: intl.formatMessage(messages.invoiceGenerateFinishedText),
|
||
title: intl.formatMessage(messages.invoiceGenerateFinishedTitle)
|
||
});
|
||
closeModal();
|
||
}
|
||
};
|
||
const handleInvoiceSend = (data: InvoiceEmailSend) => {
|
||
const errs = data.invoiceSendNotification?.errors;
|
||
if (errs.length === 0) {
|
||
pushMessage({
|
||
text: intl.formatMessage({
|
||
defaultMessage: "Invoice email sent"
|
||
})
|
||
});
|
||
closeModal();
|
||
}
|
||
};
|
||
|
||
return children({
|
||
handleDraftCancel,
|
||
handleDraftFinalize,
|
||
handleDraftUpdate,
|
||
handleInvoiceGenerateFinished,
|
||
handleInvoiceGeneratePending,
|
||
handleInvoiceSend,
|
||
handleNoteAdd,
|
||
handleOrderCancel,
|
||
handleOrderFulfillmentCancel,
|
||
handleOrderFulfillmentUpdate,
|
||
handleOrderLineDelete,
|
||
handleOrderLineUpdate,
|
||
handleOrderLinesAdd,
|
||
handleOrderMarkAsPaid,
|
||
handleOrderVoid,
|
||
handlePaymentCapture,
|
||
handleShippingMethodUpdate,
|
||
handleUpdate
|
||
});
|
||
};
|