import React, { useState } from 'react'; import PropTypes from 'prop-types'; import { defineMessages, injectIntl } from 'react-intl'; import { LAYOUT_TYPE } from '/imports/ui/components/layout/enums'; import SettingsService from '/imports/ui/components/settings/service'; import deviceInfo from '/imports/utils/deviceInfo'; import Toggle from '/imports/ui/components/common/switch/component'; import Button from '/imports/ui/components/common/button/component'; import Styled from './styles'; const LayoutModalComponent = (props) => { const { intl, setIsOpen, isModerator, isPresenter, showToggleLabel, application, updateSettings, onRequestClose, isOpen, } = props; const [selectedLayout, setSelectedLayout] = useState(application.selectedLayout); // eslint-disable-next-line react/prop-types const [isKeepPushingLayout, setIsKeepPushingLayout] = useState(application.pushLayout); const BASE_NAME = Meteor.settings.public.app.basename; const LAYOUTS_PATH = `${BASE_NAME}/resources/images/layouts/`; const isKeepPushingLayoutEnabled = SettingsService.isKeepPushingLayoutEnabled(); const intlMessages = defineMessages({ title: { id: 'app.layout.modal.title', description: 'Modal title', }, confirm: { id: 'app.layout.modal.confirm', description: 'Modal confirm button', }, cancel: { id: 'app.layout.modal.cancel', description: 'Modal cancel button', }, layoutLabel: { id: 'app.layout.modal.layoutLabel', description: 'Layout label', }, layoutToastLabel: { id: 'app.layout.modal.layoutToastLabel', description: 'Layout toast label', }, keepPushingLayoutLabel: { id: 'app.layout.modal.keepPushingLayoutLabel', description: 'Keep push layout Label', }, customLayout: { id: 'app.layout.style.custom', description: 'label for custom layout style', }, smartLayout: { id: 'app.layout.style.smart', description: 'label for smart layout style', }, presentationFocusLayout: { id: 'app.layout.style.presentationFocus', description: 'label for presentationFocus layout style', }, videoFocusLayout: { id: 'app.layout.style.videoFocus', description: 'label for videoFocus layout style', }, layoutSingular: { id: 'app.layout.modal.layoutSingular', description: 'label for singular layout', }, layoutBtnDesc: { id: 'app.layout.modal.layoutBtnDesc', description: 'label for singular layout', }, }); const handleSwitchLayout = (e) => { setSelectedLayout(e); }; const handleKeepPushingLayout = () => { setIsKeepPushingLayout((newValue) => !newValue); }; const handleCloseModal = () => { const obj = { application: { ...application, selectedLayout, pushLayout: isKeepPushingLayout }, }; updateSettings(obj, intlMessages.layoutToastLabel); setIsOpen(false); }; const renderPushLayoutsOptions = () => { if (!isModerator && !isPresenter) { return null; } if (isKeepPushingLayoutEnabled) { return ( {intl.formatMessage(intlMessages.keepPushingLayoutLabel)} ); } return null; }; const renderLayoutButtons = () => ( {Object.values(LAYOUT_TYPE) .map((layout) => ( {intl.formatMessage(intlMessages[`${layout}Layout`])} )} onClick={() => handleSwitchLayout(layout)} active={(layout === selectedLayout).toString()} aria-describedby="layout-btn-desc" data-test={`${layout}Layout`} /> ))} ); return ( setIsOpen(false)} title={intl.formatMessage(intlMessages.title)} {...{ isOpen, onRequestClose, }} > {renderLayoutButtons()} {renderPushLayoutsOptions()} setIsOpen(false)} color="secondary" />