import React, { Component } from 'react'; import Draggable from 'react-draggable'; import Resizable from 're-resizable'; import { defineMessages, injectIntl } from 'react-intl'; import { styles } from './styles.scss'; import Icon from '/imports/ui/components/icon/component'; import Button from '/imports/ui/components/button/component'; import Toggle from '/imports/ui/components/switch/component'; import Storage from '/imports/ui/services/storage/session'; import { withLayoutConsumer } from '/imports/ui/components/layout/context'; import ChatLogger from '/imports/ui/components/chat/chat-logger/ChatLogger'; const intlMessages = defineMessages({ modalClose: { id: 'app.modal.close', description: 'Close', }, modalCloseDescription: { id: 'app.modal.close.description', description: 'Disregards changes and closes the modal', }, debugWindowTitle: { id: 'app.debugWindow.windowTitle', description: 'Debug window title', }, userAgentLabel: { id: 'app.debugWindow.form.userAgentLabel', description: 'User agent form label', }, copyButtonLabel: { id: 'app.debugWindow.form.button.copy', description: 'User agent form copy button', }, enableAutoarrangeLayoutLabel: { id: 'app.debugWindow.form.enableAutoarrangeLayoutLabel', description: 'Enable Autoarrange layout label', }, enableAutoarrangeLayoutDescription: { id: 'app.debugWindow.form.enableAutoarrangeLayoutDescription', description: 'Enable Autoarrange layout description', }, chatLoggerLabel: { id: 'app.debugWindow.form.chatLoggerLabel', description: 'Chat logger level form label', }, applyButtonLabel: { id: 'app.debugWindow.form.button.apply', description: 'Chat logger level form apply button', }, on: { id: 'app.switch.onLabel', description: 'label for toggle switch on state', }, off: { id: 'app.switch.offLabel', description: 'label for toggle switch off state', }, }); const DEBUG_WINDOW_ENABLED = Meteor.settings.public.app.enableDebugWindow; const SHOW_DEBUG_WINDOW_ACCESSKEY = Meteor.settings.public.app.shortcuts.openDebugWindow.accesskey; class DebugWindow extends Component { constructor(props) { super(props); this.state = { showDebugWindow: false, logLevel: ChatLogger.getLogLevel(), autoArrangeLayout: Storage.getItem('autoArrangeLayout'), }; } componentDidMount() { document.addEventListener('keyup', (event) => { const { key, code } = event; const eventKey = key.toUpperCase(); const eventCode = code; if (DEBUG_WINDOW_ENABLED && event.altKey && (eventKey === SHOW_DEBUG_WINDOW_ACCESSKEY || eventCode === `Key${SHOW_DEBUG_WINDOW_ACCESSKEY}`)) { this.debugWindowToggle(); } }); } setShowDebugWindow(showDebugWindow) { this.setState({ showDebugWindow }); } debugWindowToggle() { const { showDebugWindow } = this.state; if (showDebugWindow) { this.setShowDebugWindow(false); } else { this.setShowDebugWindow(true); } } displaySettingsStatus(status) { const { intl } = this.props; return ( {status ? intl.formatMessage(intlMessages.on) : intl.formatMessage(intlMessages.off)} ); } autoArrangeToggle() { const { layoutContextDispatch } = this.props; const autoArrangeLayout = Storage.getItem('autoArrangeLayout'); this.setState({ autoArrangeLayout: !autoArrangeLayout, }); layoutContextDispatch( { type: 'setAutoArrangeLayout', value: !autoArrangeLayout, }, ); window.dispatchEvent(new Event('autoArrangeChanged')); } render() { const { showDebugWindow, logLevel } = this.state; const chatLoggerLevelsNames = Object.keys(ChatLogger.levels); if (!DEBUG_WINDOW_ENABLED || !showDebugWindow) return false; const { intl } = this.props; const { autoArrangeLayout } = this.state; return (
{intl.formatMessage(intlMessages.debugWindowTitle)}
{`${intl.formatMessage(intlMessages.userAgentLabel)}:`}
{`${intl.formatMessage(intlMessages.enableAutoarrangeLayoutLabel)}:`}
{this.displaySettingsStatus(autoArrangeLayout)} this.autoArrangeToggle()} ariaLabel={intl.formatMessage(intlMessages.enableAutoarrangeLayoutLabel)} showToggleLabel={false} />

{`${intl.formatMessage(intlMessages.enableAutoarrangeLayoutDescription)}`}

{`${intl.formatMessage(intlMessages.chatLoggerLabel)}:`}
); } } export default withLayoutConsumer(injectIntl(DebugWindow));