redux-rxjs-socket.io
Helper functions to connect socket.io to redux, when using redux-observable.
Mappers
This library lets you define mappers from socket events to redux actions, and redux actions to socket events. The mappers you define are maps, that return a function that may return a value/array or a stream.
Event to Action Mappers
Below is a sample definition of socket to redux actions.
{
[RegisterHelper.Symbols.SOCKET_REGISTER]: () => actions.createSocketUserConnect(),
[RegisterHelper.Symbols.SOCKET_UNREGISTER]: () => actions.createSocketDisconnect(),
ping: ({ time }) => actions.createPingAction(time),
test: ({ key }, gameState) => from(promise).pipe(map(() => actions.createTestAction(key, gameState.blaBla))),
}
Action to Emit Mappers
Below is a sample definition of mapping redux actions into emitted events.
(mapperUserId) => ({
[ActionTypes.UserConnected]: ({ userId }, state) => {
return userId !== mapperUserId
? [ { event: 'other_user', data: { userId, leaderboard: state.leaderboard } } ]
: [];
},
})
Methods
- generateActionStreamCreator = (mapperDefinition) => (socket, state$, outsideEvent$) given a mapper definition, returns a function, that will return a action stream when given a socket, state stream and an custom outsideEventStream. When the returned stream is unsubscribed, the event register events on sockets will be unregistered.
- generateEmitStreamCreator = (mapperDefinition) => (action$, state$) given a mapper definition, returns a function, that will return a event stream when given redux action stream and a redux state stream.
- register = (eventToActionMapper, actionToEventMapper) => (socket, action$, state$, storeDispatch) when given event and action mapper definitions, returns you a function that will register a socket to a redux store. You just need to give socket, action$, state$ and the store dispatch function.