@iobroker/adapter-react-v5 3.1.5 → 3.1.8
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.
- package/Components/JsonConfigComponent/ConfigFile.js +183 -0
- package/Components/JsonConfigComponent/ConfigFile.js.map +1 -0
- package/Components/JsonConfigComponent/ConfigFileSelector.js +747 -0
- package/Components/JsonConfigComponent/ConfigFileSelector.js.map +1 -0
- package/Connection.js +14 -1
- package/Connection.js.map +1 -1
- package/Dialogs/SelectID.js +1 -1
- package/Dialogs/SelectID.js.map +1 -1
- package/README.md +4 -1
- package/package.json +1 -1
|
@@ -0,0 +1,747 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = void 0;
|
|
9
|
+
|
|
10
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
11
|
+
|
|
12
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
13
|
+
|
|
14
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
15
|
+
|
|
16
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
17
|
+
|
|
18
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
19
|
+
|
|
20
|
+
var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
|
|
21
|
+
|
|
22
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
23
|
+
|
|
24
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
25
|
+
|
|
26
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
27
|
+
|
|
28
|
+
var _react = _interopRequireDefault(require("react"));
|
|
29
|
+
|
|
30
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
31
|
+
|
|
32
|
+
var _styles = require("@mui/styles");
|
|
33
|
+
|
|
34
|
+
var _reactDropzone = _interopRequireDefault(require("react-dropzone"));
|
|
35
|
+
|
|
36
|
+
var _InputLabel = _interopRequireDefault(require("@mui/material/InputLabel"));
|
|
37
|
+
|
|
38
|
+
var _MenuItem = _interopRequireDefault(require("@mui/material/MenuItem"));
|
|
39
|
+
|
|
40
|
+
var _FormHelperText = _interopRequireDefault(require("@mui/material/FormHelperText"));
|
|
41
|
+
|
|
42
|
+
var _FormControl = _interopRequireDefault(require("@mui/material/FormControl"));
|
|
43
|
+
|
|
44
|
+
var _Select = _interopRequireDefault(require("@mui/material/Select"));
|
|
45
|
+
|
|
46
|
+
var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
|
|
47
|
+
|
|
48
|
+
var _ListItemText = _interopRequireDefault(require("@mui/material/ListItemText"));
|
|
49
|
+
|
|
50
|
+
var _ListItemIcon = _interopRequireDefault(require("@mui/material/ListItemIcon"));
|
|
51
|
+
|
|
52
|
+
var _Refresh = _interopRequireDefault(require("@mui/icons-material/Refresh"));
|
|
53
|
+
|
|
54
|
+
var _UploadFile = _interopRequireDefault(require("@mui/icons-material/UploadFile"));
|
|
55
|
+
|
|
56
|
+
var _Delete = _interopRequireDefault(require("@mui/icons-material/Delete"));
|
|
57
|
+
|
|
58
|
+
var _PlayArrow = _interopRequireDefault(require("@mui/icons-material/PlayArrow"));
|
|
59
|
+
|
|
60
|
+
var _MusicNote = _interopRequireDefault(require("@mui/icons-material/MusicNote"));
|
|
61
|
+
|
|
62
|
+
var _Videocam = _interopRequireDefault(require("@mui/icons-material/Videocam"));
|
|
63
|
+
|
|
64
|
+
var _Article = _interopRequireDefault(require("@mui/icons-material/Article"));
|
|
65
|
+
|
|
66
|
+
var _Code = _interopRequireDefault(require("@mui/icons-material/Code"));
|
|
67
|
+
|
|
68
|
+
var _fa = require("react-icons/fa");
|
|
69
|
+
|
|
70
|
+
var _Utils = _interopRequireDefault(require("../../Components/Utils"));
|
|
71
|
+
|
|
72
|
+
var _i18n = _interopRequireDefault(require("../../i18n"));
|
|
73
|
+
|
|
74
|
+
var _Confirm = _interopRequireDefault(require("../../Dialogs/Confirm"));
|
|
75
|
+
|
|
76
|
+
var _ConfigGeneric2 = _interopRequireDefault(require("./ConfigGeneric"));
|
|
77
|
+
|
|
78
|
+
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); }; }
|
|
79
|
+
|
|
80
|
+
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; } }
|
|
81
|
+
|
|
82
|
+
var styles = function styles(theme) {
|
|
83
|
+
return {
|
|
84
|
+
fullWidth: {
|
|
85
|
+
width: '100%'
|
|
86
|
+
},
|
|
87
|
+
fullWidthOneButton: {
|
|
88
|
+
width: 'calc(100% - 42px)'
|
|
89
|
+
},
|
|
90
|
+
fullWidthTwoButtons: {
|
|
91
|
+
width: 'calc(100% - 84px)'
|
|
92
|
+
},
|
|
93
|
+
fullWidthThreeButtons: {
|
|
94
|
+
width: 'calc(100% - 126x)'
|
|
95
|
+
},
|
|
96
|
+
dropZone: {
|
|
97
|
+
width: '100%',
|
|
98
|
+
height: '100%',
|
|
99
|
+
position: 'absolute'
|
|
100
|
+
},
|
|
101
|
+
dropZoneEmpty: {},
|
|
102
|
+
image: {
|
|
103
|
+
objectFit: 'contain',
|
|
104
|
+
margin: 'auto',
|
|
105
|
+
display: 'flex',
|
|
106
|
+
width: '100%',
|
|
107
|
+
height: '100%'
|
|
108
|
+
},
|
|
109
|
+
uploadDiv: {
|
|
110
|
+
position: 'relative',
|
|
111
|
+
width: '100%'
|
|
112
|
+
},
|
|
113
|
+
uploadDivDragging: {
|
|
114
|
+
opacity: 1,
|
|
115
|
+
background: 'rgba(128,255,128,0.1)'
|
|
116
|
+
},
|
|
117
|
+
uploadCenterDiv: {
|
|
118
|
+
margin: 5,
|
|
119
|
+
border: '3px dashed grey',
|
|
120
|
+
borderRadius: 5,
|
|
121
|
+
width: '100%',
|
|
122
|
+
height: '100%',
|
|
123
|
+
position: 'absolute',
|
|
124
|
+
display: 'flex'
|
|
125
|
+
},
|
|
126
|
+
uploadCenterIcon: {
|
|
127
|
+
paddingTop: 10,
|
|
128
|
+
width: 48,
|
|
129
|
+
height: 48
|
|
130
|
+
},
|
|
131
|
+
uploadCenterText: {
|
|
132
|
+
fontSize: 16
|
|
133
|
+
},
|
|
134
|
+
uploadCenterTextAndIcon: {
|
|
135
|
+
textAlign: 'center',
|
|
136
|
+
position: 'absolute',
|
|
137
|
+
top: 0,
|
|
138
|
+
bottom: 0,
|
|
139
|
+
left: 0,
|
|
140
|
+
right: 0,
|
|
141
|
+
display: 'flex',
|
|
142
|
+
flexDirection: 'column',
|
|
143
|
+
alignItems: 'center',
|
|
144
|
+
justifyContent: 'center'
|
|
145
|
+
},
|
|
146
|
+
disabledOpacity: {
|
|
147
|
+
opacity: 0.3,
|
|
148
|
+
cursor: 'default'
|
|
149
|
+
},
|
|
150
|
+
error: {
|
|
151
|
+
border: '2px solid red'
|
|
152
|
+
},
|
|
153
|
+
deleteButton: {},
|
|
154
|
+
selectedImage: {
|
|
155
|
+
height: 40,
|
|
156
|
+
width: 40,
|
|
157
|
+
display: 'inline-block',
|
|
158
|
+
marginRight: 8
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
var IMAGE_EXT = ['jpg', 'jpeg', 'svg', 'png', 'webp'];
|
|
164
|
+
var AUDIO_EXT = ['mp3', 'ogg', 'wav', 'aac'];
|
|
165
|
+
var VIDEO_EXT = ['avi', 'mp4', 'mov'];
|
|
166
|
+
var DOC_EXT = ['txt', 'log', 'html', 'htm'];
|
|
167
|
+
var JS_EXT = ['json', 'js', 'ts'];
|
|
168
|
+
|
|
169
|
+
var ConfigFileSelector = /*#__PURE__*/function (_ConfigGeneric) {
|
|
170
|
+
(0, _inherits2["default"])(ConfigFileSelector, _ConfigGeneric);
|
|
171
|
+
|
|
172
|
+
var _super = _createSuper(ConfigFileSelector);
|
|
173
|
+
|
|
174
|
+
function ConfigFileSelector(props) {
|
|
175
|
+
var _this;
|
|
176
|
+
|
|
177
|
+
(0, _classCallCheck2["default"])(this, ConfigFileSelector);
|
|
178
|
+
_this = _super.call(this, props);
|
|
179
|
+
_this.dropzoneRef = /*#__PURE__*/_react["default"].createRef();
|
|
180
|
+
_this.imagePrefix = _this.props.imagePrefix === undefined ? '../../files' : _this.props.imagePrefix;
|
|
181
|
+
return _this;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
(0, _createClass2["default"])(ConfigFileSelector, [{
|
|
185
|
+
key: "componentDidMount",
|
|
186
|
+
value: function componentDidMount() {
|
|
187
|
+
var _this2 = this;
|
|
188
|
+
|
|
189
|
+
(0, _get2["default"])((0, _getPrototypeOf2["default"])(ConfigFileSelector.prototype), "componentDidMount", this).call(this);
|
|
190
|
+
this.objectID = (this.props.schema.objectID || '0_userdata.0').replace('%INSTANCE%', this.props.instance);
|
|
191
|
+
this.path = this.props.schema.upload;
|
|
192
|
+
|
|
193
|
+
if (this.path) {
|
|
194
|
+
if (this.path === '/') {
|
|
195
|
+
this.path = '';
|
|
196
|
+
} else {
|
|
197
|
+
if (!this.path.endsWith('/')) {
|
|
198
|
+
this.path = this.path + '/';
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
} // read files
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
this.updateFiles().then(function () {
|
|
205
|
+
var value = _ConfigGeneric2["default"].getValue(_this2.props.data, _this2.props.attr);
|
|
206
|
+
|
|
207
|
+
_this2.setState({
|
|
208
|
+
value: value
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
_this2.checkImage();
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
}, {
|
|
215
|
+
key: "updateFiles",
|
|
216
|
+
value: function updateFiles() {
|
|
217
|
+
var _this3 = this;
|
|
218
|
+
|
|
219
|
+
return this.readFiles(this.props.schema.pattern).then(function (files) {
|
|
220
|
+
return _this3.setState({
|
|
221
|
+
files: files
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
}, {
|
|
226
|
+
key: "readFolder",
|
|
227
|
+
value: function () {
|
|
228
|
+
var _readFolder = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(folderName, files, filter) {
|
|
229
|
+
var dirFiles, f, file, ok, regExp;
|
|
230
|
+
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
231
|
+
while (1) {
|
|
232
|
+
switch (_context.prev = _context.next) {
|
|
233
|
+
case 0:
|
|
234
|
+
_context.prev = 0;
|
|
235
|
+
_context.next = 3;
|
|
236
|
+
return this.props.socket.readDir(this.objectID, folderName.replace(/^\//, '') || null);
|
|
237
|
+
|
|
238
|
+
case 3:
|
|
239
|
+
dirFiles = _context.sent;
|
|
240
|
+
f = 0;
|
|
241
|
+
|
|
242
|
+
case 5:
|
|
243
|
+
if (!(f < dirFiles.length)) {
|
|
244
|
+
_context.next = 18;
|
|
245
|
+
break;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
file = dirFiles[f];
|
|
249
|
+
|
|
250
|
+
if (!file.isDir) {
|
|
251
|
+
_context.next = 12;
|
|
252
|
+
break;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
_context.next = 10;
|
|
256
|
+
return this.readFolder("".concat(folderName + file.file, "/"), files, filter);
|
|
257
|
+
|
|
258
|
+
case 10:
|
|
259
|
+
_context.next = 15;
|
|
260
|
+
break;
|
|
261
|
+
|
|
262
|
+
case 12:
|
|
263
|
+
ok = false;
|
|
264
|
+
|
|
265
|
+
if (filter === '*.*' && file.file.includes('.')) {
|
|
266
|
+
ok = true;
|
|
267
|
+
} else if (!filter || filter === '*') {
|
|
268
|
+
ok = true;
|
|
269
|
+
} else if (filter === '.*' && file.file.startsWith('.')) {
|
|
270
|
+
ok = true;
|
|
271
|
+
} else {
|
|
272
|
+
regExp = new RegExp('^' + filter.replace(/\./g, '\\.').replace(/\*/g, '.*') + '$');
|
|
273
|
+
ok = regExp.test(file.file);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
ok && files.push({
|
|
277
|
+
name: folderName + file.file,
|
|
278
|
+
size: file.stats ? _Utils["default"].formatBytes(file.stats.size) : '--'
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
case 15:
|
|
282
|
+
f++;
|
|
283
|
+
_context.next = 5;
|
|
284
|
+
break;
|
|
285
|
+
|
|
286
|
+
case 18:
|
|
287
|
+
_context.next = 23;
|
|
288
|
+
break;
|
|
289
|
+
|
|
290
|
+
case 20:
|
|
291
|
+
_context.prev = 20;
|
|
292
|
+
_context.t0 = _context["catch"](0);
|
|
293
|
+
console.error("Cannot read \"".concat(folderName, "\": ").concat(_context.t0));
|
|
294
|
+
|
|
295
|
+
case 23:
|
|
296
|
+
return _context.abrupt("return", files);
|
|
297
|
+
|
|
298
|
+
case 24:
|
|
299
|
+
case "end":
|
|
300
|
+
return _context.stop();
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}, _callee, this, [[0, 20]]);
|
|
304
|
+
}));
|
|
305
|
+
|
|
306
|
+
function readFolder(_x, _x2, _x3) {
|
|
307
|
+
return _readFolder.apply(this, arguments);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
return readFolder;
|
|
311
|
+
}()
|
|
312
|
+
}, {
|
|
313
|
+
key: "readFiles",
|
|
314
|
+
value: function () {
|
|
315
|
+
var _readFiles = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(pattern) {
|
|
316
|
+
var files, filter, pos, _pos, folder;
|
|
317
|
+
|
|
318
|
+
return _regenerator["default"].wrap(function _callee2$(_context2) {
|
|
319
|
+
while (1) {
|
|
320
|
+
switch (_context2.prev = _context2.next) {
|
|
321
|
+
case 0:
|
|
322
|
+
files = [];
|
|
323
|
+
pattern = pattern || this.props.schema.pattern;
|
|
324
|
+
|
|
325
|
+
if (!pattern) {
|
|
326
|
+
pattern = '**/*.*';
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
pos = pattern.lastIndexOf('/');
|
|
330
|
+
|
|
331
|
+
if (pos === -1) {
|
|
332
|
+
filter = pattern;
|
|
333
|
+
} else {
|
|
334
|
+
filter = pattern.substring(pos + 1);
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
if (!pattern.startsWith('**')) {
|
|
338
|
+
_context2.next = 10;
|
|
339
|
+
break;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
_context2.next = 8;
|
|
343
|
+
return this.readFolder('/', files, filter);
|
|
344
|
+
|
|
345
|
+
case 8:
|
|
346
|
+
_context2.next = 19;
|
|
347
|
+
break;
|
|
348
|
+
|
|
349
|
+
case 10:
|
|
350
|
+
_pos = pattern.lastIndexOf('/');
|
|
351
|
+
|
|
352
|
+
if (!(_pos === -1)) {
|
|
353
|
+
_context2.next = 16;
|
|
354
|
+
break;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
_context2.next = 14;
|
|
358
|
+
return this.readFolder('/', files, filter);
|
|
359
|
+
|
|
360
|
+
case 14:
|
|
361
|
+
_context2.next = 19;
|
|
362
|
+
break;
|
|
363
|
+
|
|
364
|
+
case 16:
|
|
365
|
+
folder = pattern.substring(0, _pos + 1);
|
|
366
|
+
_context2.next = 19;
|
|
367
|
+
return this.readFolder(folder, files, filter);
|
|
368
|
+
|
|
369
|
+
case 19:
|
|
370
|
+
return _context2.abrupt("return", files);
|
|
371
|
+
|
|
372
|
+
case 20:
|
|
373
|
+
case "end":
|
|
374
|
+
return _context2.stop();
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}, _callee2, this);
|
|
378
|
+
}));
|
|
379
|
+
|
|
380
|
+
function readFiles(_x4) {
|
|
381
|
+
return _readFiles.apply(this, arguments);
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
return readFiles;
|
|
385
|
+
}()
|
|
386
|
+
}, {
|
|
387
|
+
key: "onDrop",
|
|
388
|
+
value: function onDrop(acceptedFiles) {
|
|
389
|
+
var _this4 = this;
|
|
390
|
+
|
|
391
|
+
var file = acceptedFiles[0];
|
|
392
|
+
var reader = new FileReader();
|
|
393
|
+
var maxSize = this.props.schema.maxSize || 2 * 1024 * 1024;
|
|
394
|
+
|
|
395
|
+
reader.onabort = function () {
|
|
396
|
+
return console.log('file reading was aborted');
|
|
397
|
+
};
|
|
398
|
+
|
|
399
|
+
reader.onerror = function () {
|
|
400
|
+
return console.log('file reading has failed');
|
|
401
|
+
};
|
|
402
|
+
|
|
403
|
+
reader.onload = function () {
|
|
404
|
+
var ext = 'image/' + file.name.split('.').pop().toLowerCase();
|
|
405
|
+
|
|
406
|
+
if (ext === 'image/jpg') {
|
|
407
|
+
ext = 'image/jpeg';
|
|
408
|
+
} else if (ext.includes('svg')) {
|
|
409
|
+
ext = 'image/svg+xml';
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
if (file.size > maxSize) {
|
|
413
|
+
return window.alert(_i18n["default"].t('File is too big. Max %sk allowed. Try use SVG.', Math.round(maxSize / 1024)));
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
var base64 = "data:".concat(ext, ";base64,").concat(btoa(new Uint8Array(reader.result).reduce(function (data, _byte) {
|
|
417
|
+
return data + String.fromCharCode(_byte);
|
|
418
|
+
}, '')));
|
|
419
|
+
|
|
420
|
+
_this4.props.socket.writeFile64(_this4.objectID, _this4.path + file.name, base64).then(function () {
|
|
421
|
+
return _this4.updateFiles();
|
|
422
|
+
})["catch"](function (e) {
|
|
423
|
+
return window.alert('Cannot upload file: ' + e);
|
|
424
|
+
});
|
|
425
|
+
};
|
|
426
|
+
|
|
427
|
+
reader.readAsArrayBuffer(file);
|
|
428
|
+
}
|
|
429
|
+
}, {
|
|
430
|
+
key: "loadFile",
|
|
431
|
+
value: function loadFile() {
|
|
432
|
+
return this.props.socket.readFile(this.objectID, this.state.value, true);
|
|
433
|
+
}
|
|
434
|
+
}, {
|
|
435
|
+
key: "renderDeleteDialog",
|
|
436
|
+
value: function renderDeleteDialog() {
|
|
437
|
+
var _this5 = this;
|
|
438
|
+
|
|
439
|
+
if (!this.state.deleteFile) {
|
|
440
|
+
return null;
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
return /*#__PURE__*/_react["default"].createElement(_Confirm["default"], {
|
|
444
|
+
title: _i18n["default"].t('ra_Are you sure?'),
|
|
445
|
+
text: _i18n["default"].t('ra_File will be deleted'),
|
|
446
|
+
ok: _i18n["default"].t('ra_Delete'),
|
|
447
|
+
cancel: _i18n["default"].t('ra_Cancel'),
|
|
448
|
+
onClose: function onClose(isOk) {
|
|
449
|
+
var deleteFile = _this5.state.deleteFile;
|
|
450
|
+
|
|
451
|
+
_this5.setState({
|
|
452
|
+
deleteFile: false
|
|
453
|
+
}, function () {
|
|
454
|
+
if (isOk) {
|
|
455
|
+
_this5.props.socket.deleteFile(_this5.objectID, deleteFile).then(function () {
|
|
456
|
+
return _this5.updateFiles();
|
|
457
|
+
})["catch"](function (e) {
|
|
458
|
+
return window.alert('Cannot delete file: ' + e);
|
|
459
|
+
});
|
|
460
|
+
}
|
|
461
|
+
});
|
|
462
|
+
}
|
|
463
|
+
});
|
|
464
|
+
}
|
|
465
|
+
}, {
|
|
466
|
+
key: "play",
|
|
467
|
+
value: function play() {
|
|
468
|
+
this.loadFile().then(function (data) {
|
|
469
|
+
if (typeof AudioContext !== 'undefined') {
|
|
470
|
+
var context = new AudioContext();
|
|
471
|
+
var buf = ConfigFileSelector.base64ToArrayBuffer(data.file);
|
|
472
|
+
context.decodeAudioData(buf, function (buffer) {
|
|
473
|
+
var source = context.createBufferSource(); // creates a sound source
|
|
474
|
+
|
|
475
|
+
source.buffer = buffer; // tell the source which sound to play
|
|
476
|
+
|
|
477
|
+
source.connect(context.destination); // connect the source to the context's destination (the speakers)
|
|
478
|
+
|
|
479
|
+
source.start(0);
|
|
480
|
+
}, function (err) {
|
|
481
|
+
return window.alert('Cannot play: ' + err);
|
|
482
|
+
});
|
|
483
|
+
}
|
|
484
|
+
});
|
|
485
|
+
}
|
|
486
|
+
}, {
|
|
487
|
+
key: "getIcon",
|
|
488
|
+
value: function getIcon(item) {
|
|
489
|
+
if (!item || !item.extension) {
|
|
490
|
+
return null;
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
if (IMAGE_EXT.includes(item.extension)) {
|
|
494
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
495
|
+
className: this.props.classes.selectedImage,
|
|
496
|
+
style: {
|
|
497
|
+
backgroundImage: 'url(' + this.imagePrefix + '/' + this.objectID + '/' + item.value + ')',
|
|
498
|
+
backgroundSize: 'contain',
|
|
499
|
+
backgroundRepeat: 'no-repeat'
|
|
500
|
+
}
|
|
501
|
+
});
|
|
502
|
+
} else if (AUDIO_EXT.includes(item.extension)) {
|
|
503
|
+
return /*#__PURE__*/_react["default"].createElement(_MusicNote["default"], null);
|
|
504
|
+
} else if (DOC_EXT.includes(item.extension)) {
|
|
505
|
+
return /*#__PURE__*/_react["default"].createElement(_Article["default"], null);
|
|
506
|
+
} else if (VIDEO_EXT.includes(item.extension)) {
|
|
507
|
+
return /*#__PURE__*/_react["default"].createElement(_Videocam["default"], null);
|
|
508
|
+
} else if (JS_EXT.includes(item.extension)) {
|
|
509
|
+
return /*#__PURE__*/_react["default"].createElement(_Code["default"], null);
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
return null;
|
|
513
|
+
}
|
|
514
|
+
}, {
|
|
515
|
+
key: "renderItem",
|
|
516
|
+
value: function renderItem(error, disabled, defaultValue) {
|
|
517
|
+
var _this6 = this;
|
|
518
|
+
|
|
519
|
+
if (!this.state.files) {
|
|
520
|
+
return null;
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
var folders = [];
|
|
524
|
+
|
|
525
|
+
if (!this.props.schema.withFolder) {
|
|
526
|
+
this.state.files.forEach(function (file) {
|
|
527
|
+
var pos = file.name.lastIndexOf('/');
|
|
528
|
+
|
|
529
|
+
if (pos === -1) {
|
|
530
|
+
if (!folders.includes('/')) {
|
|
531
|
+
folders.push('/');
|
|
532
|
+
}
|
|
533
|
+
} else {
|
|
534
|
+
var folder = file.name.substring(0, pos + 1);
|
|
535
|
+
|
|
536
|
+
if (!folders.includes(folder)) {
|
|
537
|
+
folders.push(folder);
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
});
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
var selectOptions = this.state.files.map(function (file) {
|
|
544
|
+
return {
|
|
545
|
+
value: file.name,
|
|
546
|
+
label: !_this6.props.schema.withFolder && folders.length === 1 ? "".concat(file.name.substring(folders[0].length)) : "".concat(file.name) + (_this6.props.schema.noSize ? '' : "(".concat(file.size, ")")),
|
|
547
|
+
extension: file.name.toLowerCase().split('.').pop()
|
|
548
|
+
};
|
|
549
|
+
});
|
|
550
|
+
|
|
551
|
+
if (!this.props.schema.noNone) {
|
|
552
|
+
selectOptions.unshift({
|
|
553
|
+
label: _i18n["default"].t('ra_none'),
|
|
554
|
+
value: ''
|
|
555
|
+
});
|
|
556
|
+
} // eslint-disable-next-line
|
|
557
|
+
|
|
558
|
+
|
|
559
|
+
var item = selectOptions.find(function (item) {
|
|
560
|
+
return item.value === _this6.state.value;
|
|
561
|
+
});
|
|
562
|
+
var buttons = 0;
|
|
563
|
+
|
|
564
|
+
if (this.props.schema.upload) {
|
|
565
|
+
buttons++;
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
if (this.props.schema.refresh) {
|
|
569
|
+
buttons++;
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
var play = this.state.value && (this.state.value.endsWith('.mp3') || this.state.value.endsWith('.ogg') || this.state.value.endsWith('.wav')); // show play button
|
|
573
|
+
|
|
574
|
+
if (play) {
|
|
575
|
+
buttons++;
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
var element = /*#__PURE__*/_react["default"].createElement("div", {
|
|
579
|
+
className: this.props.classes.fullWidth
|
|
580
|
+
}, /*#__PURE__*/_react["default"].createElement(_FormControl["default"], {
|
|
581
|
+
variant: "standard",
|
|
582
|
+
style: {
|
|
583
|
+
width: "calc(100% - ".concat(buttons * 42, "px)")
|
|
584
|
+
}
|
|
585
|
+
}, /*#__PURE__*/_react["default"].createElement(_InputLabel["default"], null, this.getText(this.props.schema.label)), /*#__PURE__*/_react["default"].createElement(_Select["default"], {
|
|
586
|
+
variant: "standard",
|
|
587
|
+
error: !!error,
|
|
588
|
+
disabled: !!disabled,
|
|
589
|
+
value: this.state.value || '_',
|
|
590
|
+
renderValue: function renderValue(val) {
|
|
591
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, _this6.getIcon(item), /*#__PURE__*/_react["default"].createElement("span", null, (item === null || item === void 0 ? void 0 : item.label) || ''));
|
|
592
|
+
},
|
|
593
|
+
onChange: function onChange(e) {
|
|
594
|
+
_this6.setState({
|
|
595
|
+
value: e.target.value === '_' ? '' : e.target.value
|
|
596
|
+
}, function () {
|
|
597
|
+
return _this6.onChange(_this6.props.attr, _this6.state.value);
|
|
598
|
+
});
|
|
599
|
+
}
|
|
600
|
+
}, selectOptions.map(function (item) {
|
|
601
|
+
return /*#__PURE__*/_react["default"].createElement(_MenuItem["default"], {
|
|
602
|
+
key: item.value,
|
|
603
|
+
value: item.value
|
|
604
|
+
}, /*#__PURE__*/_react["default"].createElement(_ListItemIcon["default"], null, _this6.getIcon(item)), /*#__PURE__*/_react["default"].createElement(_ListItemText["default"], null, item.label), _this6.props.schema["delete"] && item.value ? /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
|
|
605
|
+
className: _this6.props.classes.deleteButton,
|
|
606
|
+
size: "small",
|
|
607
|
+
onClick: function onClick() {
|
|
608
|
+
return _this6.setState({
|
|
609
|
+
deleteFile: item.value
|
|
610
|
+
});
|
|
611
|
+
}
|
|
612
|
+
}, /*#__PURE__*/_react["default"].createElement(_Delete["default"], null)) : null);
|
|
613
|
+
})), this.props.schema.help ? /*#__PURE__*/_react["default"].createElement(_FormHelperText["default"], null, this.renderHelp(this.props.schema.help, this.props.schema.helpLink, this.props.schema.noTranslation)) : null), this.props.schema.refresh && /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
|
|
614
|
+
onClick: function onClick() {
|
|
615
|
+
return _this6.updateFiles();
|
|
616
|
+
}
|
|
617
|
+
}, /*#__PURE__*/_react["default"].createElement(_Refresh["default"], null)), this.props.schema.upload && /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
|
|
618
|
+
onClick: function onClick() {
|
|
619
|
+
var _this6$dropzoneRef$cu;
|
|
620
|
+
|
|
621
|
+
return (_this6$dropzoneRef$cu = _this6.dropzoneRef.current) === null || _this6$dropzoneRef$cu === void 0 ? void 0 : _this6$dropzoneRef$cu.open();
|
|
622
|
+
}
|
|
623
|
+
}, /*#__PURE__*/_react["default"].createElement(_UploadFile["default"], null)), play && /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
|
|
624
|
+
style: {
|
|
625
|
+
color: '#00FF00'
|
|
626
|
+
},
|
|
627
|
+
onClick: function onClick() {
|
|
628
|
+
return _this6.play();
|
|
629
|
+
}
|
|
630
|
+
}, /*#__PURE__*/_react["default"].createElement(_PlayArrow["default"], null)));
|
|
631
|
+
|
|
632
|
+
if (!this.props.schema.upload) {
|
|
633
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, element, this.renderDeleteDialog());
|
|
634
|
+
} else {
|
|
635
|
+
var accept = {
|
|
636
|
+
'*/*': []
|
|
637
|
+
};
|
|
638
|
+
|
|
639
|
+
if (this.props.schema.pattern) {
|
|
640
|
+
var last = this.props.schema.pattern.split('/').pop().toLowerCase().replace(/.*\./, '');
|
|
641
|
+
|
|
642
|
+
if (last === 'png' || last === 'jpg' || last === 'svg') {
|
|
643
|
+
accept = {
|
|
644
|
+
'image/*': ['.png', '.jpg', '.svg']
|
|
645
|
+
};
|
|
646
|
+
} else if (last === 'mp3' || last === 'ogg' || last === 'wav') {
|
|
647
|
+
accept = {
|
|
648
|
+
'audio/*': ['.mp3', '.ogg', '.wav', '.mp4']
|
|
649
|
+
};
|
|
650
|
+
} else if (last === 'ics') {
|
|
651
|
+
accept = {
|
|
652
|
+
'text/calendar': ['.mp3', '.ogg', '.wav', '.mp4']
|
|
653
|
+
};
|
|
654
|
+
} else if (last === 'txt') {
|
|
655
|
+
accept = {
|
|
656
|
+
'text/plain': ['.txt']
|
|
657
|
+
};
|
|
658
|
+
} else if (last === 'pem') {
|
|
659
|
+
accept = {
|
|
660
|
+
'text/plain': ['.pem']
|
|
661
|
+
};
|
|
662
|
+
} else if (last === 'pem') {
|
|
663
|
+
accept = {
|
|
664
|
+
'*/*': ['.' + last]
|
|
665
|
+
};
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
return /*#__PURE__*/_react["default"].createElement(_reactDropzone["default"], {
|
|
670
|
+
ref: this.dropzoneRef,
|
|
671
|
+
multiple: false,
|
|
672
|
+
accept: accept,
|
|
673
|
+
noKeyboard: true,
|
|
674
|
+
noClick: true,
|
|
675
|
+
maxSize: this.props.schema.maxSize || 2 * 1024 * 1024,
|
|
676
|
+
onDragEnter: function onDragEnter() {
|
|
677
|
+
_this6.setState({
|
|
678
|
+
uploadFile: 'dragging'
|
|
679
|
+
});
|
|
680
|
+
},
|
|
681
|
+
onDragLeave: function onDragLeave() {
|
|
682
|
+
return _this6.setState({
|
|
683
|
+
uploadFile: true
|
|
684
|
+
});
|
|
685
|
+
},
|
|
686
|
+
onDrop: function onDrop(acceptedFiles, errors) {
|
|
687
|
+
_this6.setState({
|
|
688
|
+
uploadFile: false
|
|
689
|
+
});
|
|
690
|
+
|
|
691
|
+
if (!acceptedFiles.length) {
|
|
692
|
+
window.alert(errors && errors[0] && errors[0].errors && errors[0].errors[0] && errors[0].errors[0].message || _i18n["default"].t('Cannot upload'));
|
|
693
|
+
} else {
|
|
694
|
+
return _this6.onDrop(acceptedFiles);
|
|
695
|
+
}
|
|
696
|
+
}
|
|
697
|
+
}, function (_ref) {
|
|
698
|
+
var getRootProps = _ref.getRootProps,
|
|
699
|
+
getInputProps = _ref.getInputProps;
|
|
700
|
+
return /*#__PURE__*/_react["default"].createElement("div", (0, _extends2["default"])({
|
|
701
|
+
className: _Utils["default"].clsx(_this6.props.classes.uploadDiv, _this6.state.uploadFile === 'dragging' && _this6.props.classes.uploadDivDragging, disabled && _this6.props.classes.disabledOpacity)
|
|
702
|
+
}, getRootProps()), /*#__PURE__*/_react["default"].createElement("input", getInputProps()), _this6.state.uploadFile === 'dragging' ? /*#__PURE__*/_react["default"].createElement("div", {
|
|
703
|
+
className: _Utils["default"].clsx(_this6.props.classes.uploadCenterDiv, _this6.state.uploadError && _this6.props.classes.error)
|
|
704
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
705
|
+
className: _this6.props.classes.uploadCenterTextAndIcon
|
|
706
|
+
}, /*#__PURE__*/_react["default"].createElement(_fa.FaFileUpload, {
|
|
707
|
+
className: _this6.props.classes.uploadCenterIcon
|
|
708
|
+
}), /*#__PURE__*/_react["default"].createElement("div", {
|
|
709
|
+
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());
|
|
711
|
+
});
|
|
712
|
+
}
|
|
713
|
+
}
|
|
714
|
+
}], [{
|
|
715
|
+
key: "base64ToArrayBuffer",
|
|
716
|
+
value: function base64ToArrayBuffer(base64) {
|
|
717
|
+
var binary_string = window.atob(base64);
|
|
718
|
+
var len = binary_string.length;
|
|
719
|
+
var bytes = new Uint8Array(len);
|
|
720
|
+
|
|
721
|
+
for (var i = 0; i < len; i++) {
|
|
722
|
+
bytes[i] = binary_string.charCodeAt(i);
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
return bytes.buffer;
|
|
726
|
+
}
|
|
727
|
+
}]);
|
|
728
|
+
return ConfigFileSelector;
|
|
729
|
+
}(_ConfigGeneric2["default"]);
|
|
730
|
+
|
|
731
|
+
ConfigFileSelector.propTypes = {
|
|
732
|
+
socket: _propTypes["default"].object.isRequired,
|
|
733
|
+
themeType: _propTypes["default"].string,
|
|
734
|
+
themeName: _propTypes["default"].string,
|
|
735
|
+
style: _propTypes["default"].object,
|
|
736
|
+
className: _propTypes["default"].string,
|
|
737
|
+
data: _propTypes["default"].object.isRequired,
|
|
738
|
+
schema: _propTypes["default"].object,
|
|
739
|
+
onError: _propTypes["default"].func,
|
|
740
|
+
onChange: _propTypes["default"].func,
|
|
741
|
+
imagePrefix: _propTypes["default"].func
|
|
742
|
+
};
|
|
743
|
+
|
|
744
|
+
var _default = (0, _styles.withStyles)(styles)(ConfigFileSelector);
|
|
745
|
+
|
|
746
|
+
exports["default"] = _default;
|
|
747
|
+
//# sourceMappingURL=ConfigFileSelector.js.map
|