From a1ed79c5dbba16f904d142949f968730c84194ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5var=20Aamb=C3=B8=20Fosstveit?= Date: Mon, 4 May 2020 15:09:05 +0200 Subject: [PATCH] A button to promote all peers from lobby, fixes #287 --- app/src/RoomClient.js | 20 +++++++ app/src/actions/roomActions.js | 6 ++ .../AccessControl/LockDialog/ListLobbyPeer.js | 25 +++++--- .../AccessControl/LockDialog/LockDialog.js | 24 +++++++- app/src/reducers/room.js | 60 ++++++++++--------- app/src/translations/cn.json | 1 + app/src/translations/cs.json | 1 + app/src/translations/de.json | 1 + app/src/translations/dk.json | 1 + app/src/translations/el.json | 1 + app/src/translations/en.json | 1 + app/src/translations/es.json | 1 + app/src/translations/fr.json | 1 + app/src/translations/hr.json | 1 + app/src/translations/hu.json | 1 + app/src/translations/it.json | 1 + app/src/translations/nb.json | 1 + app/src/translations/pl.json | 1 + app/src/translations/pt.json | 1 + app/src/translations/ro.json | 1 + app/src/translations/tr.json | 1 + app/src/translations/uk.json | 1 + server/lib/Lobby.js | 4 +- 23 files changed, 117 insertions(+), 39 deletions(-) diff --git a/app/src/RoomClient.js b/app/src/RoomClient.js index d52631d..52b9383 100644 --- a/app/src/RoomClient.js +++ b/app/src/RoomClient.js @@ -1274,6 +1274,26 @@ export default class RoomClient roomActions.setSelectedPeer(peerId)); } + async promoteAllLobbyPeers() + { + logger.debug('promoteAllLobbyPeers()'); + + store.dispatch( + roomActions.setLobbyPeersPromotionInProgress(true)); + + try + { + await this.sendRequest('promoteAllPeers'); + } + catch (error) + { + logger.error('promoteAllLobbyPeers() [error:"%o"]', error); + } + + store.dispatch( + roomActions.setLobbyPeersPromotionInProgress(false)); + } + async promoteLobbyPeer(peerId) { logger.debug('promoteLobbyPeer() [peerId:"%s"]', peerId); diff --git a/app/src/actions/roomActions.js b/app/src/actions/roomActions.js index ddcfcc4..30ce37c 100644 --- a/app/src/actions/roomActions.js +++ b/app/src/actions/roomActions.js @@ -123,6 +123,12 @@ export const toggleConsumerFullscreen = (consumerId) => payload : { consumerId } }); +export const setLobbyPeersPromotionInProgress = (flag) => + ({ + type : 'SET_LOBBY_PEERS_PROMOTION_IN_PROGRESS', + payload : { flag } + }); + export const setMuteAllInProgress = (flag) => ({ type : 'MUTE_ALL_IN_PROGRESS', diff --git a/app/src/components/AccessControl/LockDialog/ListLobbyPeer.js b/app/src/components/AccessControl/LockDialog/ListLobbyPeer.js index 97f1ff6..8f9843a 100644 --- a/app/src/components/AccessControl/LockDialog/ListLobbyPeer.js +++ b/app/src/components/AccessControl/LockDialog/ListLobbyPeer.js @@ -27,6 +27,7 @@ const ListLobbyPeer = (props) => const { roomClient, peer, + promotionInProgress, canPromote, classes } = props; @@ -55,7 +56,11 @@ const ListLobbyPeer = (props) => })} > { e.stopPropagation(); @@ -71,18 +76,20 @@ const ListLobbyPeer = (props) => ListLobbyPeer.propTypes = { - roomClient : PropTypes.any.isRequired, - advancedMode : PropTypes.bool, - peer : PropTypes.object.isRequired, - canPromote : PropTypes.bool.isRequired, - classes : PropTypes.object.isRequired + roomClient : PropTypes.any.isRequired, + advancedMode : PropTypes.bool, + peer : PropTypes.object.isRequired, + promotionInProgress : PropTypes.bool.isRequired, + canPromote : PropTypes.bool.isRequired, + classes : PropTypes.object.isRequired }; const mapStateToProps = (state, { id }) => { return { - peer : state.lobbyPeers[id], - canPromote : + peer : state.lobbyPeers[id], + promotionInProgress : state.room.lobbyPeersPromotionInProgress, + canPromote : state.me.roles.some((role) => state.room.permissionsFromRoles.PROMOTE_PEER.includes(role)) }; @@ -97,6 +104,8 @@ export default withRoomContext(connect( { return ( prev.room.permissionsFromRoles === next.room.permissionsFromRoles && + prev.room.lobbyPeersPromotionInProgress === + next.room.lobbyPeersPromotionInProgress && prev.me.roles === next.me.roles && prev.lobbyPeers === next.lobbyPeers ); diff --git a/app/src/components/AccessControl/LockDialog/LockDialog.js b/app/src/components/AccessControl/LockDialog/LockDialog.js index 04048cd..4d6cd24 100644 --- a/app/src/components/AccessControl/LockDialog/LockDialog.js +++ b/app/src/components/AccessControl/LockDialog/LockDialog.js @@ -51,9 +51,11 @@ const styles = (theme) => }); const LockDialog = ({ + roomClient, room, handleCloseLockDialog, lobbyPeers, + canPromote, classes }) => { @@ -102,6 +104,20 @@ const LockDialog = ({ } +