From 6be2de249c494370283bb2a23a48500ed6e2871b Mon Sep 17 00:00:00 2001 From: Noah Loomans Date: Tue, 20 Mar 2018 16:24:38 +0100 Subject: Move switching setting user to a room code to Menu This ensures tapping the room finder button always works, even when no room is selected in the first place. --- src/client/react/components/container/Menu.js | 21 +++++++++++++++++++-- src/client/react/components/container/RoomFinder.js | 16 +++++----------- 2 files changed, 24 insertions(+), 13 deletions(-) (limited to 'src/client/react/components/container') diff --git a/src/client/react/components/container/Menu.js b/src/client/react/components/container/Menu.js index f99ed37..920973b 100644 --- a/src/client/react/components/container/Menu.js +++ b/src/client/react/components/container/Menu.js @@ -20,21 +20,38 @@ import React from 'react'; import { connect } from 'react-redux'; +import { withRouter } from 'react-router-dom'; import { PropTypes } from 'prop-types'; import { Button, ButtonIcon } from 'rmwc/Button'; import { SimpleMenu, MenuItem } from 'rmwc/Menu'; import { Icon } from 'rmwc/Icon'; +import users from '../../users'; +import { setUser, userFromMatch } from '../../lib/url'; class Menu extends React.Component { static propTypes = { + // redux dispatch: PropTypes.func.isRequired, + + // react-router + match: PropTypes.object.isRequired, + location: PropTypes.object.isRequired, + history: PropTypes.object.isRequired, } onItemSelected(index) { switch (index) { - case 'room_finder': + case 'room_finder': { + const user = userFromMatch(this.props.match); + + if (user == null || users.byId[user].type !== 'r') { + // We are not currently viewing a room, correct the situation. + setUser(users.allRoomIds[0], this.props.location, this.props.history); + } + this.props.dispatch({ type: 'ROOM_FINDER/SHOW' }); break; + } default: // No default } @@ -59,4 +76,4 @@ class Menu extends React.Component { } } -export default connect()(Menu); +export default withRouter(connect()(Menu)); diff --git a/src/client/react/components/container/RoomFinder.js b/src/client/react/components/container/RoomFinder.js index 5f25fd7..97ed175 100644 --- a/src/client/react/components/container/RoomFinder.js +++ b/src/client/react/components/container/RoomFinder.js @@ -26,7 +26,7 @@ import { Button, ButtonIcon } from 'rmwc/Button'; import users from '../../users'; import { setUser, userFromMatch } from '../../lib/url'; -class HelpBox extends React.Component { +class RoomFinder extends React.Component { static propTypes = { // redux isVisible: PropTypes.bool.isRequired, @@ -46,23 +46,17 @@ class HelpBox extends React.Component { componentWillMount() { const user = userFromMatch(this.props.match); - // Have we just been mounted and are we viewing something else then a room? if (this.props.isVisible && users.byId[user].type !== 'r') { + // We are not currently viewing a room, so just hide. this.props.dispatch({ type: 'ROOM_FINDER/HIDE' }); } } componentWillReceiveProps(nextProps) { const user = userFromMatch(nextProps.match); - // We are not currently viewing a room, correct the situation. if (nextProps.isVisible && users.byId[user].type !== 'r') { - // Did we just become visible? Set the user to a room. If not, hide. - if (!this.props.isVisible) { - // Set the room to the first room. - setUser(users.allRoomIds[0], nextProps.location, nextProps.history); - } else { - this.props.dispatch({ type: 'ROOM_FINDER/HIDE' }); - } + // We are not currently viewing a room, so just hide. + this.props.dispatch({ type: 'ROOM_FINDER/HIDE' }); } } @@ -106,4 +100,4 @@ const mapStateToProps = state => ({ isVisible: state.isRoomFinderVisible, }); -export default withRouter(connect(mapStateToProps)(HelpBox)); +export default withRouter(connect(mapStateToProps)(RoomFinder)); -- cgit v1.1