import { Observable } from 'rxjs' import { combineEpics, ActionsObservable } from 'redux-observable' import * as api from './api' import { accessToken } from '../auth/selectors' import * as actions from './actions' import { IOnboardingEmailSent, IOnboardingEmailSentOptions } from './interfaces' const onboardingEmailSentEpic = (action$: ActionsObservable, { getState }: any) => { return action$.ofType(actions.onboardingEmailSent.toString()) .pluck('payload') .map((payload: IOnboardingEmailSent) => ({ ...payload, accessToken: accessToken(getState()) })) .mergeMap((options: IOnboardingEmailSentOptions) => { return api.clickAndOpen(options) .map(() => actions.onboardingEmailSentSuccess()) .catch(() => Observable.of(actions.onboardingActivityFailed())) }) } const onboardingEmailConversationEpic = (action$: ActionsObservable, { getState }: any) => { return action$.ofType(actions.onboardingEmailSent.toString()) .delay(10000) .pluck('payload') .map(() => ({ accessToken: accessToken(getState()) })) .mergeMap((options: IOnboardingEmailSentOptions) => { return api.conversation(options) .map(() => actions.onboardingEmailSentConvoSuccess()) .catch(() => Observable.of(actions.onboardingActivityFailed())) }) } export const epic = combineEpics( onboardingEmailSentEpic, onboardingEmailConversationEpic, )