import { combineEpics } from "redux-observable"; import { Observable } from "rxjs"; import { Action, State } from "../types"; import { isActionOf } from "typesafe-actions"; import { postCookingSessionRequest, postCookingSessionFulfill, } from "../actions"; import { map, filter, withLatestFrom } from "rxjs/operators"; import { selectRecipe } from "../selectors"; function postEpic( action$: Observable, state$: Observable ): Observable { return action$.pipe( filter(isActionOf(postCookingSessionRequest)), withLatestFrom(state$), map(([{ payload: { recipeId, date } }, state]) => postCookingSessionFulfill({ id: Date.now().toString(), date, recipe: selectRecipe(state, { recipeId }), }) ) ); } export default combineEpics(postEpic);