Repository URL to install this package:
|
Version:
0.0.15 ▾
|
import { oneRouter } from '@skava/router';
import { isErrorLikeResponse } from '@skava/is-error-like-response';
import { errorContainer } from '@skava/packages/core/notifications';
import { cartContainer } from '@skava/packages/core/cart/state/containers';
import { analyticsContainer } from '@skava/packages/core/analytics';
import { toastMessage } from '../fixture';
import { recalculatePaymentBinding } from '../../../state';
import { deleteAllPaymentsBinding } from '../../PaymentMethods';
import { submitOrderBinding } from './bindings';
class PlaceOrderContainer {
constructor() {
this.isSubmittingOrder = false;
this.dynamicOrderId = '';
}
}
export const placeOrderContainer = new PlaceOrderContainer();
export function trackSubmitOrder(dynamicOrderId) {
const products = cartContainer.products;
const orderDetails = cartContainer.math;
analyticsContainer.trackPurchaseEcommerce(products, dynamicOrderId, orderDetails);
}
export async function submitOrder() {
if (!placeOrderContainer.isSubmittingOrder) {
try {
placeOrderContainer.isSubmittingOrder = true;
const response = await handleSubmitOrder();
placeOrderContainer.isSubmittingOrder = false;
/**
* @todo this is unsafe
*/
placeOrderContainer.dynamicOrderId = response.submitOrderResponse.data.submitOrder.orderId;
trackSubmitOrder(placeOrderContainer.dynamicOrderId);
oneRouter.update('/orderConfirmation');
}
catch (submitError) {
console.error(submitError);
errorContainer.setMessage(submitError.message);
}
}
else {
errorContainer.setMessage('Already processing');
}
}
export async function handleSubmitOrder() {
const { response, status, recalculateOrder } = await recalculatePaymentBinding();
if (status.includes(toastMessage.failureMessage)) {
errorContainer.setMessage(toastMessage.reviewOrderFailure);
return {};
}
else if (isErrorLikeResponse(recalculateOrder)) {
/**
* Some times we will get more than one payment cards in
* response so need to delete them all
*/
const deleteResponse = await deleteAllPaymentsBinding();
return { deleteResponse };
}
else {
console.debug('[PlaceOrder] step_4 submitOrder');
const submitOrderResponse = await submitOrderBinding();
console.debug('[PlaceOrder] step_5 submitted');
// finally clear the shipping address form from local storage for SKREACT-4777
localStorage.removeItem('shippingAddressForm');
return { submitOrderResponse };
}
}
//# sourceMappingURL=container.js.map