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))
}