import React from 'react'; import Modal from 'react-modal'; import Icon from '/imports/ui/components/icon/component'; import Button from '/imports/ui/components/button/component'; import ReactDOM from 'react-dom'; import cx from 'classnames'; import Toggle from '/imports/ui/components/switch/component'; import { defineMessages, injectIntl } from 'react-intl'; import BaseMenu from '../base/component'; import styles from '../styles'; const MIN_FONTSIZE = 0; const MAX_FONTSIZE = 4; const intlMessages = defineMessages({ applicationSectionTitle: { id: 'app.submenu.application.applicationSectionTitle', description: 'Application section title', }, audioNotifyLabel: { id: 'app.submenu.application.audioNotifyLabel', description: 'audio notification label', }, pushNotifyLabel: { id: 'app.submenu.application.pushNotifyLabel', description: 'push notifiation label', }, fontSizeControlLabel: { id: 'app.submenu.application.fontSizeControlLabel', description: 'label for font size ontrol', }, increaseFontBtnLabel: { id: 'app.submenu.application.increaseFontBtnLabel', description: 'label for button to increase font size', }, increaseFontBtnDesc: { id: 'app.submenu.application.increaseFontBtnDesc', description: 'adds descriptive context to increase font size button', }, decreaseFontBtnLabel: { id: 'app.submenu.application.decreaseFontBtnLabel', description: 'label for button to reduce font size', }, decreaseFontBtnDesc: { id: 'app.submenu.application.decreaseFontBtnDesc', description: 'adds descriptive context to decrease font size button', }, languageLabel: { id: 'app.submenu.application.languageLabel', description: 'displayed label for changing application locale', }, ariaLanguageLabel: { id: 'app.submenu.application.ariaLanguageLabel', description: 'aria label for locale change section', }, languageOptionLabel: { id: 'app.submenu.application.languageOptionLabel', description: 'default change language option when locales are available', }, noLocaleOptionLabel: { id: 'app.submenu.application.noLocaleOptionLabel', description: 'default change language option when no locales available', }, }); class ApplicationMenu extends BaseMenu { constructor(props) { super(props); this.state = { settingsName: 'application', settings: props.settings, }; } handleUpdateFontSize(size) { const obj = this.state; obj.settings.fontSize = size; this.handleUpdateSettings(this.state.settingsName, obj.settings); } setHtmlFontSize(size) { document.getElementsByTagName('html')[0].style.fontSize = size; } changeFontSize(size) { const obj = this.state; obj.settings.fontSize = size; this.setState(obj, () => { this.setHtmlFontSize(this.state.settings.fontSize); this.handleUpdateFontSize(this.state.settings.fontSize); }); } handleIncreaseFontSize() { const currentFontSize = this.state.settings.fontSize; const availableFontSizes = this.props.fontSizes; const canIncreaseFontSize = availableFontSizes.indexOf(currentFontSize) < MAX_FONTSIZE; const fs = (canIncreaseFontSize) ? availableFontSizes.indexOf(currentFontSize) + 1 : MAX_FONTSIZE; this.changeFontSize(availableFontSizes[fs]); } handleDecreaseFontSize() { const currentFontSize = this.state.settings.fontSize; const availableFontSizes = this.props.fontSizes; const canDecreaseFontSize = availableFontSizes.indexOf(currentFontSize) > MIN_FONTSIZE; const fs = (canDecreaseFontSize) ? availableFontSizes.indexOf(currentFontSize) - 1 : MIN_FONTSIZE; this.changeFontSize(availableFontSizes[fs]); } handleSelectChange(fieldname, options, e) { const obj = this.state; obj.settings[fieldname] = e.target.value.toLowerCase().replace('_', '-'); this.handleUpdateSettings('application', obj.settings); } // Adjust the locale format to be able to display the locale names properly in the client formatLocale(locale) { return locale.split('-').map((val, idx) => (idx == 1 ? val.toUpperCase() : val)).join('_'); } render() { const { availableLocales, intl, } = this.props; return (

{intl.formatMessage(intlMessages.applicationSectionTitle)}

this.handleToggle('chatAudioNotifications')} ariaLabelledBy={'audioNotify'} ariaLabel={intl.formatMessage(intlMessages.audioNotifyLabel)} />
{/* TODO: Uncomment after the release
this.handleToggle('chatPushNotifications')} ariaLabelledBy={'pushNotify'} ariaLabel={intl.formatMessage(intlMessages.pushNotifyLabel)} />
*/}

); } } export default injectIntl(ApplicationMenu);