-
Notifications
You must be signed in to change notification settings - Fork 70
/
CodeDialog.jsx
78 lines (71 loc) · 2.54 KB
/
CodeDialog.jsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import copy from 'copy-to-clipboard';
import AceEditor from 'react-ace';
import 'ace-builds/src-min-noconflict/mode-html';
import 'ace-builds/src-min-noconflict/worker-html';
import 'ace-builds/src-min-noconflict/ext-searchbox';
import 'ace-builds/src-min-noconflict/ext-language_tools';
import 'ace-builds/src-min-noconflict/theme-clouds_midnight';
import 'ace-builds/src-min-noconflict/theme-chrome';
import {
Dialog, Button, DialogActions, DialogContent, DialogTitle,
} from '@mui/material';
import IconCopy from '@mui/icons-material/ContentCopy';
import CloseIcon from '@mui/icons-material/Close';
import { I18n } from '@iobroker/adapter-react-v5';
class CodeDialog extends Component {
render() {
return <Dialog
open={!0}
onClose={() => this.props.onClose()}
maxWidth="xl"
fullWidth
>
<DialogTitle>{this.props.title || I18n.t('Code')}</DialogTitle>
<DialogContent>
<AceEditor
mode={this.props.mode || 'html'}
theme={this.props.themeType === 'dark' ? 'clouds_midnight' : 'chrome'}
readOnly
value={this.props.code}
width="100%"
setOptions={{
enableBasicAutocompletion: true,
enableLiveAutocompletion: true,
enableSnippets: true,
}}
/>
</DialogContent>
<DialogActions>
<Button
variant="contained"
onClick={() => {
copy(this.props.code);
window.alert(I18n.t('Copied to clipboard'));
}}
startIcon={<IconCopy />}
color="primary"
>
{I18n.t('Copy to clipboard')}
</Button>
<Button
variant="contained"
color="grey"
startIcon={<CloseIcon />}
onClick={() => this.props.onClose()}
>
{I18n.t('Close')}
</Button>
</DialogActions>
</Dialog>;
}
}
CodeDialog.propTypes = {
onClose: PropTypes.func.isRequired,
title: PropTypes.string,
themeType: PropTypes.string,
code: PropTypes.string.isRequired,
mode: PropTypes.string,
};
export default CodeDialog;