shopping-list.actions.ts
import { Action } from '@ngrx/store'; import { Ingredient } from 'src/app/shared/ingredient.model'; export const ADD_INGREDIENT = 'ADD_INGREDIENT'; export const ADD_INGREDIENTS = 'ADD_INGREDIENTS'; export class AddIngredient implements Action { readonly type = ADD_INGREDIENT; constructor(public payload: Ingredient) { } } export class AddIngredients implements Action { readonly type = ADD_INGREDIENTS; constructor(public payload: Ingredient[]) { } } export type ShoppingListActions = AddIngredient | AddIngredients;
shopping-list.reducer.ts
export function shoppingListReducer(state = initalState, action: ShoppingListActions.AddIngredientShoppingListActions) { switch (action.type) { case ShoppingListActions.ADD_INGREDIENT: return { ...state, ingredients: [...state.ingredients, action.payload] }; case ShoppingListActions.ADD_INGREDIENTS: return { ...state, ingredients: [...state.ingredients, ...action.payload] } default: return state; } }
recipe.service.ts
import { Store } from '@ngrx/store'; import * as ShoppingListActions from '../shopping-list/store/shopping-list.actions'; constructor(private slService: ShoppingListService, private store: Store<{ shoppingList: { ingredients: Ingredient[] } }>) { } addIngredientsToShoppingList(ingredients: Ingredient[]) {this.slService.addIngredients(ingredients);this.store.dispatch(new ShoppingListActions.AddIngredients(ingredients)) }