Merge branch 'master' into develop
This commit is contained in:
commit
5851d57eef
4 changed files with 25 additions and 9 deletions
|
@ -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,
|
||||||
|
|
|
@ -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') {
|
||||||
|
|
|
@ -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')
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue