UNPKG

lml-main

Version:

This is now a mono repository published into many standalone packages.

56 lines (48 loc) 2.1 kB
import * as Pusher from 'pusher-js' import { Observable } from 'rxjs' import { combineEpics, ActionsObservable } from 'redux-observable' import { Store } from 'redux' import { getCourierById, setLocationByObjectId } from '@lml/cosmo-redux-api' import { LocationModel } from '@lml/cosmo-ts-data' import { RootState } from '../reducers' import { pusherSubscribeChannel, PUSHER_CONNECTION_SUCCESS } from '../actions' // this is annoyingly slightly different from the normal location interface // but no matter export interface PusherLocationPing { objectId: string refId: string latitude: number longitude: number timestamp: string } export const subscribeToPings = (action$: ActionsObservable<any>, store: Store<RootState>): Observable<any> => action$.ofType(PUSHER_CONNECTION_SUCCESS) .mapTo(pusherSubscribeChannel( 'ping', 'COURIER_PING', (message: PusherLocationPing) => { const { objectId, refId, latitude, longitude, timestamp } = message const location: LocationModel = { objectId, refId, position: { type: 'point', coordinates: { latitude, longitude, } }, timestamp, } return setLocationByObjectId(location) // it's possible to do this so that we only care // about saving the courier's location if they are in the state already // const state = store.getState() // const courier = getCourierById(state, objectId) // if (courier) { // } else { // return { type: 'COURIER_NOT_IN_STATE ' } // } } ))