bigbluebutton-Github/bigbluebutton-html5/imports/ui/components/debug-window/component.jsx

206 lines
6.6 KiB
React
Raw Normal View History

2020-09-04 07:35:57 +08:00
import React, { Component } from 'react';
import Draggable from 'react-draggable';
import { defineMessages, injectIntl } from 'react-intl';
2021-10-26 22:17:02 +08:00
import Styled from './styles';
import ChatLogger from '/imports/ui/components/chat/chat-logger/ChatLogger';
2020-09-04 07:35:57 +08:00
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',
},
2020-09-04 07:35:57 +08:00
});
class DebugWindow extends Component {
constructor(props) {
super(props);
this.state = {
showDebugWindow: false,
logLevel: ChatLogger.getLogLevel(),
2020-09-04 07:35:57 +08:00
};
}
componentDidMount() {
const DEBUG_WINDOW_ENABLED = window.meetingClientSettings.public.app.enableDebugWindow;
const SHOW_DEBUG_WINDOW_ACCESSKEY = window.meetingClientSettings.public.app.shortcuts.openDebugWindow.accesskey;
2020-09-04 07:35:57 +08:00
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}`)) {
2020-09-04 07:35:57 +08:00
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 (
2021-10-26 22:17:02 +08:00
<Styled.ToggleLabel>
{status ? intl.formatMessage(intlMessages.on)
: intl.formatMessage(intlMessages.off)}
2021-10-26 22:17:02 +08:00
</Styled.ToggleLabel>
);
}
2020-09-04 07:35:57 +08:00
render() {
const { showDebugWindow, logLevel } = this.state;
const chatLoggerLevelsNames = Object.keys(ChatLogger.levels);
2020-09-04 07:35:57 +08:00
const DEBUG_WINDOW_ENABLED = window.meetingClientSettings.public.app.enableDebugWindow;
2020-09-04 07:35:57 +08:00
if (!DEBUG_WINDOW_ENABLED || !showDebugWindow) return false;
const { intl } = this.props;
2020-09-04 07:35:57 +08:00
return (
<Draggable
handle="#debugWindowHeader"
bounds="body"
enableUserSelectHack={false}
>
2021-10-26 22:17:02 +08:00
<Styled.DebugWindowWrapper
2020-09-04 07:35:57 +08:00
minWidth={window.innerWidth * 0.2}
minHeight={window.innerHeight * 0.2}
enable={{
top: false,
bottom: false,
left: false,
right: false,
topLeft: false,
topRight: false,
bottomLeft: false,
bottomRight: true,
}}
>
2021-10-26 22:17:02 +08:00
<Styled.DebugWindow>
<Styled.Header id="debugWindowHeader">
<Styled.MoveIcon iconName="fit_to_screen" />
<Styled.Title>
2020-09-04 07:35:57 +08:00
{intl.formatMessage(intlMessages.debugWindowTitle)}
2021-10-26 22:17:02 +08:00
</Styled.Title>
<Styled.CloseButton
2020-09-04 07:35:57 +08:00
label={intl.formatMessage(intlMessages.modalClose)}
aria-label={`${intl.formatMessage(intlMessages.modalClose)} ${intl.formatMessage(intlMessages.debugWindowTitle)}`}
icon="close"
circle
hideLabel
onClick={() => this.setShowDebugWindow(false)}
/>
2021-10-26 22:17:02 +08:00
</Styled.Header>
<Styled.DebugWindowContent>
<Styled.Table>
<Styled.TableRow>
<Styled.TableCell>
2020-09-04 07:35:57 +08:00
{`${intl.formatMessage(intlMessages.userAgentLabel)}:`}
2021-10-26 22:17:02 +08:00
</Styled.TableCell>
<Styled.TableCell>
<Styled.UserAgentInput
2020-09-04 07:35:57 +08:00
id="debugModalUserAgent"
type="text"
value={window.navigator.userAgent}
readOnly
/>
<button
type="button"
onClick={() => navigator.clipboard.writeText(window.navigator.userAgent)}
>
{`${intl.formatMessage(intlMessages.copyButtonLabel)}`}
</button>
2021-10-26 22:17:02 +08:00
</Styled.TableCell>
</Styled.TableRow>
<Styled.TableRow>
<Styled.TableCell>
{`${intl.formatMessage(intlMessages.chatLoggerLabel)}:`}
2021-10-26 22:17:02 +08:00
</Styled.TableCell>
<Styled.TableCell>
<Styled.CellContent>
<select
style={{ marginRight: '1rem' }}
onChange={(ev) => {
this.setState({
logLevel: ev.target.value,
});
}}
>
{
chatLoggerLevelsNames.map((i, index) => {
2021-08-09 22:24:02 +08:00
const idx = index;
return (<option key={`${i}-${idx}`}>{i}</option>);
})
}
</select>
<button
type="button"
disabled={logLevel === ChatLogger.getLogLevel()}
onClick={() => {
ChatLogger.setLogLevel(logLevel);
this.setState({
logLevel: ChatLogger.getLogLevel(),
});
}}
>
{`${intl.formatMessage(intlMessages.applyButtonLabel)}`}
</button>
2021-10-26 22:17:02 +08:00
</Styled.CellContent>
</Styled.TableCell>
</Styled.TableRow>
</Styled.Table>
</Styled.DebugWindowContent>
</Styled.DebugWindow>
</Styled.DebugWindowWrapper>
2020-09-04 07:35:57 +08:00
</Draggable>
);
}
}
export default injectIntl(DebugWindow);