Beispiel #1
0
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
Beispiel #2
0
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)