/** * createReduxEmitter returns a redux middleware proxying redux actions to * the event emitter * @param {Object} eventEmitter * @return {function} redux middleware */ export function createReduxEmitter(eventEmitter) { return () => (next) => (action) => { // Handle apollo actions. if (action.type.startsWith('APOLLO_')) { if (action.type === 'APOLLO_SUBSCRIPTION_RESULT') { const {operationName, variables, result: {data}} = action; eventEmitter.emit(`subscription.${operationName}.data`, {variables, data}); } return next(action); } eventEmitter.emit(`action.${action.type}`, {action}); return next(action); }; }