All files / src/app/extensions/order-templates/store/order-template order-template.reducer.ts

100% Statements 17/17
100% Branches 0/0
100% Functions 6/6
100% Lines 17/17

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 11412x 12x     12x       12x                                                       12x 32x     12x           12x                                                                   8x           9x 9x                 7x   7x       2x 2x     4x 4x            
import { EntityState, createEntityAdapter } from '@ngrx/entity';
import { createReducer, on } from '@ngrx/store';
 
import { HttpError } from 'ish-core/models/http-error/http-error.model';
import { setErrorOn, setLoadingOn, unsetLoadingAndErrorOn } from 'ish-core/utils/ngrx-creators';
 
import { OrderTemplate } from '../../models/order-template/order-template.model';
 
import {
  addProductToOrderTemplate,
  addProductToOrderTemplateFail,
  addProductToOrderTemplateSuccess,
  createOrderTemplate,
  createOrderTemplateFail,
  createOrderTemplateSuccess,
  deleteOrderTemplate,
  deleteOrderTemplateFail,
  deleteOrderTemplateSuccess,
  loadOrderTemplates,
  loadOrderTemplatesFail,
  loadOrderTemplatesSuccess,
  orderTemplatesActions,
  orderTemplatesApiActions,
  removeItemFromOrderTemplateSuccess,
  selectOrderTemplate,
  updateOrderTemplate,
  updateOrderTemplateFail,
  updateOrderTemplateSuccess,
} from './order-template.actions';
 
export interface OrderTemplateState extends EntityState<OrderTemplate> {
  loading: boolean;
  selected: string;
  error: HttpError;
}
 
export const orderTemplateAdapter = createEntityAdapter<OrderTemplate>({
  selectId: orderTemplate => orderTemplate.id,
});
 
export const initialState: OrderTemplateState = orderTemplateAdapter.getInitialState({
  loading: false,
  selected: undefined,
  error: undefined,
});
 
export const orderTemplateReducer = createReducer(
  initialState,
  setLoadingOn(
    addProductToOrderTemplate,
    createOrderTemplate,
    deleteOrderTemplate,
    loadOrderTemplates,
    orderTemplatesActions.createOrderTemplateFromLineItems,
    updateOrderTemplate
  ),
  unsetLoadingAndErrorOn(
    addProductToOrderTemplateSuccess,
    createOrderTemplateSuccess,
    deleteOrderTemplateSuccess,
    loadOrderTemplatesSuccess,
    orderTemplatesApiActions.createOrderTemplateFromLineItemsSuccess,
    removeItemFromOrderTemplateSuccess,
    updateOrderTemplateSuccess
  ),
  setErrorOn(
    addProductToOrderTemplateFail,
    createOrderTemplateFail,
    deleteOrderTemplateFail,
    loadOrderTemplatesFail,
    orderTemplatesApiActions.createOrderTemplateFromLineItemsFail,
    updateOrderTemplateFail
  ),
 
  on(
    createOrderTemplateFail,
    deleteOrderTemplateFail,
    loadOrderTemplatesFail,
    orderTemplatesApiActions.createOrderTemplateFromLineItemsFail,
    updateOrderTemplateFail,
    (state: OrderTemplateState): OrderTemplateState => ({
      ...state,
      selected: undefined as string,
    })
  ),
  on(loadOrderTemplatesSuccess, (state, action) => {
    const { orderTemplates } = action.payload;
    return orderTemplateAdapter.setAll(orderTemplates, state);
  }),
  on(
    addProductToOrderTemplateSuccess,
    createOrderTemplateSuccess,
    removeItemFromOrderTemplateSuccess,
    orderTemplatesApiActions.createOrderTemplateFromLineItemsSuccess,
    updateOrderTemplateSuccess,
    (state, action) => {
      const { orderTemplate } = action.payload;
 
      return orderTemplateAdapter.upsertOne(orderTemplate, state);
    }
  ),
  on(deleteOrderTemplateSuccess, (state, action) => {
    const { orderTemplateId } = action.payload;
    return orderTemplateAdapter.removeOne(orderTemplateId, state);
  }),
  on(selectOrderTemplate, (state, action): OrderTemplateState => {
    const { id } = action.payload;
    return {
      ...state,
      selected: id,
    };
  })
);