All files / src/helpers/cart actions.ts

90% Statements 27/30
100% Branches 56/56
76.92% Functions 10/13
100% Lines 19/19

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 12511x     11x   11x               11x             11x             11x 2x 1x   2x                                                           11x           11x       11x 2x 1x   2x                                                           11x               11x       11x       11x      
import { Logger } from '@vue-storefront/core';
import { ProductVariant, Address, LineItem, ReferenceInput, ResourceIdentifierInput, AddressInput } from './../../types/GraphQL';
 
const hasContactInfo = details => Object.keys(details.contactInfo || {}).some(c => ['phone', 'email', 'mobile', 'fax'].includes(c));
 
export const createAddLineItemAction = (variant: ProductVariant, quantity: number) => ({
  addLineItem: {
    variantId: variant.id,
    quantity: quantity,
    sku: variant.sku
  }
});
 
export const createRemoveLineItemAction = (product: LineItem) => ({
  removeLineItem: {
    lineItemId: product.id,
    quantity: product.quantity
  }
});
 
export const createChangeLineItemQuantityAction = (product: LineItem) => ({
  changeLineItemQuantity: {
    lineItemId: product.id,
    quantity: product.quantity
  }
});
 
export const setShippingAddressAction = (shippingDetails: Address): { setShippingAddress: { address: AddressInput } } => {
  if (hasContactInfo(shippingDetails)) {
    Logger.warn('Using `contactInfo` on Address is being deprecated in the CT API, use `email` `phone` `mobile` and `fax` fields directly.');
  }
  return {
    setShippingAddress: {
      address: {
        title: shippingDetails.title,
        salutation: shippingDetails.salutation,
        firstName: shippingDetails.firstName,
        lastName: shippingDetails.lastName,
        streetName: shippingDetails.streetName,
        streetNumber: shippingDetails.streetNumber,
        additionalStreetInfo: shippingDetails.additionalStreetInfo,
        postalCode: shippingDetails.postalCode,
        city: shippingDetails.city,
        region: shippingDetails.region,
        state: shippingDetails.state,
        country: shippingDetails.country,
        company: shippingDetails.company,
        department: shippingDetails.department,
        building: shippingDetails.building,
        apartment: shippingDetails.apartment,
        pOBox: shippingDetails.pOBox,
        phone: shippingDetails.phone || shippingDetails.contactInfo?.phone,
        mobile: shippingDetails.mobile || shippingDetails.contactInfo?.mobile,
        email: shippingDetails.email || shippingDetails.contactInfo?.email,
        fax: shippingDetails.fax || shippingDetails.contactInfo?.fax,
        additionalAddressInfo: shippingDetails.additionalAddressInfo
      }
    }
  };
};
 
export const setShippingMethodAction = (shippingMethodId?: string) => ({
  setShippingMethod: {
    shippingMethod: shippingMethodId ? { id: shippingMethodId } : null
  }
});
 
export const addPayment = (payment: ResourceIdentifierInput) => ({
  addPayment: { payment }
});
 
export const setBillingAddressAction = (billingDetails: Address): { setBillingAddress: { address: AddressInput } } => {
  if (hasContactInfo(billingDetails)) {
    Logger.warn('Using `contactInfo` on Address is being deprecated in the CT API, use `email` `phone` `mobile` and `fax` fields directly.');
  }
  return {
    setBillingAddress: {
      address: {
        title: billingDetails.title,
        salutation: billingDetails.salutation,
        firstName: billingDetails.firstName,
        lastName: billingDetails.lastName,
        streetName: billingDetails.streetName,
        streetNumber: billingDetails.streetNumber,
        additionalStreetInfo: billingDetails.additionalStreetInfo,
        postalCode: billingDetails.postalCode,
        city: billingDetails.city,
        region: billingDetails.region,
        state: billingDetails.state,
        country: billingDetails.country,
        company: billingDetails.company,
        department: billingDetails.department,
        building: billingDetails.building,
        apartment: billingDetails.apartment,
        pOBox: billingDetails.pOBox,
        phone: billingDetails.phone || billingDetails.contactInfo?.phone,
        mobile: billingDetails.mobile || billingDetails.contactInfo?.mobile,
        email: billingDetails.email || billingDetails.contactInfo?.email,
        fax: billingDetails.fax || billingDetails.contactInfo?.fax,
        additionalAddressInfo: billingDetails.additionalAddressInfo
      }
    }
  };
};
 
export const addPaymentAction = (paymentMethodId: string) => ({
  addPayment: {
    payment: {
      id: paymentMethodId
    }
  }
});
 
export const addDiscountCodeAction = (code: string) => ({
  addDiscountCode: { code }
});
 
export const removeDiscountCodeAction = (discountCode: ReferenceInput) => ({
  removeDiscountCode: { discountCode }
});
 
export const setCustomerEmail = (email: string) => ({
  setCustomerEmail: { email }
});