2016-06-20 15:56:42 +01:00
|
|
|
const choo = require('../../')
|
2016-06-30 08:18:07 -07:00
|
|
|
const html = require('../../html')
|
2016-06-20 15:56:42 +01:00
|
|
|
|
|
|
|
|
const app = choo()
|
|
|
|
|
app.model(createModel())
|
|
|
|
|
app.router((route) => [
|
|
|
|
|
route('/', mainView)
|
|
|
|
|
])
|
|
|
|
|
|
|
|
|
|
const tree = app.start()
|
|
|
|
|
document.body.appendChild(tree)
|
|
|
|
|
|
|
|
|
|
function mainView (params, state, send) {
|
2016-06-30 08:18:07 -07:00
|
|
|
return html`
|
2016-06-20 15:56:42 +01:00
|
|
|
<div>${state.logger.msg}</div>
|
|
|
|
|
`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function createModel () {
|
|
|
|
|
const stream = new window.EventSource('/sse')
|
|
|
|
|
return {
|
|
|
|
|
namespace: 'logger',
|
|
|
|
|
state: {
|
|
|
|
|
msg: ''
|
|
|
|
|
},
|
|
|
|
|
subscriptions: [
|
|
|
|
|
function (send) {
|
|
|
|
|
stream.onerror = (e) => {
|
|
|
|
|
send('logger:error', { payload: JSON.stringify(e) })
|
|
|
|
|
}
|
|
|
|
|
stream.onmessage = (e) => {
|
|
|
|
|
const msg = JSON.parse(e.data).message
|
|
|
|
|
send('logger:print', { payload: msg })
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
reducers: {
|
2016-07-02 21:09:08 -04:00
|
|
|
'print': (data, state) => {
|
|
|
|
|
return ({ msg: state.msg + ' ' + data.payload })
|
2016-06-20 15:56:42 +01:00
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
effects: {
|
2016-07-21 10:16:46 -07:00
|
|
|
close: (data, state, send, done) => {
|
|
|
|
|
stream.close()
|
|
|
|
|
done()
|
|
|
|
|
},
|
|
|
|
|
error: (data, state, send, done) => {
|
|
|
|
|
console.error(`error: ${data.payload}`
|
|
|
|
|
done()
|
|
|
|
|
}
|
2016-06-20 15:56:42 +01:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|