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 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', }, 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(), }; } 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)} ); } render() { const { showDebugWindow, logLevel } = this.state; const chatLoggerLevelsNames = Object.keys(ChatLogger.levels); if (!DEBUG_WINDOW_ENABLED || !showDebugWindow) return false; const { intl } = this.props; return ( {intl.formatMessage(intlMessages.debugWindowTitle)} this.setShowDebugWindow(false)} /> {`${intl.formatMessage(intlMessages.userAgentLabel)}:`} navigator.clipboard.writeText(window.navigator.userAgent)} > {`${intl.formatMessage(intlMessages.copyButtonLabel)}`} {`${intl.formatMessage(intlMessages.chatLoggerLabel)}:`} { this.setState({ logLevel: ev.target.value, }); }} > { chatLoggerLevelsNames.map((i, index) => { return ({i}); }) } { ChatLogger.setLogLevel(logLevel); this.setState({ logLevel: ChatLogger.getLogLevel(), }); }} > {`${intl.formatMessage(intlMessages.applyButtonLabel)}`} ); } } export default injectIntl(DebugWindow);