const assoc = require('ramda/src/assoc') const concat = require('ramda/src/concat') const flip = require('ramda/src/flip') const { action, handle } = require('puddles') const prefix = concat('meerkat/time/') const TICK = prefix('TICK') const TIMER = prefix('TIMER') const init = { time: Date.now() } const reducer = handle(init, { [ TICK ]: flip(assoc('time')), [ TIMER ]: flip(assoc('timer')) }) reducer.tick = action(TICK) reducer.timer = action(TIMER) module.exports = reducer
const append = require('ramda/src/append') const assoc = require('ramda/src/assoc') const concat = require('ramda/src/concat') const K = require('ramda/src/always') const { action, combine, handle } = require('puddles') const prefix = concat('meerkat/websockets/') const BODY = prefix('BODY') const INSERT_MESSAGE = prefix('INSERT_MESSAGE') const RESET = prefix('RESET') const body = handle('', { [ BODY ]: (_, body) => body, [ RESET ]: K('') }) const byId = handle({}, { [ INSERT_MESSAGE ]: (state, model) => assoc(model.id, model, state) }) const ids = handle([], { [ INSERT_MESSAGE ]: (state, model) => append(model.id, state) }) const messages = combine({ byId, ids }) const reducer = combine({ body, messages }) reducer.body = action(BODY)