import { combineEpics } from "redux-observable"; import { Observable } from "rxjs"; import { Action } from "../types"; import { isActionOf } from "typesafe-actions"; import { fetchRecipesFulfill, fetchRecipesRequest, postRecipeFulfill, postRecipeRequest, } from "../actions"; import { mapTo, map, filter } from "rxjs/operators"; import { fetchAllRecipes, postRecipe } from "@spendcook/api"; const fetchEpic = (action$: Observable): Observable => { return action$.pipe( filter(isActionOf(fetchRecipesRequest)), mapTo(fetchAllRecipes()), map((recipes) => fetchRecipesFulfill(recipes)) ); }; function postEpic(action$: Observable): Observable { return action$.pipe( filter(isActionOf(postRecipeRequest)), map(({ payload }) => postRecipe(payload)), map((recipe) => postRecipeFulfill(recipe)) ); } export default combineEpics(fetchEpic, postEpic);