import React, { Component } from 'react'; import PropTypes from 'prop-types'; import _ from 'lodash'; import cx from 'classnames'; import styles from './styles.scss'; import Button from '../button/component'; import RecordingIndicator from './recording-indicator/component'; import SettingsDropdownContainer from './settings-dropdown/container'; import Icon from '/imports/ui/components/icon/component'; import BreakoutJoinConfirmation from '/imports/ui/components/breakout-join-confirmation/component'; import Dropdown from '/imports/ui/components/dropdown/component'; import DropdownTrigger from '/imports/ui/components/dropdown/trigger/component'; import DropdownContent from '/imports/ui/components/dropdown/content/component'; import DropdownList from '/imports/ui/components/dropdown/list/component'; import DropdownListItem from '/imports/ui/components/dropdown/list/item/component'; import { withModalMounter } from '/imports/ui/components/modal/service'; import { defineMessages, injectIntl } from 'react-intl'; const intlMessages = defineMessages({ toggleUserListLabel: { id: 'app.navBar.userListToggleBtnLabel', description: 'Toggle button label', }, newMessages: { id: 'app.navBar.toggleUserList.newMessages', description: 'label for toggleUserList btn when showing red notification', }, }); const propTypes = { presentationTitle: PropTypes.string.isRequired, hasUnreadMessages: PropTypes.bool.isRequired, beingRecorded: PropTypes.bool.isRequired, }; const defaultProps = { presentationTitle: 'Default Room Title', hasUnreadMessages: false, beingRecorded: false, }; const openBreakoutJoinConfirmation = (breakoutURL, breakoutName, mountModal) => mountModal(); const closeBreakoutJoinConfirmation = (mountModal) => mountModal(null); class NavBar extends Component { constructor(props) { super(props); this.state = { isActionsOpen: false, didSendBreakoutInvite: false, }; this.handleToggleUserList = this.handleToggleUserList.bind(this); } componendDidMount() { document.title = this.props.presentationTitle; } handleToggleUserList() { this.props.toggleUserList(); } componentDidUpdate(oldProps) { const { breakouts, getBreakoutJoinURL, isBreakoutRoom, } = this.props; const hadBreakouts = oldProps.breakouts.length; const hasBreakouts = breakouts.length; if (!hasBreakouts && hadBreakouts) { closeBreakoutJoinConfirmation(this.props.mountModal); } breakouts.forEach((breakout) => { if (!breakout.users) { return; } const breakoutURL = getBreakoutJoinURL(breakout); if (!this.state.didSendBreakoutInvite && !isBreakoutRoom) { this.inviteUserToBreakout(breakout, breakoutURL); } }); if (!breakouts.length && this.state.didSendBreakoutInvite) { this.setState({ didSendBreakoutInvite: false }); } } inviteUserToBreakout(breakout, breakoutURL) { const { mountModal, } = this.props; this.setState({ didSendBreakoutInvite: true }, () => { openBreakoutJoinConfirmation.call(this, breakoutURL, breakout.name, mountModal); }); } renderPresentationTitle() { const { breakouts, isBreakoutRoom, presentationTitle, } = this.props; if (isBreakoutRoom || !breakouts.length) { return (

{presentationTitle}

); } return (

{presentationTitle}

{breakouts.map(breakout => this.renderBreakoutItem(breakout))}
); } renderBreakoutItem(breakout) { const { getBreakoutJoinURL, mountModal, } = this.props; const breakoutName = breakout.name; const breakoutURL = getBreakoutJoinURL(breakout); return ( ); } render() { const { hasUnreadMessages, beingRecorded, isExpanded, intl } = this.props; const toggleBtnClasses = {}; toggleBtnClasses[styles.btn] = true; toggleBtnClasses[styles.btnWithNotificationDot] = hasUnreadMessages; return (
); } } NavBar.propTypes = propTypes; NavBar.defaultProps = defaultProps; export default withModalMounter(injectIntl(NavBar));