Skip to content

Commit

Permalink
add reducer
Browse files Browse the repository at this point in the history
  • Loading branch information
HenriqueLimas committed May 8, 2017
1 parent 8183cc6 commit 218fb80
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 21 deletions.
36 changes: 15 additions & 21 deletions main.js
Original file line number Diff line number Diff line change
@@ -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`<div>
<h1>Chat rooms</h1>
<h2>Current user ${state.username}</h2>
Expand Down Expand Up @@ -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()
}

Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"dependencies": {
"events": "^1.1.1",
"to2": "^1.0.0",
"websocket-stream": "^4.0.0"
}
Expand Down
34 changes: 34 additions & 0 deletions reducer.js
Original file line number Diff line number Diff line change
@@ -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')
})
}

0 comments on commit 218fb80

Please sign in to comment.