@iobroker/adapter-react-v5 3.1.10 → 3.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/Components/CustomModal.js +33 -13
  2. package/Components/CustomModal.js.map +1 -1
  3. package/Components/JsonConfigComponent/ChipInput.js +10 -10
  4. package/Components/JsonConfigComponent/ChipInput.js.map +1 -1
  5. package/Components/JsonConfigComponent/ConfigAutocompleteSendTo.js +1 -1
  6. package/Components/JsonConfigComponent/ConfigAutocompleteSendTo.js.map +1 -1
  7. package/Components/JsonConfigComponent/ConfigFile.js +106 -12
  8. package/Components/JsonConfigComponent/ConfigFile.js.map +1 -1
  9. package/Components/JsonConfigComponent/ConfigFileSelector.js +11 -13
  10. package/Components/JsonConfigComponent/ConfigFileSelector.js.map +1 -1
  11. package/Components/JsonConfigComponent/ConfigFunc.js +157 -0
  12. package/Components/JsonConfigComponent/ConfigFunc.js.map +1 -0
  13. package/Components/JsonConfigComponent/ConfigGeneric.js +1 -1
  14. package/Components/JsonConfigComponent/ConfigGeneric.js.map +1 -1
  15. package/Components/JsonConfigComponent/ConfigImageUpload.js +3 -3
  16. package/Components/JsonConfigComponent/ConfigImageUpload.js.map +1 -1
  17. package/Components/JsonConfigComponent/ConfigInstanceSelect.js +17 -4
  18. package/Components/JsonConfigComponent/ConfigInstanceSelect.js.map +1 -1
  19. package/Components/JsonConfigComponent/ConfigNumber.js.map +1 -1
  20. package/Components/JsonConfigComponent/ConfigPanel.js +9 -1
  21. package/Components/JsonConfigComponent/ConfigPanel.js.map +1 -1
  22. package/Components/JsonConfigComponent/ConfigRoom.js +157 -0
  23. package/Components/JsonConfigComponent/ConfigRoom.js.map +1 -0
  24. package/Components/JsonConfigComponent/ConfigSelectSendTo.js +116 -24
  25. package/Components/JsonConfigComponent/ConfigSelectSendTo.js.map +1 -1
  26. package/Components/JsonConfigComponent/ConfigSendto.js +1 -1
  27. package/Components/JsonConfigComponent/ConfigSendto.js.map +1 -1
  28. package/Components/JsonConfigComponent/ConfigSlider.js +147 -0
  29. package/Components/JsonConfigComponent/ConfigSlider.js.map +1 -0
  30. package/Components/JsonConfigComponent/ConfigTable.js +4 -4
  31. package/Components/JsonConfigComponent/ConfigTable.js.map +1 -1
  32. package/Components/JsonConfigComponent/ConfigTextSendTo.js +1 -1
  33. package/Components/JsonConfigComponent/ConfigTextSendTo.js.map +1 -1
  34. package/Components/Loader.js +9 -4
  35. package/Components/Loader.js.map +1 -1
  36. package/Components/UploadImage.js +11 -10
  37. package/Components/UploadImage.js.map +1 -1
  38. package/Connection.js +31 -26
  39. package/Connection.js.map +1 -1
  40. package/README.md +6 -0
  41. package/i18n/de.json +4 -1
  42. package/i18n/en.json +4 -1
  43. package/i18n/es.json +4 -1
  44. package/i18n/fr.json +4 -1
  45. package/i18n/it.json +4 -1
  46. package/i18n/nl.json +4 -1
  47. package/i18n/pl.json +4 -1
  48. package/i18n/pt.json +4 -1
  49. package/i18n/ru.json +4 -1
  50. package/i18n/zh-cn.json +4 -1
  51. package/package.json +1 -1
@@ -29,10 +29,22 @@ var _Button = _interopRequireDefault(require("@mui/material/Button"));
29
29
 
30
30
  var _TextField = _interopRequireDefault(require("@mui/material/TextField"));
31
31
 
32
- var _ConfigGeneric2 = _interopRequireDefault(require("./ConfigGeneric"));
32
+ var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
33
+
34
+ var _Article = _interopRequireDefault(require("@mui/icons-material/Article"));
35
+
36
+ var _Videocam = _interopRequireDefault(require("@mui/icons-material/Videocam"));
37
+
38
+ var _Code = _interopRequireDefault(require("@mui/icons-material/Code"));
39
+
40
+ var _PlayArrow = _interopRequireDefault(require("@mui/icons-material/PlayArrow"));
33
41
 
34
42
  var _FileSelect = _interopRequireDefault(require("../../Dialogs/FileSelect"));
35
43
 
44
+ var _ConfigGeneric2 = _interopRequireDefault(require("./ConfigGeneric"));
45
+
46
+ var _ConfigFileSelector = _interopRequireDefault(require("./ConfigFileSelector"));
47
+
36
48
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
37
49
 
38
50
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
@@ -43,7 +55,18 @@ var styles = function styles(theme) {
43
55
  width: '100%'
44
56
  },
45
57
  fullWidthOneButton: {
46
- width: 'calc(100% - 65px)'
58
+ width: 'calc(100% - 69px)',
59
+ marginRight: 4
60
+ },
61
+ fullWidthIcon: {
62
+ width: 'calc(100% - 119px)',
63
+ marginRight: 4
64
+ },
65
+ selectedImage: {
66
+ height: 40,
67
+ width: 40,
68
+ display: 'inline-block',
69
+ marginRight: 8
47
70
  }
48
71
  };
49
72
  };
@@ -71,14 +94,84 @@ var ConfigFile = /*#__PURE__*/function (_ConfigGeneric) {
71
94
 
72
95
  var value = _ConfigGeneric2["default"].getValue(this.props.data, this.props.attr);
73
96
 
97
+ this.imagePrefix = this.props.imagePrefix === undefined ? './files' : this.props.imagePrefix;
74
98
  this.setState({
75
99
  value: value
76
100
  });
77
101
  }
102
+ }, {
103
+ key: "loadFile",
104
+ value: function loadFile() {
105
+ var pos = this.state.value.indexOf('/');
106
+
107
+ if (pos !== -1) {
108
+ var adapter = this.state.value.substring(0, pos);
109
+ var path = this.state.value.substring(pos + 1);
110
+ return this.props.socket.readFile(adapter, path, true);
111
+ }
112
+ }
113
+ }, {
114
+ key: "play",
115
+ value: function play() {
116
+ this.loadFile().then(function (data) {
117
+ if (typeof AudioContext !== 'undefined') {
118
+ var context = new AudioContext();
119
+
120
+ var buf = _ConfigFileSelector["default"].base64ToArrayBuffer(data.file);
121
+
122
+ context.decodeAudioData(buf, function (buffer) {
123
+ var source = context.createBufferSource(); // creates a sound source
124
+
125
+ source.buffer = buffer; // tell the source which sound to play
126
+
127
+ source.connect(context.destination); // connect the source to the context's destination (the speakers)
128
+
129
+ source.start(0);
130
+ }, function (err) {
131
+ return window.alert('Cannot play: ' + err);
132
+ });
133
+ }
134
+ });
135
+ }
136
+ }, {
137
+ key: "getIcon",
138
+ value: function getIcon() {
139
+ var _this = this;
140
+
141
+ var extension = this.state.value.split('.').pop().toLowerCase();
142
+
143
+ if (IMAGE_EXT.includes(extension)) {
144
+ return /*#__PURE__*/_react["default"].createElement("div", {
145
+ className: this.props.classes.selectedImage,
146
+ style: {
147
+ backgroundImage: "url(".concat(this.imagePrefix, "/").concat(this.state.value, ")"),
148
+ backgroundSize: 'contain',
149
+ backgroundRepeat: 'no-repeat'
150
+ }
151
+ });
152
+ } else if (AUDIO_EXT.includes(extension)) {
153
+ return /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
154
+ style: {
155
+ color: '#00FF00'
156
+ },
157
+ onClick: function onClick() {
158
+ return _this.play();
159
+ }
160
+ }, /*#__PURE__*/_react["default"].createElement(_PlayArrow["default"], null));
161
+ } else if (DOC_EXT.includes(extension)) {
162
+ return /*#__PURE__*/_react["default"].createElement(_Article["default"], null);
163
+ } else if (VIDEO_EXT.includes(extension)) {
164
+ return /*#__PURE__*/_react["default"].createElement(_Videocam["default"], null);
165
+ } else if (JS_EXT.includes(extension)) {
166
+ return /*#__PURE__*/_react["default"].createElement(_Code["default"], null);
167
+ }
168
+
169
+ return null;
170
+ }
78
171
  }, {
79
172
  key: "renderFileBrowser",
80
173
  value: function renderFileBrowser() {
81
- var _this = this;
174
+ var _this2 = this;
82
175
 
83
176
  if (!this.state.showFileBrowser) {
84
177
  return null;
@@ -88,15 +181,15 @@ var ConfigFile = /*#__PURE__*/function (_ConfigGeneric) {
88
181
  socket: this.props.socket,
89
182
  selected: this.state.value,
90
183
  onClose: function onClose() {
91
- return _this.setState({
184
+ return _this2.setState({
92
185
  showFileBrowser: false
93
186
  });
94
187
  },
95
188
  onOk: function onOk(value) {
96
- _this.setState({
189
+ _this2.setState({
97
190
  value: value
98
191
  }, function () {
99
- return _this.onChange(_this.props.attr, _this.props.schema.trim === false ? value : (value || '').trim());
192
+ return _this2.onChange(_this2.props.attr, _this2.props.schema.trim === false ? value : (value || '').trim());
100
193
  });
101
194
  },
102
195
  selectOnlyFolders: this.props.schema.selectOnlyFolders,
@@ -112,13 +205,14 @@ var ConfigFile = /*#__PURE__*/function (_ConfigGeneric) {
112
205
  }, {
113
206
  key: "renderItem",
114
207
  value: function renderItem(error, disabled, defaultValue) {
115
- var _this2 = this;
208
+ var _this3 = this;
116
209
 
210
+ var icon = this.getIcon();
117
211
  return /*#__PURE__*/_react["default"].createElement("div", {
118
212
  className: this.props.classes.fullWidth
119
- }, /*#__PURE__*/_react["default"].createElement(_TextField["default"], {
213
+ }, icon, /*#__PURE__*/_react["default"].createElement(_TextField["default"], {
120
214
  variant: "standard",
121
- className: this.props.classes.fullWidthOneButton,
215
+ className: icon ? this.props.classes.fullWidthIcon : this.props.classes.fullWidthOneButton,
122
216
  value: this.state.value === null || this.state.value === undefined ? '' : this.state.value,
123
217
  error: !!error,
124
218
  disabled: !!disabled,
@@ -129,10 +223,10 @@ var ConfigFile = /*#__PURE__*/function (_ConfigGeneric) {
129
223
  onChange: function onChange(e) {
130
224
  var value = e.target.value;
131
225
 
132
- _this2.setState({
226
+ _this3.setState({
133
227
  value: value
134
228
  }, function () {
135
- return _this2.onChange(_this2.props.attr, _this2.props.schema.trim === false ? value : (value || '').trim());
229
+ return _this3.onChange(_this3.props.attr, _this3.props.schema.trim === false ? value : (value || '').trim());
136
230
  });
137
231
  },
138
232
  placeholder: this.getText(this.props.schema.placeholder),
@@ -141,7 +235,7 @@ var ConfigFile = /*#__PURE__*/function (_ConfigGeneric) {
141
235
  }), /*#__PURE__*/_react["default"].createElement(_Button["default"], {
142
236
  variant: "outlined",
143
237
  onClick: function onClick() {
144
- return _this2.setState({
238
+ return _this3.setState({
145
239
  showFileBrowser: true
146
240
  });
147
241
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigFile.js","names":["styles","theme","fullWidth","width","fullWidthOneButton","IMAGE_EXT","AUDIO_EXT","VIDEO_EXT","DOC_EXT","JS_EXT","ConfigFile","value","ConfigGeneric","getValue","props","data","attr","setState","state","showFileBrowser","imagePrefix","socket","onChange","schema","trim","selectOnlyFolders","allowUpload","allowDownload","allowCreateFolder","allowView","showToolbar","limitPath","error","disabled","defaultValue","classes","undefined","maxLength","max","readOnly","disableEdit","e","target","getText","placeholder","label","renderHelp","help","helpLink","noTranslation","renderFileBrowser","toString","propTypes","PropTypes","object","isRequired","themeType","string","themeName","style","className","onError","func","withStyles"],"sources":["JsonConfigComponent/ConfigFile.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport Button from '@mui/material/Button';\nimport TextField from '@mui/material/TextField';\n\nimport ConfigGeneric from './ConfigGeneric';\nimport FileSelectDialog from '../../Dialogs/FileSelect';\n\nconst styles = theme => ({\n fullWidth: {\n width: '100%'\n },\n fullWidthOneButton: {\n width: 'calc(100% - 65px)'\n },\n\n});\n\nconst IMAGE_EXT = ['jpg', 'jpeg', 'svg', 'png', 'webp'];\nconst AUDIO_EXT = ['mp3', 'ogg', 'wav', 'aac'];\nconst VIDEO_EXT = ['avi', 'mp4', 'mov'];\nconst DOC_EXT = ['txt', 'log', 'html', 'htm'];\nconst JS_EXT = ['json', 'js', 'ts'];\n\nclass ConfigFile extends ConfigGeneric {\n componentDidMount() {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n this.setState({ value });\n }\n\n static getDerivedStateFromProps(props, state) {\n const value = ConfigGeneric.getValue(props.data, props.attr);\n if (value === null || value === undefined || value.toString().trim() !== (state.value || '').toString().trim()) {\n return { value };\n } else {\n return null;\n }\n }\n\n renderFileBrowser() {\n if (!this.state.showFileBrowser) {\n return null;\n } else {\n return <FileSelectDialog\n imagePrefix={this.props.imagePrefix}\n socket={this.props.socket}\n selected={this.state.value}\n onClose={() => this.setState({ showFileBrowser: false})}\n onOk={value => {\n this.setState({ value }, () =>\n this.onChange(this.props.attr, this.props.schema.trim === false ? value : (value || '').trim()));\n }}\n selectOnlyFolders={this.props.schema.selectOnlyFolders}\n allowUpload={this.props.schema.allowUpload}\n allowDownload={this.props.schema.allowDownload}\n allowCreateFolder={this.props.schema.allowCreateFolder}\n allowView={this.props.schema.allowView}\n showToolbar={this.props.schema.showToolbar}\n limitPath={this.props.schema.limitPath}\n />;\n }\n }\n\n renderItem(error, disabled, defaultValue) {\n return <div className={this.props.classes.fullWidth}>\n <TextField\n variant=\"standard\"\n className={this.props.classes.fullWidthOneButton}\n value={this.state.value === null || this.state.value === undefined ? '' : this.state.value}\n error={!!error}\n disabled={!!disabled}\n inputProps={{\n maxLength: this.props.schema.maxLength || this.props.schema.max || undefined,\n readOnly: !!this.props.schema.disableEdit\n }}\n onChange={e => {\n const value = e.target.value;\n this.setState({ value }, () =>\n this.onChange(this.props.attr, this.props.schema.trim === false ? value : (value || '').trim()));\n }}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}\n />\n <Button variant=\"outlined\" onClick={() => this.setState({ showFileBrowser: true })}>...</Button>\n {this.renderFileBrowser()}\n </div>;\n }\n}\n\nConfigFile.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n imagePrefix: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigFile);"],"mappings":"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"}
1
+ {"version":3,"file":"ConfigFile.js","names":["styles","theme","fullWidth","width","fullWidthOneButton","marginRight","fullWidthIcon","selectedImage","height","display","IMAGE_EXT","AUDIO_EXT","VIDEO_EXT","DOC_EXT","JS_EXT","ConfigFile","value","ConfigGeneric","getValue","props","data","attr","imagePrefix","undefined","setState","pos","state","indexOf","adapter","substring","path","socket","readFile","loadFile","then","AudioContext","context","buf","ConfigFileSelector","base64ToArrayBuffer","file","decodeAudioData","buffer","source","createBufferSource","connect","destination","start","err","window","alert","extension","split","pop","toLowerCase","includes","classes","backgroundImage","backgroundSize","backgroundRepeat","color","play","showFileBrowser","onChange","schema","trim","selectOnlyFolders","allowUpload","allowDownload","allowCreateFolder","allowView","showToolbar","limitPath","error","disabled","defaultValue","icon","getIcon","maxLength","max","readOnly","disableEdit","e","target","getText","placeholder","label","renderHelp","help","helpLink","noTranslation","renderFileBrowser","toString","propTypes","PropTypes","object","isRequired","themeType","string","themeName","style","className","onError","func","withStyles"],"sources":["JsonConfigComponent/ConfigFile.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport Button from '@mui/material/Button';\nimport TextField from '@mui/material/TextField';\nimport IconButton from '@mui/material/IconButton';\n\nimport IconText from '@mui/icons-material/Article';\nimport IconVideo from '@mui/icons-material/Videocam';\nimport IconCode from '@mui/icons-material/Code';\nimport IconPlay from '@mui/icons-material/PlayArrow';\n\nimport FileSelectDialog from '../../Dialogs/FileSelect';\n\nimport ConfigGeneric from './ConfigGeneric';\nimport ConfigFileSelector from './ConfigFileSelector';\n\nconst styles = theme => ({\n fullWidth: {\n width: '100%'\n },\n fullWidthOneButton: {\n width: 'calc(100% - 69px)',\n marginRight: 4,\n },\n fullWidthIcon: {\n width: 'calc(100% - 119px)',\n marginRight: 4,\n },\n selectedImage: {\n height: 40,\n width: 40,\n display: 'inline-block',\n marginRight: 8,\n }\n});\n\nconst IMAGE_EXT = ['jpg', 'jpeg', 'svg', 'png', 'webp'];\nconst AUDIO_EXT = ['mp3', 'ogg', 'wav', 'aac'];\nconst VIDEO_EXT = ['avi', 'mp4', 'mov'];\nconst DOC_EXT = ['txt', 'log', 'html', 'htm'];\nconst JS_EXT = ['json', 'js', 'ts'];\n\nclass ConfigFile extends ConfigGeneric {\n componentDidMount() {\n super.componentDidMount();\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n this.imagePrefix = this.props.imagePrefix === undefined ? './files' : this.props.imagePrefix;\n this.setState({ value });\n }\n\n static getDerivedStateFromProps(props, state) {\n const value = ConfigGeneric.getValue(props.data, props.attr);\n if (value === null || value === undefined || value.toString().trim() !== (state.value || '').toString().trim()) {\n return { value };\n } else {\n return null;\n }\n }\n\n loadFile() {\n const pos = this.state.value.indexOf('/');\n if (pos !== -1) {\n const adapter = this.state.value.substring(0, pos);\n const path = this.state.value.substring(pos + 1);\n return this.props.socket.readFile(adapter, path, true);\n }\n }\n\n play() {\n this.loadFile()\n .then(data => {\n if (typeof AudioContext !== 'undefined') {\n const context = new AudioContext();\n const buf = ConfigFileSelector.base64ToArrayBuffer(data.file);\n context.decodeAudioData(buf, buffer => {\n const source = context.createBufferSource(); // creates a sound source\n source.buffer = buffer; // tell the source which sound to play\n source.connect(context.destination); // connect the source to the context's destination (the speakers)\n source.start(0);\n }, err => window.alert('Cannot play: ' + err));\n }\n });\n }\n\n getIcon() {\n const extension = this.state.value.split('.').pop().toLowerCase();\n if (IMAGE_EXT.includes(extension)) {\n return <div className={this.props.classes.selectedImage} style={{\n backgroundImage: `url(${this.imagePrefix}/${this.state.value})`,\n backgroundSize: 'contain',\n backgroundRepeat: 'no-repeat',\n }} />;\n } else if (AUDIO_EXT.includes(extension)) {\n return <IconButton style={{ color: '#00FF00' }} onClick={() => this.play()}><IconPlay /></IconButton>;\n } else if (DOC_EXT.includes(extension)) {\n return <IconText />;\n } else if (VIDEO_EXT.includes(extension)) {\n return <IconVideo />;\n } else if (JS_EXT.includes(extension)) {\n return <IconCode />;\n }\n return null;\n }\n\n renderFileBrowser() {\n if (!this.state.showFileBrowser) {\n return null;\n } else {\n return <FileSelectDialog\n imagePrefix={this.props.imagePrefix}\n socket={this.props.socket}\n selected={this.state.value}\n onClose={() => this.setState({ showFileBrowser: false})}\n onOk={value => {\n this.setState({ value }, () =>\n this.onChange(this.props.attr, this.props.schema.trim === false ? value : (value || '').trim()));\n }}\n selectOnlyFolders={this.props.schema.selectOnlyFolders}\n allowUpload={this.props.schema.allowUpload}\n allowDownload={this.props.schema.allowDownload}\n allowCreateFolder={this.props.schema.allowCreateFolder}\n allowView={this.props.schema.allowView}\n showToolbar={this.props.schema.showToolbar}\n limitPath={this.props.schema.limitPath}\n />;\n }\n }\n\n renderItem(error, disabled, defaultValue) {\n const icon = this.getIcon();\n\n return <div className={this.props.classes.fullWidth}>\n {icon}\n <TextField\n variant=\"standard\"\n className={icon ? this.props.classes.fullWidthIcon : this.props.classes.fullWidthOneButton}\n value={this.state.value === null || this.state.value === undefined ? '' : this.state.value}\n error={!!error}\n disabled={!!disabled}\n inputProps={{\n maxLength: this.props.schema.maxLength || this.props.schema.max || undefined,\n readOnly: !!this.props.schema.disableEdit\n }}\n onChange={e => {\n const value = e.target.value;\n this.setState({ value }, () =>\n this.onChange(this.props.attr, this.props.schema.trim === false ? value : (value || '').trim()));\n }}\n placeholder={this.getText(this.props.schema.placeholder)}\n label={this.getText(this.props.schema.label)}\n helperText={this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}\n />\n <Button variant=\"outlined\" onClick={() => this.setState({ showFileBrowser: true })}>...</Button>\n {this.renderFileBrowser()}\n </div>;\n }\n}\n\nConfigFile.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n imagePrefix: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigFile);"],"mappings":"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"}
@@ -177,7 +177,7 @@ var ConfigFileSelector = /*#__PURE__*/function (_ConfigGeneric) {
177
177
  (0, _classCallCheck2["default"])(this, ConfigFileSelector);
178
178
  _this = _super.call(this, props);
179
179
  _this.dropzoneRef = /*#__PURE__*/_react["default"].createRef();
180
- _this.imagePrefix = _this.props.imagePrefix === undefined ? '../../files' : _this.props.imagePrefix;
180
+ _this.imagePrefix = _this.props.imagePrefix === undefined ? './files' : _this.props.imagePrefix;
181
181
  return _this;
182
182
  }
183
183
 
@@ -207,8 +207,6 @@ var ConfigFileSelector = /*#__PURE__*/function (_ConfigGeneric) {
207
207
  _this2.setState({
208
208
  value: value
209
209
  });
210
-
211
- _this2.checkImage();
212
210
  });
213
211
  }
214
212
  }, {
@@ -426,11 +424,6 @@ var ConfigFileSelector = /*#__PURE__*/function (_ConfigGeneric) {
426
424
 
427
425
  reader.readAsArrayBuffer(file);
428
426
  }
429
- }, {
430
- key: "loadFile",
431
- value: function loadFile() {
432
- return this.props.socket.readFile(this.objectID, this.state.value, true);
433
- }
434
427
  }, {
435
428
  key: "renderDeleteDialog",
436
429
  value: function renderDeleteDialog() {
@@ -462,6 +455,11 @@ var ConfigFileSelector = /*#__PURE__*/function (_ConfigGeneric) {
462
455
  }
463
456
  });
464
457
  }
458
+ }, {
459
+ key: "loadFile",
460
+ value: function loadFile() {
461
+ return this.props.socket.readFile(this.objectID, this.state.value, true);
462
+ }
465
463
  }, {
466
464
  key: "play",
467
465
  value: function play() {
@@ -494,7 +492,7 @@ var ConfigFileSelector = /*#__PURE__*/function (_ConfigGeneric) {
494
492
  return /*#__PURE__*/_react["default"].createElement("div", {
495
493
  className: this.props.classes.selectedImage,
496
494
  style: {
497
- backgroundImage: 'url(' + this.imagePrefix + '/' + this.objectID + '/' + item.value + ')',
495
+ backgroundImage: "url(".concat(this.imagePrefix, "/").concat(this.objectID, "/").concat(item.value, ")"),
498
496
  backgroundSize: 'contain',
499
497
  backgroundRepeat: 'no-repeat'
500
498
  }
@@ -707,19 +705,19 @@ var ConfigFileSelector = /*#__PURE__*/function (_ConfigGeneric) {
707
705
  className: _this6.props.classes.uploadCenterIcon
708
706
  }), /*#__PURE__*/_react["default"].createElement("div", {
709
707
  className: _this6.props.classes.uploadCenterText
710
- }, _this6.state.uploadFile === 'dragging' ? _i18n["default"].t('Drop file here') : _i18n["default"].t('Place your files here or click here to open the browse dialog')))) : null, element, _this6.renderDeleteDialog());
708
+ }, _this6.state.uploadFile === 'dragging' ? _i18n["default"].t('ra_Drop file here') : _i18n["default"].t('ra_Place your files here or click here to open the browse dialog')))) : null, element, _this6.renderDeleteDialog());
711
709
  });
712
710
  }
713
711
  }
714
712
  }], [{
715
713
  key: "base64ToArrayBuffer",
716
714
  value: function base64ToArrayBuffer(base64) {
717
- var binary_string = window.atob(base64);
718
- var len = binary_string.length;
715
+ var binaryString = window.atob(base64);
716
+ var len = binaryString.length;
719
717
  var bytes = new Uint8Array(len);
720
718
 
721
719
  for (var i = 0; i < len; i++) {
722
- bytes[i] = binary_string.charCodeAt(i);
720
+ bytes[i] = binaryString.charCodeAt(i);
723
721
  }
724
722
 
725
723
  return bytes.buffer;
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigFileSelector.js","names":["styles","theme","fullWidth","width","fullWidthOneButton","fullWidthTwoButtons","fullWidthThreeButtons","dropZone","height","position","dropZoneEmpty","image","objectFit","margin","display","uploadDiv","uploadDivDragging","opacity","background","uploadCenterDiv","border","borderRadius","uploadCenterIcon","paddingTop","uploadCenterText","fontSize","uploadCenterTextAndIcon","textAlign","top","bottom","left","right","flexDirection","alignItems","justifyContent","disabledOpacity","cursor","error","deleteButton","selectedImage","marginRight","IMAGE_EXT","AUDIO_EXT","VIDEO_EXT","DOC_EXT","JS_EXT","ConfigFileSelector","props","dropzoneRef","React","createRef","imagePrefix","undefined","objectID","schema","replace","instance","path","upload","endsWith","updateFiles","then","value","ConfigGeneric","getValue","data","attr","setState","checkImage","readFiles","pattern","files","folderName","filter","socket","readDir","dirFiles","f","length","file","isDir","readFolder","ok","includes","startsWith","regExp","RegExp","test","push","name","size","stats","Utils","formatBytes","console","pos","lastIndexOf","substring","folder","acceptedFiles","reader","FileReader","maxSize","onabort","log","onerror","onload","ext","split","pop","toLowerCase","window","alert","I18n","t","Math","round","base64","btoa","Uint8Array","result","reduce","byte","String","fromCharCode","writeFile64","e","readAsArrayBuffer","readFile","state","deleteFile","isOk","loadFile","AudioContext","context","buf","base64ToArrayBuffer","decodeAudioData","buffer","source","createBufferSource","connect","destination","start","err","item","extension","classes","backgroundImage","backgroundSize","backgroundRepeat","disabled","defaultValue","folders","withFolder","forEach","selectOptions","map","label","noSize","noNone","unshift","find","buttons","refresh","play","element","getText","val","getIcon","target","onChange","help","renderHelp","helpLink","noTranslation","current","open","color","renderDeleteDialog","accept","last","uploadFile","errors","message","onDrop","getRootProps","getInputProps","clsx","uploadError","binary_string","atob","len","bytes","i","charCodeAt","propTypes","PropTypes","object","isRequired","themeType","string","themeName","style","className","onError","func","withStyles"],"sources":["JsonConfigComponent/ConfigFileSelector.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\nimport Dropzone from 'react-dropzone';\n\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport FormControl from '@mui/material/FormControl';\nimport Select from '@mui/material/Select';\nimport IconButton from '@mui/material/IconButton';\nimport ListItemText from '@mui/material/ListItemText';\nimport ListItemIcon from '@mui/material/ListItemIcon';\n\nimport IconRefresh from '@mui/icons-material/Refresh';\nimport IconUpload from '@mui/icons-material/UploadFile';\nimport IconDelete from '@mui/icons-material/Delete';\nimport IconPlay from '@mui/icons-material/PlayArrow';\nimport IconAudio from '@mui/icons-material/MusicNote';\nimport IconVideo from '@mui/icons-material/Videocam';\nimport IconText from '@mui/icons-material/Article';\nimport IconCode from '@mui/icons-material/Code';\nimport { FaFileUpload as UploadIcon } from 'react-icons/fa';\n\nimport Utils from '../../Components/Utils';\nimport I18n from '../../i18n';\nimport ConfirmDialog from '../../Dialogs/Confirm';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = theme => ({\n fullWidth: {\n width: '100%'\n },\n fullWidthOneButton: {\n width: 'calc(100% - 42px)'\n },\n fullWidthTwoButtons: {\n width: 'calc(100% - 84px)'\n },\n fullWidthThreeButtons: {\n width: 'calc(100% - 126x)'\n },\n dropZone: {\n width: '100%',\n height: '100%',\n position: 'absolute',\n },\n dropZoneEmpty: {\n\n },\n image: {\n objectFit: 'contain',\n margin: 'auto',\n display: 'flex',\n width: '100%',\n height: '100%',\n },\n\n uploadDiv: {\n position: 'relative',\n width: '100%',\n },\n uploadDivDragging: {\n opacity: 1,\n background: 'rgba(128,255,128,0.1)'\n },\n\n uploadCenterDiv: {\n margin: 5,\n border: '3px dashed grey',\n borderRadius: 5,\n width: '100%',\n height: '100%',\n position: 'absolute',\n display: 'flex'\n },\n uploadCenterIcon: {\n paddingTop: 10,\n width: 48,\n height: 48,\n },\n uploadCenterText: {\n fontSize: 16,\n },\n uploadCenterTextAndIcon: {\n textAlign: 'center',\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center'\n\n },\n disabledOpacity: {\n opacity: 0.3,\n cursor: 'default'\n },\n error: {\n border: '2px solid red'\n },\n deleteButton: {\n\n },\n selectedImage: {\n height: 40,\n width: 40,\n display: 'inline-block',\n marginRight: 8,\n }\n});\n\nconst IMAGE_EXT = ['jpg', 'jpeg', 'svg', 'png', 'webp'];\nconst AUDIO_EXT = ['mp3', 'ogg', 'wav', 'aac'];\nconst VIDEO_EXT = ['avi', 'mp4', 'mov'];\nconst DOC_EXT = ['txt', 'log', 'html', 'htm'];\nconst JS_EXT = ['json', 'js', 'ts'];\n\nclass ConfigFileSelector extends ConfigGeneric {\n constructor(props) {\n super(props);\n this.dropzoneRef = React.createRef();\n this.imagePrefix = this.props.imagePrefix === undefined ? '../../files' : this.props.imagePrefix;\n }\n\n componentDidMount() {\n super.componentDidMount();\n\n this.objectID = (this.props.schema.objectID || '0_userdata.0').replace('%INSTANCE%', this.props.instance);\n this.path = this.props.schema.upload;\n if (this.path) {\n if (this.path === '/') {\n this.path = '';\n } else {\n if (!this.path.endsWith('/')) {\n this.path = this.path + '/';\n }\n }\n }\n\n // read files\n this.updateFiles()\n .then(() => {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n this.setState({ value });\n this.checkImage();\n });\n }\n\n updateFiles() {\n return this.readFiles(this.props.schema.pattern)\n .then(files => this.setState({ files }));\n }\n\n async readFolder(folderName, files, filter) {\n try {\n const dirFiles = await this.props.socket.readDir(this.objectID, folderName.replace(/^\\//, '') || null);\n for (let f = 0; f < dirFiles.length; f++) {\n const file = dirFiles[f];\n if (file.isDir) {\n // read it\n await this.readFolder(`${folderName + file.file}/`, files, filter);\n } else {\n let ok = false;\n if (filter === '*.*' && file.file.includes('.')) {\n ok = true;\n } else if (!filter || filter === '*') {\n ok = true;\n } else if (filter === '.*' && file.file.startsWith('.')) {\n ok = true;\n } else {\n const regExp = new RegExp('^' + filter.replace(/\\./g, '\\\\.').replace(/\\*/g,'.*') + '$');\n ok = regExp.test(file.file);\n }\n\n ok && files.push({ name: folderName + file.file, size: file.stats ? Utils.formatBytes(file.stats.size) : '--' })\n }\n }\n } catch (e) {\n console.error(`Cannot read \"${folderName}\": ${e}`);\n }\n\n return files;\n }\n\n async readFiles(pattern) {\n const files = [];\n pattern = pattern || this.props.schema.pattern;\n if (!pattern) {\n pattern = '**/*.*';\n }\n let filter;\n const pos = pattern.lastIndexOf('/');\n if (pos === -1) {\n filter = pattern;\n } else {\n filter = pattern.substring(pos + 1);\n }\n\n if (pattern.startsWith('**')) {\n // read all folders\n await this.readFolder('/', files, filter);\n } else {\n const pos = pattern.lastIndexOf('/');\n if (pos === -1) {\n await this.readFolder('/', files, filter);\n } else {\n const folder = pattern.substring(0, pos + 1);\n await this.readFolder(folder, files, filter);\n }\n }\n\n return files;\n }\n\n onDrop(acceptedFiles) {\n const file = acceptedFiles[0];\n const reader = new FileReader();\n const maxSize = this.props.schema.maxSize || (2 * 1024 * 1024);\n\n reader.onabort = () => console.log('file reading was aborted');\n reader.onerror = () => console.log('file reading has failed');\n reader.onload = () => {\n let ext = 'image/' + file.name.split('.').pop().toLowerCase();\n if (ext === 'image/jpg') {\n ext = 'image/jpeg';\n } else if (ext.includes('svg')) {\n ext = 'image/svg+xml';\n }\n if (file.size > maxSize) {\n return window.alert(I18n.t('File is too big. Max %sk allowed. Try use SVG.', Math.round(maxSize / 1024)));\n }\n const base64 = `data:${ext};base64,${btoa(\n new Uint8Array(reader.result)\n .reduce((data, byte) => data + String.fromCharCode(byte), ''))}`;\n\n this.props.socket.writeFile64(this.objectID, this.path + file.name, base64)\n .then(() => this.updateFiles())\n .catch(e => window.alert('Cannot upload file: ' + e));\n };\n reader.readAsArrayBuffer(file);\n }\n\n loadFile() {\n return this.props.socket.readFile(this.objectID, this.state.value, true);\n }\n\n renderDeleteDialog() {\n if (!this.state.deleteFile) {\n return null;\n }\n return <ConfirmDialog\n title={ I18n.t('ra_Are you sure?') }\n text={ I18n.t('ra_File will be deleted') }\n ok={ I18n.t('ra_Delete') }\n cancel={ I18n.t('ra_Cancel') }\n onClose={isOk => {\n const deleteFile = this.state.deleteFile;\n this.setState({deleteFile: false}, () => {\n if (isOk) {\n this.props.socket.deleteFile(this.objectID, deleteFile)\n .then(() => this.updateFiles())\n .catch(e => window.alert('Cannot delete file: ' + e));\n }\n });\n }}\n />;\n }\n\n static base64ToArrayBuffer(base64) {\n var binary_string = window.atob(base64);\n var len = binary_string.length;\n var bytes = new Uint8Array(len);\n for (var i = 0; i < len; i++) {\n bytes[i] = binary_string.charCodeAt(i);\n }\n return bytes.buffer;\n }\n\n play() {\n this.loadFile()\n .then(data => {\n if (typeof AudioContext !== 'undefined') {\n const context = new AudioContext();\n const buf = ConfigFileSelector.base64ToArrayBuffer(data.file);\n context.decodeAudioData(buf, buffer => {\n const source = context.createBufferSource(); // creates a sound source\n source.buffer = buffer; // tell the source which sound to play\n source.connect(context.destination); // connect the source to the context's destination (the speakers)\n source.start(0);\n }, err => window.alert('Cannot play: ' + err));\n }\n });\n }\n\n getIcon(item) {\n if (!item || !item.extension) {\n return null;\n }\n if (IMAGE_EXT.includes(item.extension)) {\n return <div className={this.props.classes.selectedImage} style={{\n backgroundImage: 'url(' + this.imagePrefix + '/' + this.objectID + '/' + item.value + ')',\n backgroundSize: 'contain',\n backgroundRepeat: 'no-repeat',\n }} />;\n } else if (AUDIO_EXT.includes(item.extension)) {\n return <IconAudio />;\n } else if (DOC_EXT.includes(item.extension)) {\n return <IconText />;\n } else if (VIDEO_EXT.includes(item.extension)) {\n return <IconVideo />;\n } else if (JS_EXT.includes(item.extension)) {\n return <IconCode />;\n }\n return null;\n }\n\n renderItem(error, disabled, defaultValue) {\n if (!this.state.files) {\n return null;\n }\n let folders = [];\n if (!this.props.schema.withFolder) {\n this.state.files.forEach(file => {\n const pos = file.name.lastIndexOf('/');\n if (pos === -1) {\n if (!folders.includes('/')) {\n folders.push('/');\n }\n } else {\n const folder = file.name.substring(0, pos + 1);\n if (!folders.includes(folder)) {\n folders.push(folder);\n }\n }\n });\n }\n\n const selectOptions = this.state.files\n .map(file => ({\n value: file.name,\n label: !this.props.schema.withFolder && folders.length === 1 ? `${file.name.substring(folders[0].length)}` : `${file.name}` + (this.props.schema.noSize ? '' : `(${file.size})`),\n extension: file.name.toLowerCase().split('.').pop(),\n }));\n\n if (!this.props.schema.noNone) {\n selectOptions.unshift({label: I18n.t('ra_none'), value: ''});\n }\n\n // eslint-disable-next-line\n const item = selectOptions.find(item => item.value === this.state.value);\n\n let buttons = 0;\n\n if (this.props.schema.upload) {\n buttons++;\n }\n if (this.props.schema.refresh) {\n buttons++;\n }\n let play = this.state.value && (this.state.value.endsWith('.mp3') || this.state.value.endsWith('.ogg') || this.state.value.endsWith('.wav'));\n // show play button\n if (play) {\n buttons++;\n }\n\n const element = <div className={this.props.classes.fullWidth}>\n <FormControl variant=\"standard\" style={{width: `calc(100% - ${buttons * 42}px)`}}>\n <InputLabel>{this.getText(this.props.schema.label)}</InputLabel>\n <Select\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={this.state.value || '_'}\n renderValue={val => {\n return <>{this.getIcon(item)}<span>{item?.label || ''}</span></>\n }}\n onChange={e => {\n this.setState({value: e.target.value === '_' ? '' : e.target.value}, () =>\n this.onChange(this.props.attr, this.state.value));\n }}\n >\n {selectOptions.map(item => {\n return <MenuItem key={item.value} value={item.value}>\n <ListItemIcon>{this.getIcon(item)}</ListItemIcon>\n <ListItemText>{item.label}</ListItemText>\n {this.props.schema.delete && item.value ?\n <IconButton className={this.props.classes.deleteButton} size=\"small\"\n onClick={() => this.setState({deleteFile: item.value})}><IconDelete/></IconButton> : null}\n </MenuItem>;\n })}\n </Select>\n {this.props.schema.help ? <FormHelperText>{this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}</FormHelperText> : null}\n </FormControl>\n { this.props.schema.refresh && <IconButton onClick={() => this.updateFiles()}><IconRefresh /></IconButton> }\n { this.props.schema.upload && <IconButton onClick={() => this.dropzoneRef.current?.open()}><IconUpload /></IconButton> }\n { play && <IconButton style={{ color: '#00FF00' }} onClick={() => this.play()}><IconPlay /></IconButton> }\n </div>;\n\n if (!this.props.schema.upload) {\n return <>{element}{this.renderDeleteDialog()}</>;\n } else {\n let accept = {'*/*': []};\n if (this.props.schema.pattern) {\n const last = this.props.schema.pattern.split('/').pop().toLowerCase().replace(/.*\\./, '');\n if (last === 'png' || last === 'jpg' || last === 'svg') {\n accept = {\n 'image/*': ['.png', '.jpg', '.svg']\n };\n } else if (last === 'mp3' || last === 'ogg' || last === 'wav') {\n accept = {\n 'audio/*': ['.mp3', '.ogg', '.wav', '.mp4']\n };\n } else if (last === 'ics') {\n accept = {\n 'text/calendar': ['.mp3', '.ogg', '.wav', '.mp4']\n };\n } else if (last === 'txt') {\n accept = {\n 'text/plain': ['.txt']\n };\n } else if (last === 'pem') {\n accept = {\n 'text/plain': ['.pem']\n };\n } else if (last === 'pem') {\n accept = {\n '*/*': ['.' + last]\n };\n }\n }\n\n return <Dropzone\n ref={this.dropzoneRef}\n multiple={false}\n accept={accept}\n noKeyboard\n noClick\n maxSize={this.props.schema.maxSize || 2 * 1024 * 1024}\n onDragEnter={() => {\n this.setState({ uploadFile: 'dragging' });\n }}\n onDragLeave={() => this.setState({ uploadFile: true })}\n onDrop={(acceptedFiles, errors) => {\n this.setState({ uploadFile: false });\n if (!acceptedFiles.length) {\n window.alert((errors && errors[0] && errors[0].errors && errors[0].errors[0] && errors[0].errors[0].message) || I18n.t('Cannot upload'));\n } else {\n return this.onDrop(acceptedFiles);\n }\n }}\n >\n {({ getRootProps, getInputProps }) => <div\n className={Utils.clsx(\n this.props.classes.uploadDiv,\n this.state.uploadFile === 'dragging' && this.props.classes.uploadDivDragging,\n disabled && this.props.classes.disabledOpacity,\n )}\n {...getRootProps()}\n >\n <input {...getInputProps()} />\n {this.state.uploadFile === 'dragging' ? <div className={Utils.clsx(this.props.classes.uploadCenterDiv, this.state.uploadError && this.props.classes.error)}>\n <div className={this.props.classes.uploadCenterTextAndIcon}>\n <UploadIcon className={this.props.classes.uploadCenterIcon} />\n <div className={this.props.classes.uploadCenterText}>{\n this.state.uploadFile === 'dragging' ? I18n.t('Drop file here') :\n I18n.t('Place your files here or click here to open the browse dialog')}</div>\n </div>\n </div> : null}\n {element}\n {this.renderDeleteDialog()}\n </div>}\n </Dropzone>;\n }\n }\n}\n\nConfigFileSelector.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n imagePrefix: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigFileSelector);"],"mappings":"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"}
1
+ {"version":3,"file":"ConfigFileSelector.js","names":["styles","theme","fullWidth","width","fullWidthOneButton","fullWidthTwoButtons","fullWidthThreeButtons","dropZone","height","position","dropZoneEmpty","image","objectFit","margin","display","uploadDiv","uploadDivDragging","opacity","background","uploadCenterDiv","border","borderRadius","uploadCenterIcon","paddingTop","uploadCenterText","fontSize","uploadCenterTextAndIcon","textAlign","top","bottom","left","right","flexDirection","alignItems","justifyContent","disabledOpacity","cursor","error","deleteButton","selectedImage","marginRight","IMAGE_EXT","AUDIO_EXT","VIDEO_EXT","DOC_EXT","JS_EXT","ConfigFileSelector","props","dropzoneRef","React","createRef","imagePrefix","undefined","objectID","schema","replace","instance","path","upload","endsWith","updateFiles","then","value","ConfigGeneric","getValue","data","attr","setState","readFiles","pattern","files","folderName","filter","socket","readDir","dirFiles","f","length","file","isDir","readFolder","ok","includes","startsWith","regExp","RegExp","test","push","name","size","stats","Utils","formatBytes","console","pos","lastIndexOf","substring","folder","acceptedFiles","reader","FileReader","maxSize","onabort","log","onerror","onload","ext","split","pop","toLowerCase","window","alert","I18n","t","Math","round","base64","btoa","Uint8Array","result","reduce","byte","String","fromCharCode","writeFile64","e","readAsArrayBuffer","state","deleteFile","isOk","readFile","loadFile","AudioContext","context","buf","base64ToArrayBuffer","decodeAudioData","buffer","source","createBufferSource","connect","destination","start","err","item","extension","classes","backgroundImage","backgroundSize","backgroundRepeat","disabled","defaultValue","folders","withFolder","forEach","selectOptions","map","label","noSize","noNone","unshift","find","buttons","refresh","play","element","getText","val","getIcon","target","onChange","help","renderHelp","helpLink","noTranslation","current","open","color","renderDeleteDialog","accept","last","uploadFile","errors","message","onDrop","getRootProps","getInputProps","clsx","uploadError","binaryString","atob","len","bytes","i","charCodeAt","propTypes","PropTypes","object","isRequired","themeType","string","themeName","style","className","onError","func","withStyles"],"sources":["JsonConfigComponent/ConfigFileSelector.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\nimport Dropzone from 'react-dropzone';\n\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport FormControl from '@mui/material/FormControl';\nimport Select from '@mui/material/Select';\nimport IconButton from '@mui/material/IconButton';\nimport ListItemText from '@mui/material/ListItemText';\nimport ListItemIcon from '@mui/material/ListItemIcon';\n\nimport IconRefresh from '@mui/icons-material/Refresh';\nimport IconUpload from '@mui/icons-material/UploadFile';\nimport IconDelete from '@mui/icons-material/Delete';\nimport IconPlay from '@mui/icons-material/PlayArrow';\nimport IconAudio from '@mui/icons-material/MusicNote';\nimport IconVideo from '@mui/icons-material/Videocam';\nimport IconText from '@mui/icons-material/Article';\nimport IconCode from '@mui/icons-material/Code';\nimport { FaFileUpload as UploadIcon } from 'react-icons/fa';\n\nimport Utils from '../../Components/Utils';\nimport I18n from '../../i18n';\nimport ConfirmDialog from '../../Dialogs/Confirm';\n\nimport ConfigGeneric from './ConfigGeneric';\n\nconst styles = theme => ({\n fullWidth: {\n width: '100%'\n },\n fullWidthOneButton: {\n width: 'calc(100% - 42px)'\n },\n fullWidthTwoButtons: {\n width: 'calc(100% - 84px)'\n },\n fullWidthThreeButtons: {\n width: 'calc(100% - 126x)'\n },\n dropZone: {\n width: '100%',\n height: '100%',\n position: 'absolute',\n },\n dropZoneEmpty: {\n\n },\n image: {\n objectFit: 'contain',\n margin: 'auto',\n display: 'flex',\n width: '100%',\n height: '100%',\n },\n\n uploadDiv: {\n position: 'relative',\n width: '100%',\n },\n uploadDivDragging: {\n opacity: 1,\n background: 'rgba(128,255,128,0.1)'\n },\n\n uploadCenterDiv: {\n margin: 5,\n border: '3px dashed grey',\n borderRadius: 5,\n width: '100%',\n height: '100%',\n position: 'absolute',\n display: 'flex'\n },\n uploadCenterIcon: {\n paddingTop: 10,\n width: 48,\n height: 48,\n },\n uploadCenterText: {\n fontSize: 16,\n },\n uploadCenterTextAndIcon: {\n textAlign: 'center',\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center'\n\n },\n disabledOpacity: {\n opacity: 0.3,\n cursor: 'default'\n },\n error: {\n border: '2px solid red'\n },\n deleteButton: {\n\n },\n selectedImage: {\n height: 40,\n width: 40,\n display: 'inline-block',\n marginRight: 8,\n }\n});\n\nconst IMAGE_EXT = ['jpg', 'jpeg', 'svg', 'png', 'webp'];\nconst AUDIO_EXT = ['mp3', 'ogg', 'wav', 'aac'];\nconst VIDEO_EXT = ['avi', 'mp4', 'mov'];\nconst DOC_EXT = ['txt', 'log', 'html', 'htm'];\nconst JS_EXT = ['json', 'js', 'ts'];\n\nclass ConfigFileSelector extends ConfigGeneric {\n constructor(props) {\n super(props);\n this.dropzoneRef = React.createRef();\n this.imagePrefix = this.props.imagePrefix === undefined ? './files' : this.props.imagePrefix;\n }\n\n componentDidMount() {\n super.componentDidMount();\n\n this.objectID = (this.props.schema.objectID || '0_userdata.0').replace('%INSTANCE%', this.props.instance);\n this.path = this.props.schema.upload;\n if (this.path) {\n if (this.path === '/') {\n this.path = '';\n } else {\n if (!this.path.endsWith('/')) {\n this.path = this.path + '/';\n }\n }\n }\n\n // read files\n this.updateFiles()\n .then(() => {\n const value = ConfigGeneric.getValue(this.props.data, this.props.attr);\n this.setState({ value });\n });\n }\n\n updateFiles() {\n return this.readFiles(this.props.schema.pattern)\n .then(files => this.setState({ files }));\n }\n\n async readFolder(folderName, files, filter) {\n try {\n const dirFiles = await this.props.socket.readDir(this.objectID, folderName.replace(/^\\//, '') || null);\n for (let f = 0; f < dirFiles.length; f++) {\n const file = dirFiles[f];\n if (file.isDir) {\n // read it\n await this.readFolder(`${folderName + file.file}/`, files, filter);\n } else {\n let ok = false;\n if (filter === '*.*' && file.file.includes('.')) {\n ok = true;\n } else if (!filter || filter === '*') {\n ok = true;\n } else if (filter === '.*' && file.file.startsWith('.')) {\n ok = true;\n } else {\n const regExp = new RegExp('^' + filter.replace(/\\./g, '\\\\.').replace(/\\*/g,'.*') + '$');\n ok = regExp.test(file.file);\n }\n\n ok && files.push({ name: folderName + file.file, size: file.stats ? Utils.formatBytes(file.stats.size) : '--' })\n }\n }\n } catch (e) {\n console.error(`Cannot read \"${folderName}\": ${e}`);\n }\n\n return files;\n }\n\n async readFiles(pattern) {\n const files = [];\n pattern = pattern || this.props.schema.pattern;\n if (!pattern) {\n pattern = '**/*.*';\n }\n let filter;\n const pos = pattern.lastIndexOf('/');\n if (pos === -1) {\n filter = pattern;\n } else {\n filter = pattern.substring(pos + 1);\n }\n\n if (pattern.startsWith('**')) {\n // read all folders\n await this.readFolder('/', files, filter);\n } else {\n const pos = pattern.lastIndexOf('/');\n if (pos === -1) {\n await this.readFolder('/', files, filter);\n } else {\n const folder = pattern.substring(0, pos + 1);\n await this.readFolder(folder, files, filter);\n }\n }\n\n return files;\n }\n\n onDrop(acceptedFiles) {\n const file = acceptedFiles[0];\n const reader = new FileReader();\n const maxSize = this.props.schema.maxSize || (2 * 1024 * 1024);\n\n reader.onabort = () => console.log('file reading was aborted');\n reader.onerror = () => console.log('file reading has failed');\n reader.onload = () => {\n let ext = 'image/' + file.name.split('.').pop().toLowerCase();\n if (ext === 'image/jpg') {\n ext = 'image/jpeg';\n } else if (ext.includes('svg')) {\n ext = 'image/svg+xml';\n }\n if (file.size > maxSize) {\n return window.alert(I18n.t('File is too big. Max %sk allowed. Try use SVG.', Math.round(maxSize / 1024)));\n }\n const base64 = `data:${ext};base64,${btoa(\n new Uint8Array(reader.result)\n .reduce((data, byte) => data + String.fromCharCode(byte), ''))}`;\n\n this.props.socket.writeFile64(this.objectID, this.path + file.name, base64)\n .then(() => this.updateFiles())\n .catch(e => window.alert('Cannot upload file: ' + e));\n };\n reader.readAsArrayBuffer(file);\n }\n\n renderDeleteDialog() {\n if (!this.state.deleteFile) {\n return null;\n }\n return <ConfirmDialog\n title={ I18n.t('ra_Are you sure?') }\n text={ I18n.t('ra_File will be deleted') }\n ok={ I18n.t('ra_Delete') }\n cancel={ I18n.t('ra_Cancel') }\n onClose={isOk => {\n const deleteFile = this.state.deleteFile;\n this.setState({deleteFile: false}, () => {\n if (isOk) {\n this.props.socket.deleteFile(this.objectID, deleteFile)\n .then(() => this.updateFiles())\n .catch(e => window.alert('Cannot delete file: ' + e));\n }\n });\n }}\n />;\n }\n\n static base64ToArrayBuffer(base64) {\n const binaryString = window.atob(base64);\n const len = binaryString.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes.buffer;\n }\n\n loadFile() {\n return this.props.socket.readFile(this.objectID, this.state.value, true);\n }\n\n play() {\n this.loadFile()\n .then(data => {\n if (typeof AudioContext !== 'undefined') {\n const context = new AudioContext();\n const buf = ConfigFileSelector.base64ToArrayBuffer(data.file);\n context.decodeAudioData(buf, buffer => {\n const source = context.createBufferSource(); // creates a sound source\n source.buffer = buffer; // tell the source which sound to play\n source.connect(context.destination); // connect the source to the context's destination (the speakers)\n source.start(0);\n }, err => window.alert('Cannot play: ' + err));\n }\n });\n }\n\n getIcon(item) {\n if (!item || !item.extension) {\n return null;\n }\n if (IMAGE_EXT.includes(item.extension)) {\n return <div className={this.props.classes.selectedImage} style={{\n backgroundImage: `url(${this.imagePrefix}/${this.objectID}/${item.value})`,\n backgroundSize: 'contain',\n backgroundRepeat: 'no-repeat',\n }} />;\n } else if (AUDIO_EXT.includes(item.extension)) {\n return <IconAudio />;\n } else if (DOC_EXT.includes(item.extension)) {\n return <IconText />;\n } else if (VIDEO_EXT.includes(item.extension)) {\n return <IconVideo />;\n } else if (JS_EXT.includes(item.extension)) {\n return <IconCode />;\n }\n return null;\n }\n\n renderItem(error, disabled, defaultValue) {\n if (!this.state.files) {\n return null;\n }\n let folders = [];\n if (!this.props.schema.withFolder) {\n this.state.files.forEach(file => {\n const pos = file.name.lastIndexOf('/');\n if (pos === -1) {\n if (!folders.includes('/')) {\n folders.push('/');\n }\n } else {\n const folder = file.name.substring(0, pos + 1);\n if (!folders.includes(folder)) {\n folders.push(folder);\n }\n }\n });\n }\n\n const selectOptions = this.state.files\n .map(file => ({\n value: file.name,\n label: !this.props.schema.withFolder && folders.length === 1 ? `${file.name.substring(folders[0].length)}` : `${file.name}` + (this.props.schema.noSize ? '' : `(${file.size})`),\n extension: file.name.toLowerCase().split('.').pop(),\n }));\n\n if (!this.props.schema.noNone) {\n selectOptions.unshift({label: I18n.t('ra_none'), value: ''});\n }\n\n // eslint-disable-next-line\n const item = selectOptions.find(item => item.value === this.state.value);\n\n let buttons = 0;\n\n if (this.props.schema.upload) {\n buttons++;\n }\n if (this.props.schema.refresh) {\n buttons++;\n }\n let play = this.state.value && (this.state.value.endsWith('.mp3') || this.state.value.endsWith('.ogg') || this.state.value.endsWith('.wav'));\n // show play button\n if (play) {\n buttons++;\n }\n\n const element = <div className={this.props.classes.fullWidth}>\n <FormControl variant=\"standard\" style={{width: `calc(100% - ${buttons * 42}px)`}}>\n <InputLabel>{this.getText(this.props.schema.label)}</InputLabel>\n <Select\n variant=\"standard\"\n error={!!error}\n disabled={!!disabled}\n value={this.state.value || '_'}\n renderValue={val => {\n return <>{this.getIcon(item)}<span>{item?.label || ''}</span></>\n }}\n onChange={e => {\n this.setState({value: e.target.value === '_' ? '' : e.target.value}, () =>\n this.onChange(this.props.attr, this.state.value));\n }}\n >\n {selectOptions.map(item => {\n return <MenuItem key={item.value} value={item.value}>\n <ListItemIcon>{this.getIcon(item)}</ListItemIcon>\n <ListItemText>{item.label}</ListItemText>\n {this.props.schema.delete && item.value ?\n <IconButton className={this.props.classes.deleteButton} size=\"small\"\n onClick={() => this.setState({deleteFile: item.value})}><IconDelete/></IconButton> : null}\n </MenuItem>;\n })}\n </Select>\n {this.props.schema.help ? <FormHelperText>{this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)}</FormHelperText> : null}\n </FormControl>\n { this.props.schema.refresh && <IconButton onClick={() => this.updateFiles()}><IconRefresh /></IconButton> }\n { this.props.schema.upload && <IconButton onClick={() => this.dropzoneRef.current?.open()}><IconUpload /></IconButton> }\n { play && <IconButton style={{ color: '#00FF00' }} onClick={() => this.play()}><IconPlay /></IconButton> }\n </div>;\n\n if (!this.props.schema.upload) {\n return <>{element}{this.renderDeleteDialog()}</>;\n } else {\n let accept = {'*/*': []};\n if (this.props.schema.pattern) {\n const last = this.props.schema.pattern.split('/').pop().toLowerCase().replace(/.*\\./, '');\n if (last === 'png' || last === 'jpg' || last === 'svg') {\n accept = {\n 'image/*': ['.png', '.jpg', '.svg']\n };\n } else if (last === 'mp3' || last === 'ogg' || last === 'wav') {\n accept = {\n 'audio/*': ['.mp3', '.ogg', '.wav', '.mp4']\n };\n } else if (last === 'ics') {\n accept = {\n 'text/calendar': ['.mp3', '.ogg', '.wav', '.mp4']\n };\n } else if (last === 'txt') {\n accept = {\n 'text/plain': ['.txt']\n };\n } else if (last === 'pem') {\n accept = {\n 'text/plain': ['.pem']\n };\n } else if (last === 'pem') {\n accept = {\n '*/*': ['.' + last]\n };\n }\n }\n\n return <Dropzone\n ref={this.dropzoneRef}\n multiple={false}\n accept={accept}\n noKeyboard\n noClick\n maxSize={this.props.schema.maxSize || 2 * 1024 * 1024}\n onDragEnter={() => {\n this.setState({ uploadFile: 'dragging' });\n }}\n onDragLeave={() => this.setState({ uploadFile: true })}\n onDrop={(acceptedFiles, errors) => {\n this.setState({ uploadFile: false });\n if (!acceptedFiles.length) {\n window.alert((errors && errors[0] && errors[0].errors && errors[0].errors[0] && errors[0].errors[0].message) || I18n.t('Cannot upload'));\n } else {\n return this.onDrop(acceptedFiles);\n }\n }}\n >\n {({ getRootProps, getInputProps }) => <div\n className={Utils.clsx(\n this.props.classes.uploadDiv,\n this.state.uploadFile === 'dragging' && this.props.classes.uploadDivDragging,\n disabled && this.props.classes.disabledOpacity,\n )}\n {...getRootProps()}\n >\n <input {...getInputProps()} />\n {this.state.uploadFile === 'dragging' ? <div className={Utils.clsx(this.props.classes.uploadCenterDiv, this.state.uploadError && this.props.classes.error)}>\n <div className={this.props.classes.uploadCenterTextAndIcon}>\n <UploadIcon className={this.props.classes.uploadCenterIcon} />\n <div className={this.props.classes.uploadCenterText}>{\n this.state.uploadFile === 'dragging' ? I18n.t('ra_Drop file here') :\n I18n.t('ra_Place your files here or click here to open the browse dialog')}</div>\n </div>\n </div> : null}\n {element}\n {this.renderDeleteDialog()}\n </div>}\n </Dropzone>;\n }\n }\n}\n\nConfigFileSelector.propTypes = {\n socket: PropTypes.object.isRequired,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n style: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n schema: PropTypes.object,\n onError: PropTypes.func,\n onChange: PropTypes.func,\n imagePrefix: PropTypes.func,\n};\n\nexport default withStyles(styles)(ConfigFileSelector);"],"mappings":"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"}