import React, { Component } from 'react'; import { defineMessages, injectIntl } from 'react-intl'; import _ from 'lodash'; import Button from '/imports/ui/components/button/component'; import { styles } from './styles'; import Icon from '../icon/component'; import BreakoutRoomContainer from './breakout-remaining-time/container'; const intlMessages = defineMessages({ breakoutTitle: { id: 'app.createBreakoutRoom.title', description: 'breakout title', }, breakoutDuration: { id: 'app.createBreakoutRoom.duration', description: 'breakout duration time', }, breakoutRoom: { id: 'app.createBreakoutRoom.room', description: 'breakout duration time', }, breakoutJoin: { id: 'app.createBreakoutRoom.join', description: 'breakout duration time', }, breakoutJoinAudio: { id: 'app.createBreakoutRoom.joinAudio', description: 'breakout duration time', }, breakoutReturnAudio: { id: 'app.createBreakoutRoom.returnAudio', description: 'breakout duration time', }, generatingURL: { id: 'app.createBreakoutRoom.generatingURL', description: 'breakout duration time', }, generatedURL: { id: 'app.createBreakoutRoom.generatedURL', description: 'breakout duration time', }, endAllBreakouts: { id: 'app.createBreakoutRoom.endAllBreakouts', description: 'breakout duration time', }, }); class BreakoutRoom extends Component { constructor(props) { super(props); this.renderBreakoutRooms = this.renderBreakoutRooms.bind(this); this.getBreakoutURL = this.getBreakoutURL.bind(this); this.renderDuration = this.renderDuration.bind(this); this.transferUserToBreakoutRoom = this.transferUserToBreakoutRoom.bind(this); this.renderUserActions = this.renderUserActions.bind(this); this.returnBackToMeeeting = this.returnBackToMeeeting.bind(this); this.state = { requestedBreakoutId: '', waiting: false, generated: false, joinedAudioOnly: false, breakoutId: '', }; } componentDidUpdate() { const { breakoutRoomUser } = this.props; if (this.state.waiting && !this.state.generated) { const breakoutUser = breakoutRoomUser(this.state.requestedBreakoutId); if (!breakoutUser) return; if (breakoutUser.redirectToHtml5JoinURL !== '') { _.delay(() => this.setState({ generated: true, waiting: false }), 1000); } } } getBreakoutURL(breakoutId) { const { requestJoinURL, breakoutRoomUser } = this.props; const hasUser = breakoutRoomUser(breakoutId); if (!hasUser && !this.state.waiting) { this.setState( { waiting: true, requestedBreakoutId: breakoutId }, () => requestJoinURL(breakoutId), ); } if (hasUser) { window.open(hasUser.redirectToHtml5JoinURL); this.setState({ waiting: false, generated: false }); } return null; } transferUserToBreakoutRoom(breakoutId) { const { transferToBreakout } = this.props; transferToBreakout(breakoutId); this.setState({ joinedAudioOnly: true, breakoutId }); } returnBackToMeeeting(breakoutId) { const { transferUserToMeeting, meetingId } = this.props; transferUserToMeeting(breakoutId, meetingId); this.setState({ joinedAudioOnly: false, breakoutId }); } renderUserActions(breakoutId) { const { isMicrophoneUser, isModerator, intl, } = this.props; const { joinedAudioOnly, breakoutId: stateBreakoutId, generated, requestedBreakoutId, waiting, } = this.state; const moderatorJoinedAudio = isMicrophoneUser && isModerator; const disable = waiting && requestedBreakoutId !== breakoutId; const audioAction = joinedAudioOnly ? () => this.returnBackToMeeeting(breakoutId) : () => this.transferUserToBreakoutRoom(breakoutId); return (