diff --git a/src/browser/components/MainPage.jsx b/src/browser/components/MainPage.jsx index 34e7186e..95eb83d3 100644 --- a/src/browser/components/MainPage.jsx +++ b/src/browser/components/MainPage.jsx @@ -25,7 +25,9 @@ const MainPage = createReactClass({ useSpellChecker: PropTypes.bool.isRequired, onSelectSpellCheckerLocale: PropTypes.func.isRequired, deeplinkingUrl: PropTypes.string, - showAddServerButton: PropTypes.bool.isRequired + showAddServerButton: PropTypes.bool.isRequired, + requestingPermission: TabBar.propTypes.requestingPermission, + onClickPermissionDialog: PropTypes.func }, getInitialState() { @@ -260,6 +262,8 @@ const MainPage = createReactClass({ onSelect={this.handleSelect} onAddServer={this.addServer} showAddServerButton={this.props.showAddServerButton} + requestingPermission={this.props.requestingPermission} + onClickPermissionDialog={this.props.onClickPermissionDialog} /> ); diff --git a/src/browser/components/TabBar.jsx b/src/browser/components/TabBar.jsx index 6287b572..f5b6f40d 100644 --- a/src/browser/components/TabBar.jsx +++ b/src/browser/components/TabBar.jsx @@ -1,34 +1,69 @@ const React = require('react'); +const {findDOMNode} = require('react-dom'); const PropTypes = require('prop-types'); -const {Glyphicon, Nav, NavItem} = require('react-bootstrap'); +const {Glyphicon, Nav, NavItem, Overlay} = require('react-bootstrap'); +const PermissionRequestDialog = require('./PermissionRequestDialog.jsx'); +const utils = require('../../utils/util'); -function TabBar(props) { - const tabs = props.teams.map((team, index) => { - let unreadCount = 0; - if (props.unreadCounts[index] > 0) { - unreadCount = props.unreadCounts[index]; - } - if (props.unreadAtActive[index]) { - unreadCount += 1; - } +class TabBar extends React.Component { // need "this" + render() { + const tabs = this.props.teams.map((team, index) => { + let unreadCount = 0; + if (this.props.unreadCounts[index] > 0) { + unreadCount = this.props.unreadCounts[index]; + } + if (this.props.unreadAtActive[index]) { + unreadCount += 1; + } - let mentionCount = 0; - if (props.mentionCounts[index] > 0) { - mentionCount = props.mentionCounts[index]; - } - if (props.mentionAtActiveCounts[index] > 0) { - mentionCount += props.mentionAtActiveCounts[index]; - } + let mentionCount = 0; + if (this.props.mentionCounts[index] > 0) { + mentionCount = this.props.mentionCounts[index]; + } + if (this.props.mentionAtActiveCounts[index] > 0) { + mentionCount += this.props.mentionAtActiveCounts[index]; + } - let badgeDiv; - if (mentionCount !== 0) { - badgeDiv = ( -
- {mentionCount} -
); - } - const id = 'teamTabItem' + index; - if (unreadCount === 0) { + let badgeDiv; + if (mentionCount !== 0) { + badgeDiv = ( +
+ {mentionCount} +
); + } + const id = 'teamTabItem' + index; + const permissionOverlay = this.props.requestingPermission[index] ? ( + findDOMNode(this.refs[id])} + > + + + ) : null; + if (unreadCount === 0) { + return ( + + { team.name } + { ' ' } + { badgeDiv } + {permissionOverlay} + ); + } return ( - { team.name } + { team.name } { ' ' } { badgeDiv } ); + }); + if (this.props.showAddServerButton === true) { + tabs.push( + + + + ); } return ( - { + if (eventKey === 'addServerButton') { + this.props.onAddServer(); + } else { + this.props.onSelect(eventKey); + } + }} > - { team.name } - { ' ' } - { badgeDiv } - ); - }); - if (props.showAddServerButton === true) { - tabs.push( - - - + { tabs } + ); } - return ( - - ); } TabBar.propTypes = { @@ -94,8 +118,13 @@ TabBar.propTypes = { unreadAtActive: PropTypes.array, mentionCounts: PropTypes.array, mentionAtActiveCounts: PropTypes.array, + showAddServerButton: PropTypes.bool, + requestingPermission: PropTypes.arrayOf(PropTypes.shape({ + origin: PropTypes.string, + permission: PropTypes.string + })), onAddServer: PropTypes.func, - showAddServerButton: PropTypes.bool + onClickPermissionDialog: PropTypes.func }; module.exports = TabBar; diff --git a/src/browser/css/components/TabBar.css b/src/browser/css/components/TabBar.css index 47b15445..90a2aebb 100644 --- a/src/browser/css/components/TabBar.css +++ b/src/browser/css/components/TabBar.css @@ -36,4 +36,8 @@ margin-left: 5px; margin-top: 5px; border-radius: 50%; -}; +} + +div[id*="-permissionDialog"] { + max-width: 350px; +}