saleor-dashboard/src/orders/views/OrderDetails/OrderDetailsMessages.tsx

315 lines
9.8 KiB
TypeScript
Raw Normal View History

2019-08-09 10:26:22 +00:00
import React from "react";
2019-06-19 14:40:52 +00:00
import useNavigator from "@saleor/hooks/useNavigator";
import useNotifier from "@saleor/hooks/useNotifier";
import i18n from "../../../i18n";
import { maybe } from "../../../misc";
import { OrderAddNote } from "../../types/OrderAddNote";
import { OrderCancel } from "../../types/OrderCancel";
import { OrderCapture } from "../../types/OrderCapture";
import { OrderCreateFulfillment } from "../../types/OrderCreateFulfillment";
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 { OrderRefund } from "../../types/OrderRefund";
import { OrderShippingMethodUpdate } from "../../types/OrderShippingMethodUpdate";
import { OrderUpdate } from "../../types/OrderUpdate";
import { OrderVoid } from "../../types/OrderVoid";
import { orderListUrl, orderUrl } 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;
handleOrderFulfillmentCreate: (data: OrderCreateFulfillment) => 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;
handlePaymentRefund: (data: OrderRefund) => void;
handleShippingMethodUpdate: (data: OrderShippingMethodUpdate) => void;
handleUpdate: (data: OrderUpdate) => void;
}) => React.ReactElement;
}
export const OrderDetailsMessages: React.StatelessComponent<
OrderDetailsMessages
> = ({ children }) => {
const navigate = useNavigator();
const pushMessage = useNotifier();
const handlePaymentCapture = (data: OrderCapture) => {
if (!maybe(() => data.orderCapture.errors.length)) {
pushMessage({
text: i18n.t("Payment successfully captured", {
context: "notification"
})
});
} else {
pushMessage({
text: i18n.t("Payment not captured: {{ errorMessage }}", {
context: "notification",
errorMessage: data.orderCapture.errors.filter(
error => error.field === "payment"
)[0].message
})
});
}
};
const handlePaymentRefund = (data: OrderRefund) => {
if (!maybe(() => data.orderRefund.errors.length)) {
pushMessage({
text: i18n.t("Payment successfully refunded", {
context: "notification"
})
});
} else {
pushMessage({
text: i18n.t("Payment not refunded: {{ errorMessage }}", {
context: "notification",
errorMessage: data.orderRefund.errors.filter(
error => error.field === "payment"
)[0].message
})
});
}
};
const handleOrderFulfillmentCreate = (data: OrderCreateFulfillment) => {
if (!maybe(() => data.orderFulfillmentCreate.errors.length)) {
pushMessage({
text: i18n.t("Items successfully fulfilled", {
context: "notification"
})
});
navigate(orderUrl(data.orderFulfillmentCreate.order.id), true);
} else {
pushMessage({
text: i18n.t("Could not fulfill items", {
context: "notification"
})
});
}
};
const handleOrderMarkAsPaid = (data: OrderMarkAsPaid) => {
if (!maybe(() => data.orderMarkAsPaid.errors.length)) {
pushMessage({
text: i18n.t("Order marked as paid", {
context: "notification"
})
});
navigate(orderUrl(data.orderMarkAsPaid.order.id), true);
} else {
pushMessage({
text: i18n.t("Could not mark order as paid", {
context: "notification"
})
});
}
};
const handleOrderCancel = (data: OrderCancel) => {
pushMessage({
text: i18n.t("Order successfully cancelled", {
context: "notification"
})
});
navigate(orderUrl(data.orderCancel.order.id), true);
};
const handleDraftCancel = () => {
pushMessage({
text: i18n.t("Order successfully cancelled", {
context: "notification"
})
});
navigate(orderListUrl(), true);
};
const handleOrderVoid = () => {
pushMessage({
text: i18n.t("Order payment successfully voided", {
context: "notification"
})
});
};
const handleNoteAdd = (data: OrderAddNote) => {
if (!maybe(() => data.orderAddNote.errors.length)) {
pushMessage({
text: i18n.t("Note successfully added", {
context: "notification"
})
});
} else {
pushMessage({
text: i18n.t("Could not add note", {
context: "notification"
})
});
}
};
const handleUpdate = (data: OrderUpdate) => {
if (!maybe(() => data.orderUpdate.errors.length)) {
pushMessage({
text: i18n.t("Order successfully updated", {
context: "notification"
})
});
navigate(orderUrl(data.orderUpdate.order.id), true);
}
};
const handleDraftUpdate = (data: OrderDraftUpdate) => {
if (!maybe(() => data.draftOrderUpdate.errors.length)) {
pushMessage({
text: i18n.t("Order successfully updated", {
context: "notification"
})
});
navigate(orderUrl(data.draftOrderUpdate.order.id), true);
}
};
const handleShippingMethodUpdate = (data: OrderShippingMethodUpdate) => {
if (!maybe(() => data.orderUpdateShipping.errors.length)) {
pushMessage({
text: i18n.t("Shipping method successfully updated", {
context: "notification"
})
});
} else {
pushMessage({
text: i18n.t("Could not update shipping method", {
context: "notification"
})
});
}
navigate(orderUrl(data.orderUpdateShipping.order.id), true);
};
const handleOrderLineDelete = (data: OrderLineDelete) => {
if (!maybe(() => data.draftOrderLineDelete.errors.length)) {
pushMessage({
text: i18n.t("Order line deleted", {
context: "notification"
})
});
} else {
pushMessage({
text: i18n.t("Could not delete order line", {
context: "notification"
})
});
}
};
const handleOrderLinesAdd = (data: OrderLinesAdd) => {
if (!maybe(() => data.draftOrderLinesCreate.errors.length)) {
pushMessage({
text: i18n.t("Order line added", {
context: "notification"
})
});
navigate(orderUrl(data.draftOrderLinesCreate.order.id), true);
} else {
pushMessage({
text: i18n.t("Could not create order line", {
context: "notification"
})
});
}
};
const handleOrderLineUpdate = (data: OrderLineUpdate) => {
if (!maybe(() => data.draftOrderLineUpdate.errors.length)) {
pushMessage({
text: i18n.t("Order line updated", {
context: "notification"
})
});
} else {
pushMessage({
text: i18n.t("Could not update order line", {
context: "notification"
})
});
}
};
const handleOrderFulfillmentCancel = (data: OrderFulfillmentCancel) => {
if (!maybe(() => data.orderFulfillmentCancel.errors.length)) {
pushMessage({
text: i18n.t("Fulfillment successfully cancelled", {
context: "notification"
})
});
navigate(orderUrl(data.orderFulfillmentCancel.order.id), true);
} else {
pushMessage({
text: i18n.t("Could not cancel fulfillment", {
context: "notification"
})
});
}
};
const handleOrderFulfillmentUpdate = (
data: OrderFulfillmentUpdateTracking
) => {
if (!maybe(() => data.orderFulfillmentUpdateTracking.errors.length)) {
pushMessage({
text: i18n.t("Fulfillment successfully updated", {
context: "notification"
})
});
navigate(orderUrl(data.orderFulfillmentUpdateTracking.order.id), true);
} else {
pushMessage({
text: i18n.t("Could not update fulfillment", {
context: "notification"
})
});
}
};
const handleDraftFinalize = (data: OrderDraftFinalize) => {
if (!maybe(() => data.draftOrderComplete.errors.length)) {
pushMessage({
text: i18n.t("Draft order successfully finalized", {
context: "notification"
})
});
navigate(orderUrl(data.draftOrderComplete.order.id), true);
} else {
pushMessage({
text: i18n.t("Could not finalize draft", {
context: "notification"
})
});
}
};
return children({
handleDraftCancel,
handleDraftFinalize,
handleDraftUpdate,
handleNoteAdd,
handleOrderCancel,
handleOrderFulfillmentCancel,
handleOrderFulfillmentCreate,
handleOrderFulfillmentUpdate,
handleOrderLineDelete,
handleOrderLineUpdate,
handleOrderLinesAdd,
handleOrderMarkAsPaid,
handleOrderVoid,
handlePaymentCapture,
handlePaymentRefund,
handleShippingMethodUpdate,
handleUpdate
});
};