import { Observable } from 'rxjs' import { combineEpics, ActionsObservable } from 'redux-observable' import { Store } from 'redux' import * as api from './api' import * as actions from './actions' import { IEmbed, IEmbedOptions } from './interfaces' import { fetchUserSuccess } from '../auth/actions' import { User } from '../auth/interfaces' import * as UserSelectors from '../auth/selectors' const fetchEmbed = (action$: ActionsObservable, { getState }: Store) => { return action$.ofType(fetchUserSuccess.toString()) .pluck('payload') .map(({ orgId }: User) => ({ orgId, accessToken: UserSelectors.accessToken(getState()) })) .mergeMap(((options: IEmbedOptions) => { return api.fetchEmbed(options) .map((value: IEmbed) => actions.fetchEmbedSuccess(value)) .startWith(actions.fetchEmbedPending()) .catch(() => { return Observable.of(actions.fetchEmbedFailure()) }) })) } export const epic = combineEpics( fetchEmbed, )