From 218fb80994a549f9866af8c83049db1e1a21ade9 Mon Sep 17 00:00:00 2001 From: HenriqueLimas Date: Sun, 7 May 2017 23:26:43 -0300 Subject: [PATCH] add reducer --- main.js | 36 +++++++++++++++--------------------- package.json | 1 + reducer.js | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 21 deletions(-) create mode 100644 reducer.js diff --git a/main.js b/main.js index 2217f94..f139395 100644 --- a/main.js +++ b/main.js @@ -1,49 +1,44 @@ var html = require('yo-yo') var through = require('through2') -var ws = require('websocket-stream')('ws://localhost:5000' ) +var EventEmitter = require('events').EventEmitter +var websocket = require('websocket-stream') + +var ws = websocket('ws://localhost:5000' ) + var root = document.body.appendChild(document.createElement('div')) var state = { username: 'hey_joe', rooms: [] } +var bus = new EventEmitter() + +require('./reducer.js')(bus, state) +bus.on('update', update) -update(state) +update() ws.pipe(through(function (buff, enc, next) { var msg = buff.toString() if (/create_chat/.test(msg)) { var room = JSON.parse(msg.split('!')[1]) - state.rooms.push(room) + bus.emit('add-chat-room', room) } else { var data = msg.split('!') var chat_id = data[1] var message = data[2] - var room = state.rooms.find(function (room) { - return room.id === chat_id - }) - - if (room) room.messages.push(message) + bus.emit('add-message-into-chat', chat_id, message) } - update(state) next() })) ws.write('connection!' + state.username) -fetch('http://localhost:5000/chats?user=' + state.username) - .then(function (res) { - return res.json() - }) - .then(function updateRooms (rooms) { - state.rooms = rooms || [] - - update(state) - }) +bus.emit('fetch-chat-rooms') -function update(state) { +function update() { html.update(root, html`

Chat rooms

Current user ${state.username}

@@ -78,8 +73,7 @@ function update(state) { evt.preventDefault() var username = this.elements.username.value - state.username = username - update(state) + bus.emit('change-user', username) this.reset() } diff --git a/package.json b/package.json index 4e6e2b6..b88d399 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,6 @@ { "dependencies": { + "events": "^1.1.1", "to2": "^1.0.0", "websocket-stream": "^4.0.0" } diff --git a/reducer.js b/reducer.js new file mode 100644 index 0000000..0e6247b --- /dev/null +++ b/reducer.js @@ -0,0 +1,34 @@ +module.exports = function (bus, state) { + bus.on('add-chat-room', function addChatRoom (room) { + state.rooms.push(room) + + bus.emit('update') + }) + + bus.on('add-message-into-chat', function addMessageIntoChat (chat_id, message) { + var room = state.rooms.filter(function (room) { + return room.id === chat_id + })[0] + + if (room) room.messages.push(message) + + bus.emit('update') + }) + + bus.on('fetch-chat-rooms', function fetchChatRooms () { + fetch('http://localhost:5000/chats?user=' + state.username) + .then(function (res) { + return res.json() + }) + .then(function updateRooms (rooms) { + state.rooms = rooms || [] + + bus.emit('update') + }) + }) + + bus.on('change-user', function changeUser (username) { + state.username = username + bus.emit('update') + }) +}