import { CommonActions } from '@react-navigation/native' import * as R from 'ramda' import { Action, AnyAction } from 'redux' import { ofType } from 'redux-observable' import { Observable } from 'rxjs' import { filter, map } from 'rxjs/operators' import actionRouteMap from './action-routes-map' import { navigationInitiated } from './routing.actions' import { navigate } from './routing.service' export const routingEpic = (action$: Observable) => action$.pipe( map(action => action.type), filter((actionType: string) => R.has(actionType, actionRouteMap)), map((actionType: string): string => R.prop(actionType, actionRouteMap)), map((route: string) => CommonActions.navigate(route, {})), ) export const navigateEpic = (action$: Observable) => action$.pipe( ofType('NAVIGATE'), map(action => { navigate(action.payload.name, action.payload.params ?? {}) return navigationInitiated(action.payload.name, action.payload.params ?? {}) }), )