import { Observable } from 'rxjs' import { combineEpics, ActionsObservable } from 'redux-observable' import * as SocketConstants from '../socket/constants' import * as AuthActions from '../auth/actions' function pushGates(action$: ActionsObservable) { return action$ .ofType(SocketConstants.JOIN_CHANNEL_PENDING) .pluck('payload') .filter((payload: any) => payload.clusterName === SocketConstants.SocketCluster.MESSAGES) .filter((payload: any) => payload.channelName === SocketConstants.SocketChannel.ORG_PRIVATE) .switchMap(({ channel, leaveChannel$ }) => { return Observable.create((observer: any) => { channel.on('gates-updated', (payload: any) => { observer.next(AuthActions.recieveGates(payload)) }) }) .takeUntil(leaveChannel$) }) } export const epic = combineEpics( pushGates, )