import React, { Fragment, Component } from 'react'; import { defineMessages, injectIntl } from 'react-intl'; import PropTypes from 'prop-types'; import cx from 'classnames'; import Toggle from '/imports/ui/components/switch/component'; import Modal from '/imports/ui/components/modal/simple/component'; import NoteService from '/imports/ui/components/note/service'; import Button from '/imports/ui/components/button/component'; import { styles } from './styles'; const CHAT_ENABLED = Meteor.settings.public.chat.enabled; const intlMessages = defineMessages({ lockViewersTitle: { id: 'app.lock-viewers.title', description: 'lock-viewers title', }, closeLabel: { id: 'app.shortcut-help.closeLabel', description: 'label for close button', }, closeDesc: { id: 'app.shortcut-help.closeDesc', description: 'description for close button', }, lockViewersDescription: { id: 'app.lock-viewers.description', description: 'description for lock viewers feature', }, featuresLable: { id: 'app.lock-viewers.featuresLable', description: 'features label', }, lockStatusLabel: { id: 'app.lock-viewers.lockStatusLabel', description: 'description for close button', }, webcamLabel: { id: 'app.lock-viewers.webcamLabel', description: 'label for webcam toggle', }, otherViewersWebcamLabel: { id: 'app.lock-viewers.otherViewersWebcamLabel', description: 'label for other viewers webcam toggle', }, microphoneLable: { id: 'app.lock-viewers.microphoneLable', description: 'label for microphone toggle', }, publicChatLabel: { id: 'app.lock-viewers.PublicChatLabel', description: 'label for public chat toggle', }, privateChatLable: { id: 'app.lock-viewers.PrivateChatLable', description: 'label for private chat toggle', }, notesLabel: { id: 'app.lock-viewers.notesLabel', description: 'label for shared notes toggle', }, userListLabel: { id: 'app.lock-viewers.userListLabel', description: 'label for user list toggle', }, ariaModalTitle: { id: 'app.lock-viewers.ariaTitle', description: 'aria label for modal title', }, buttonApply: { id: 'app.lock-viewers.button.apply', description: 'label for apply button', }, buttonCancel: { id: 'app.lock-viewers.button.cancel', description: 'label for cancel button', }, lockedLabel: { id: 'app.lock-viewers.locked', description: 'locked element label', }, unlockedLabel: { id: 'app.lock-viewers.unlocked', description: 'unlocked element label', }, }); const propTypes = { closeModal: PropTypes.func.isRequired, intl: PropTypes.shape({ formatMessage: PropTypes.func.isRequired, }).isRequired, meeting: PropTypes.object.isRequired, showToggleLabel: PropTypes.bool.isRequired, updateLockSettings: PropTypes.func.isRequired, updateWebcamsOnlyForModerator: PropTypes.func.isRequired, }; class LockViewersComponent extends Component { constructor(props) { super(props); const { meeting: { lockSettingsProps, usersProp } } = this.props; this.state = { lockSettingsProps, usersProp, }; } toggleLockSettings(property) { const { lockSettingsProps } = this.state; lockSettingsProps[property] = !lockSettingsProps[property]; this.setState({ lockSettingsProps, }); } toggleUserProps(property) { const { usersProp } = this.state; usersProp[property] = !usersProp[property]; this.setState({ usersProp, }); } displayLockStatus(status) { const { intl } = this.props; return ( {status ? intl.formatMessage(intlMessages.lockedLabel) : intl.formatMessage(intlMessages.unlockedLabel) } ); } render() { const { closeModal, intl, showToggleLabel, updateLockSettings, updateWebcamsOnlyForModerator, } = this.props; const { lockSettingsProps, usersProp } = this.state; return (

{intl.formatMessage(intlMessages.lockViewersTitle)}

{`${intl.formatMessage(intlMessages.lockViewersDescription)}`}
{intl.formatMessage(intlMessages.featuresLable)}
{intl.formatMessage(intlMessages.lockStatusLabel)}
{this.displayLockStatus(lockSettingsProps.disableCam)} { this.toggleLockSettings('disableCam'); }} ariaLabel={intl.formatMessage(intlMessages.webcamLabel)} showToggleLabel={showToggleLabel} />
{this.displayLockStatus(usersProp.webcamsOnlyForModerator)} { this.toggleUserProps('webcamsOnlyForModerator'); }} ariaLabel={intl.formatMessage(intlMessages.otherViewersWebcamLabel)} showToggleLabel={showToggleLabel} />
{this.displayLockStatus(lockSettingsProps.disableMic)} { this.toggleLockSettings('disableMic'); }} ariaLabel={intl.formatMessage(intlMessages.microphoneLable)} showToggleLabel={showToggleLabel} />
{CHAT_ENABLED ? (
{this.displayLockStatus(lockSettingsProps.disablePublicChat)} { this.toggleLockSettings('disablePublicChat'); }} ariaLabel={intl.formatMessage(intlMessages.publicChatLabel)} showToggleLabel={showToggleLabel} />
{this.displayLockStatus(lockSettingsProps.disablePrivateChat)} { this.toggleLockSettings('disablePrivateChat'); }} ariaLabel={intl.formatMessage(intlMessages.privateChatLable)} showToggleLabel={showToggleLabel} />
) : null } {NoteService.isEnabled() ? (
{this.displayLockStatus(lockSettingsProps.disableNote)} { this.toggleLockSettings('disableNote'); }} ariaLabel={intl.formatMessage(intlMessages.notesLabel)} showToggleLabel={showToggleLabel} />
) : null }
{this.displayLockStatus(lockSettingsProps.hideUserList)} { this.toggleLockSettings('hideUserList'); }} ariaLabel={intl.formatMessage(intlMessages.userListLabel)} showToggleLabel={showToggleLabel} />
); } } LockViewersComponent.propTypes = propTypes; export default injectIntl(LockViewersComponent);