All files / lib http-progress.reducer.ts

100% Statements 22/22
61.11% Branches 11/18
100% Functions 5/5
100% Lines 22/22

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                  3x   33x     14x 14x 14x 14x 14x 14x 14x 14x       14x     9x 9x 9x 9x 9x 9x 9x 9x       9x   2x               33x    
import { Injectable, Provider } from '@angular/core';
import { createReducer, on } from '@ngrx/store';
 
import { httpProgressAction } from './http-progress.actions';
import { httpProgressReducerConfig, IHttpProgressStateModel } from './http-progress.interface';
 
@Injectable({
  providedIn: 'root',
})
export class AppHttpProgressReducer {
  public createReducer() {
    return createReducer(
      httpProgressReducerConfig.initialState,
      on(httpProgressAction.start, (state, { payload }) => {
        const nextState = { mainView: { ...state.mainView }, sidebar: { ...state.sidebar }, toaster: { ...state.toaster } };
        const keys = Object.keys(payload).length === 0 ? ['mainView'] : Object.keys(payload);
        for (const key of keys) {
          Eif (key in nextState) {
            const k = key as keyof IHttpProgressStateModel;
            Eif (k === 'mainView' || k === 'sidebar') {
              nextState[k].counter = nextState[k].counter + 1;
              nextState[k].loading = nextState[k].counter > 0;
            }
          }
        }
        return nextState;
      }),
      on(httpProgressAction.stop, (state, { payload }) => {
        const nextState = { mainView: { ...state.mainView }, sidebar: { ...state.sidebar }, toaster: { ...state.toaster } };
        const keys = Object.keys(payload).length === 0 ? ['mainView'] : Object.keys(payload);
        for (const key of keys) {
          Eif (key in nextState) {
            const k = key as keyof IHttpProgressStateModel;
            Eif (k === 'mainView' || k === 'sidebar') {
              nextState[k].counter = nextState[k].counter - 1 >= 0 ? nextState[k].counter - 1 : 0;
              nextState[k].loading = nextState[k].counter > 0;
            }
          }
        }
        return nextState;
      }),
      on(httpProgressAction.displayToast, (state, { payload }) => ({ ...state, toaster: { ...payload } })),
    );
  }
}
 
export const httpProgressReducerProvider: Provider = {
  provide: httpProgressReducerConfig.token,
  deps: [AppHttpProgressReducer],
  useFactory: (reducer: AppHttpProgressReducer) => reducer.createReducer(),
};