Merge branch 'master' into develop

This commit is contained in:
Devin Howard 2016-11-09 09:29:30 -05:00
commit 5851d57eef
4 changed files with 25 additions and 9 deletions

View file

@ -32,7 +32,7 @@ class AccessController < ApplicationController
# POST maps/:id/access # POST maps/:id/access
def access def access
user_ids = params[:access] || [] user_ids = params[:access].to_a.map(&:to_i) || []
@map.add_new_collaborators(user_ids).each do |user_id| @map.add_new_collaborators(user_ids).each do |user_id|
# add_new_collaborators returns array of added users, # add_new_collaborators returns array of added users,

View file

@ -38,6 +38,7 @@ const Synapse = Backbone.Model.extend({
newOptions.success = function(model, response, opt) { newOptions.success = function(model, response, opt) {
if (s) s(model, response, opt) if (s) s(model, response, opt)
model.set('calculated_permission', model.get('permission'))
model.trigger('saved') model.trigger('saved')
if (permBefore === 'private' && model.get('permission') !== 'private') { if (permBefore === 'private' && model.get('permission') !== 'private') {

View file

@ -37,8 +37,8 @@ const Topic = Backbone.Model.extend({
newOptions.success = function(model, response, opt) { newOptions.success = function(model, response, opt) {
if (s) s(model, response, opt) if (s) s(model, response, opt)
model.trigger('saved')
model.set('calculated_permission', model.get('permission')) model.set('calculated_permission', model.get('permission'))
model.trigger('saved')
if (permBefore === 'private' && model.get('permission') !== 'private') { if (permBefore === 'private' && model.get('permission') !== 'private') {
model.trigger('noLongerPrivate') model.trigger('noLongerPrivate')

View file

@ -1,4 +1,4 @@
const { omit, omitBy, isNil, mapValues } = require('lodash') const { find, omit, mapValues, values } = require('lodash')
const { const {
JOIN_MAP, JOIN_MAP,
LEAVE_MAP, LEAVE_MAP,
@ -9,7 +9,16 @@ const {
const NOT_IN_CONVERSATION = 0 const NOT_IN_CONVERSATION = 0
const IN_CONVERSATION = 1 const IN_CONVERSATION = 1
const addMapperToMap = (map, userId) => { return Object.assign({}, map, { [userId]: NOT_IN_CONVERSATION }) } const addMapperToMap = (map, userId) => Object.assign({}, map, { [userId]: NOT_IN_CONVERSATION })
const userStillPresent = (userId, liveMaps) => {
if (!userId) return false
let stillPresent = false
const userIdString = userId.toString()
values(liveMaps).forEach(presentUsers => {
if (find(Object.keys(presentUsers), id => id === userIdString)) stillPresent = true
})
return stillPresent
}
const reducer = (state = { connectedPeople: {}, liveMaps: {} }, action) => { const reducer = (state = { connectedPeople: {}, liveMaps: {} }, action) => {
const { type, payload } = action const { type, payload } = action
@ -37,10 +46,13 @@ const reducer = (state = { connectedPeople: {}, liveMaps: {} }, action) => {
const newLiveMaps = mapWillEmpty const newLiveMaps = mapWillEmpty
? omit(liveMaps, payload.mapid) ? omit(liveMaps, payload.mapid)
: Object.assign({}, liveMaps, { [payload.mapid]: omit(map, payload.userid) }) : Object.assign({}, liveMaps, { [payload.mapid]: omit(map, payload.userid) })
delete newLiveMaps[undefined]
delete newLiveMaps[null]
const updateConnectedPeople = userStillPresent(payload.userid, newLiveMaps) ? connectedPeople : omit(connectedPeople, payload.userid)
return { return {
connectedPeople: omit(connectedPeople, payload.userid), connectedPeople: updateConnectedPeople,
liveMaps: omitBy(newLiveMaps, isNil) liveMaps: newLiveMaps
} }
case JOIN_CALL: case JOIN_CALL:
// update the user (payload.id is user id) in the given map to be marked in the conversation // update the user (payload.id is user id) in the given map to be marked in the conversation
@ -57,15 +69,18 @@ const reducer = (state = { connectedPeople: {}, liveMaps: {} }, action) => {
: Object.assign({}, map, { [payload.userid]: NOT_IN_CONVERSATION }) : Object.assign({}, map, { [payload.userid]: NOT_IN_CONVERSATION })
return Object.assign({}, state, { return Object.assign({}, state, {
liveMaps: Object.assign({}, liveMaps, { map: newMap }) liveMaps: Object.assign({}, liveMaps, { [payload.mapid]: newMap })
}) })
case 'DISCONNECT': case 'DISCONNECT':
const mapWithoutUser = omit(map, payload.userid) const mapWithoutUser = omit(map, payload.userid)
const newMapWithoutUser = callWillFinish ? mapValues(mapWithoutUser, () => NOT_IN_CONVERSATION) : mapWithoutUser const newMapWithoutUser = callWillFinish ? mapValues(mapWithoutUser, () => NOT_IN_CONVERSATION) : mapWithoutUser
const newLiveMapsWithoutUser = mapWillEmpty ? omit(liveMaps, payload.mapid) : Object.assign({}, liveMaps, { [payload.mapid]: newMapWithoutUser }) const newLiveMapsWithoutUser = mapWillEmpty ? omit(liveMaps, payload.mapid) : Object.assign({}, liveMaps, { [payload.mapid]: newMapWithoutUser })
delete newLiveMapsWithoutUser[undefined]
delete newLiveMapsWithoutUser[null]
const newConnectedPeople = userStillPresent(payload.userid, newLiveMapsWithoutUser) ? connectedPeople : omit(connectedPeople, payload.userid)
return { return {
connectedPeople: omit(connectedPeople, payload.userid), connectedPeople: newConnectedPeople,
liveMaps: omitBy(newLiveMapsWithoutUser, isNil) liveMaps: newLiveMapsWithoutUser
} }
default: default:
return state return state