All files / src/app/extensions/wishlists/store/wishlist wishlist.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 10110x 10x     10x       10x                                                   10x 36x     10x           10x                                               8x           11x 11x               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 { Wishlist } from '../../models/wishlist/wishlist.model';
 
import {
  addProductToWishlistSuccess,
  createWishlist,
  createWishlistFail,
  createWishlistSuccess,
  deleteWishlist,
  deleteWishlistFail,
  deleteWishlistSuccess,
  loadWishlists,
  loadWishlistsFail,
  loadWishlistsSuccess,
  moveItemToWishlist,
  removeItemFromWishlist,
  removeItemFromWishlistSuccess,
  selectWishlist,
  updateWishlist,
  updateWishlistFail,
  updateWishlistSuccess,
} from './wishlist.actions';
 
export interface WishlistState extends EntityState<Wishlist> {
  loading: boolean;
  selected: string;
  error: HttpError;
}
 
export const wishlistsAdapter = createEntityAdapter<Wishlist>({
  selectId: wishlist => wishlist.id,
});
 
export const initialState: WishlistState = wishlistsAdapter.getInitialState({
  loading: false,
  selected: undefined,
  error: undefined,
});
 
export const wishlistReducer = createReducer(
  initialState,
  setLoadingOn(
    loadWishlists,
    createWishlist,
    deleteWishlist,
    updateWishlist,
    removeItemFromWishlist,
    moveItemToWishlist
  ),
  setErrorOn(loadWishlistsFail, deleteWishlistFail, createWishlistFail, updateWishlistFail),
  unsetLoadingAndErrorOn(
    updateWishlistSuccess,
    addProductToWishlistSuccess,
    removeItemFromWishlistSuccess,
    createWishlistSuccess,
    loadWishlistsSuccess,
    deleteWishlistSuccess
  ),
  on(
    loadWishlistsFail,
    deleteWishlistFail,
    createWishlistFail,
    updateWishlistFail,
    (state: WishlistState): WishlistState => ({
      ...state,
      selected: undefined as string,
    })
  ),
  on(loadWishlistsSuccess, (state: WishlistState, action) => {
    const { wishlists } = action.payload;
    return wishlistsAdapter.setAll(wishlists, state);
  }),
  on(
    updateWishlistSuccess,
    addProductToWishlistSuccess,
    removeItemFromWishlistSuccess,
    createWishlistSuccess,
    (state, action) => {
      const { wishlist } = action.payload;
 
      return wishlistsAdapter.upsertOne(wishlist, state);
    }
  ),
  on(deleteWishlistSuccess, (state, action) => {
    const { wishlistId } = action.payload;
    return wishlistsAdapter.removeOne(wishlistId, state);
  }),
  on(selectWishlist, (state, action): WishlistState => {
    const { id } = action.payload;
    return {
      ...state,
      selected: id,
    };
  })
);