graycoreio/daffodil

View on GitHub
libs/cart/state/src/reducers/cart-order/cart-order.reducer.ts

Summary

Maintainability
A
1 hr
Test Coverage
import {
  DaffCart,
  DaffCartAddress,
  DaffCartCoupon,
  DaffCartItemInput,
  DaffCartOrderResult,
  DaffCartPaymentMethod,
  DaffCartShippingRate,
} from '@daffodil/cart';
import { DaffState } from '@daffodil/core/state';
import { DaffLoadingState } from '@daffodil/core/state';

import { daffCartOrderInitialState } from './cart-order-initial-state';
import { DaffCartOrderReducerState } from './cart-order-state.interface';
import {
  DaffCartActionTypes,
  DaffCartAddressActionTypes,
  DaffCartBillingAddressActionTypes,
  DaffCartCouponActionTypes,
  DaffCartItemActionTypes,
  DaffCartOrderActionTypes,
  DaffCartPaymentActionTypes,
  DaffCartShippingAddressActionTypes,
  DaffCartShippingInformationActionTypes,
} from '../../actions/public_api';
import { ActionTypes } from '../action-types.type';

export function daffCartOrderReducer<T extends DaffCartOrderResult = DaffCartOrderResult>(
  state = daffCartOrderInitialState,
  action: ActionTypes<
  DaffCart,
  DaffCartItemInput,
  T
  >,
): DaffCartOrderReducerState<T> {
  switch (action.type) {
    case DaffCartOrderActionTypes.CartPlaceOrderAction:
      return {
        ...state,
        loading: DaffState.Mutating,
      };

    case DaffCartOrderActionTypes.CartPlaceOrderSuccessAction:
      return {
        ...state,
        errors: [],
        loading: DaffState.Complete,
        cartOrderResult: action.payload,
      };

    case DaffCartOrderActionTypes.CartPlaceOrderFailureAction:
      return {
        ...state,
        loading: DaffState.Complete,
        errors: action.payload,
      };

    case DaffCartActionTypes.CartClearSuccessAction:
    case DaffCartActionTypes.CartCreateSuccessAction:
    case DaffCartActionTypes.AddToCartSuccessAction:
    case DaffCartBillingAddressActionTypes.CartBillingAddressUpdateSuccessAction:
    case DaffCartShippingAddressActionTypes.CartShippingAddressUpdateSuccessAction:
    case DaffCartAddressActionTypes.CartAddressUpdateSuccessAction:
    case DaffCartCouponActionTypes.CartCouponApplySuccessAction:
    case DaffCartCouponActionTypes.CartCouponRemoveSuccessAction:
    case DaffCartCouponActionTypes.CartCouponRemoveAllSuccessAction:
    case DaffCartItemActionTypes.CartItemUpdateSuccessAction:
    case DaffCartItemActionTypes.CartItemAddSuccessAction:
    case DaffCartItemActionTypes.CartItemDeleteSuccessAction:
    case DaffCartItemActionTypes.CartItemDeleteOutOfStockSuccessAction:
    case DaffCartPaymentActionTypes.CartPaymentRemoveSuccessAction:
    case DaffCartPaymentActionTypes.CartPaymentUpdateSuccessAction:
    case DaffCartPaymentActionTypes.CartPaymentUpdateWithBillingSuccessAction:
    case DaffCartShippingInformationActionTypes.CartShippingInformationUpdateSuccessAction:
    case DaffCartShippingInformationActionTypes.CartShippingInformationDeleteSuccessAction:
      return {
        ...state,
        errors: [],
      };

    default:
      return state;
  }
}