All files / src/app/core/store/customer/basket basket.selectors.ts

87.03% Statements 47/54
66.66% Branches 10/15
76.92% Functions 20/26
84.44% Lines 38/45

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 105383x 383x   383x     383x 383x 383x       383x   383x   383x 383x   60x       60x 60x       2x     2x             383x   383x       53x     383x         3x     383x 15x     383x       383x   383x   383x   383x   383x   383x   3x     383x 4x     383x                 383x 383x     383x 383x     383x          
import { createSelector, createSelectorFactory, resultMemoize } from '@ngrx/store';
import { isEqual } from 'lodash-es';
 
import { AddressHelper } from 'ish-core/models/address/address.helper';
import { Address } from 'ish-core/models/address/address.model';
import { BasketValidationResultType } from 'ish-core/models/basket-validation/basket-validation.model';
import { BasketView, createBasketView } from 'ish-core/models/basket/basket.model';
import { getCustomerState } from 'ish-core/store/customer/customer-store';
import { getLoggedInCustomer } from 'ish-core/store/customer/user';
 
import { BasketState } from './basket.reducer';
 
const getBasketState = createSelector(getCustomerState, state => state?.basket);
 
const getInternalBasket = createSelector(getBasketState, basket => basket.basket);
 
export const getBasketValidationResults = createSelectorFactory<object, BasketValidationResultType>(projector =>
  resultMemoize(projector, isEqual)
)(getBasketState, (basket: BasketState): BasketValidationResultType => {
  Iif (!basket?.validationResults) {
    return;
  }
 
  const basketResults = basket.validationResults;
  return {
    ...basketResults,
    infos: basketResults.infos || [],
    errors: basketResults.errors
      ? basketResults.errors.map(error => ({
          ...error,
          lineItem: error.parameters?.lineItemId && {
            ...basket.basket.lineItems.find(item => item.id === error.parameters.lineItemId),
          },
        }))
      : [],
  };
});
 
export const getBasketInfo = createSelector(getBasketState, basket => basket.info);
 
export const getCurrentBasket = createSelector(
  getInternalBasket,
  getBasketValidationResults,
  getBasketInfo,
  (basket, validationResults, basketInfo): BasketView => createBasketView(basket, validationResults, basketInfo)
);
 
export const getSubmittedBasket = createSelector(
  getBasketState,
  getBasketValidationResults,
  getBasketInfo,
  (basket, validationResults, basketInfo): BasketView =>
    createBasketView(basket.submittedBasket, validationResults, basketInfo)
);
 
export const getCurrentBasketId = createSelector(getBasketState, basket =>
  basket.basket ? basket.basket.id : undefined
);
 
export const getBasketIdOrCurrent = createSelector(getBasketState, basket =>
  basket.basket ? basket.basket.id : 'current'
);
 
export const getBasketLoading = createSelector(getBasketState, basket => basket.loading);
 
export const getBasketError = createSelector(getBasketState, basket => basket.error);
 
export const getBasketPromotionError = createSelector(getBasketState, basket => basket.promotionError);
 
export const getBasketLastTimeProductAdded = createSelector(getBasketState, basket => basket.lastTimeProductAdded);
 
export const getBasketEligibleAddresses = createSelector(getBasketState, basket => basket.eligibleAddresses);
 
export const getBasketEligibleShippingMethods = createSelector(
  getBasketState,
  basket => basket.eligibleShippingMethods
);
 
export const getBasketEligiblePaymentMethods = createSelector(getBasketState, getLoggedInCustomer, (basket, customer) =>
  basket?.eligiblePaymentMethods?.map(pm => (customer ? pm : { ...pm, saveAllowed: false }))
);
 
export const getEligibleFastCheckoutPaymentMethods = createSelector(
  getBasketState,
  getLoggedInCustomer,
  (basket, customer) =>
    basket?.eligiblePaymentMethods
      ?.filter(pm => pm.capabilities?.includes('FastCheckout'))
      .map(pm => (customer ? pm : { ...pm, saveAllowed: false }))
);
 
export const getBasketInvoiceAddress = createSelectorFactory<object, Address>(projector =>
  resultMemoize(projector, isEqual)
)(getCurrentBasket, (basket: BasketView) => basket?.invoiceToAddress);
 
export const getBasketShippingAddress = createSelectorFactory<object, Address>(projector =>
  resultMemoize(projector, isEqual)
)(getCurrentBasket, (basket: BasketView) => basket?.commonShipToAddress);
 
export const isBasketInvoiceAndShippingAddressEqual = createSelector(
  getBasketInvoiceAddress,
  getBasketShippingAddress,
  AddressHelper.equal
);