Skip to content

Commit 2f45e52

Browse files
Only show points when all have voted
1 parent 1c7744e commit 2f45e52

File tree

7 files changed

+4017
-32
lines changed

7 files changed

+4017
-32
lines changed

assets/js/socket.js

Lines changed: 3 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
1-
import {Socket, Presence} from 'phoenix'
1+
import { Socket, Presence } from 'phoenix'
2+
import updateUsers from './users'
23

34
const socket = new Socket('/socket', {params: {username: window.pointingParty.username}})
45
socket.connect()
56

67
const channel = socket.channel('room:lobby', {})
78
const presence = new Presence(channel)
89

9-
presence.onSync(() => {
10-
const usersElem = document.querySelector('.users')
11-
updateUsers(usersElem, presence)
12-
})
10+
presence.onSync(() => updateUsers(presence))
1311

1412
if (window.pointingParty.username) {
1513
channel.join ()
@@ -23,26 +21,4 @@ calculateButton.addEventListener('click', event => {
2321
channel.push('user_estimated', { points: storyPoints.value })
2422
})
2523

26-
channel.on("user_estimated", ({ points, userId }) => {
27-
const user = document.querySelector(`.${userId} .user-estimate`)
28-
user.innerHTML = points
29-
})
30-
31-
const updateUsers = (usersElem, presence) => {
32-
usersElem.innerHTML = ''
33-
presence.list(updateUser(usersElem))
34-
}
35-
36-
const updateUser = usersElem => (userId, _) => {
37-
const userElem = document.createElement('li')
38-
userElem.setAttribute('class', userId)
39-
userElem.appendChild(document.createTextNode(userId))
40-
41-
const estimateElem = document.createElement('span')
42-
estimateElem.setAttribute('class', 'user-estimate')
43-
userElem.appendChild(estimateElem)
44-
45-
usersElem.appendChild(userElem)
46-
}
47-
4824
export default socket

assets/js/users.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import { forEach, isNil, map, none } from 'ramda'
2+
3+
const updateUsers = presence => {
4+
const usersElem = document.querySelector('.users')
5+
usersElem.innerHTML = ''
6+
7+
const users = presence.list(userData)
8+
forEach(addUser(usersElem))(users)
9+
10+
if (allHaveEstimated(users)) {
11+
forEach(showPoints(usersElem))(users)
12+
}
13+
}
14+
15+
const userData = (userId, { metas: [{ points }, ..._rest]}) => ({ userId, points })
16+
17+
const showPoints = usersElem => ({userId, points}) => {
18+
const userElem = document.querySelector(`.${userId} .user-estimate`)
19+
userElem.innerHTML = points
20+
}
21+
22+
const addUser = usersElem => ({userId, points}) => {
23+
const userElem = document.createElement('li')
24+
userElem.setAttribute('class', userId)
25+
userElem.appendChild(document.createTextNode(userId))
26+
27+
const estimateElem = document.createElement('span')
28+
estimateElem.setAttribute('class', 'user-estimate')
29+
userElem.appendChild(estimateElem)
30+
31+
usersElem.appendChild(userElem)
32+
}
33+
34+
const allHaveEstimated = users => {
35+
const pointsCollection = map(({ points }) => points)(users)
36+
37+
return none(isNil)(pointsCollection)
38+
}
39+
40+
export default updateUsers

assets/package-lock.json

Lines changed: 8 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

assets/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"watch": "webpack --mode development --watch"
77
},
88
"dependencies": {
9+
"ramda": "^0.26.1",
910
"phoenix": "file:../deps/phoenix",
1011
"phoenix_html": "file:../deps/phoenix_html"
1112
},

lib/pointing_party_web/channels/room_channel.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ defmodule PointingPartyWeb.RoomChannel do
1717
end
1818

1919
def handle_in("user_estimated", %{"points" => points}, socket) do
20-
broadcast!(socket, "user_estimated", %{points: points, userId: socket.assigns.username})
20+
Presence.update(socket, socket.assigns.username, fn old -> Map.put(old, :points, points) end)
2121

2222
{:noreply, socket}
2323
end

package-lock.json

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

priv/static/js/app.js

Lines changed: 3961 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)