@iobroker/adapter-react-v5 3.1.3 → 3.1.6

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 (67) hide show
  1. package/Components/FileBrowser.js +277 -237
  2. package/Components/FileBrowser.js.map +1 -1
  3. package/Components/FileViewer.js +3 -1
  4. package/Components/FileViewer.js.map +1 -1
  5. package/Components/JsonConfigComponent/ConfigAutocomplete.js +5 -3
  6. package/Components/JsonConfigComponent/ConfigAutocomplete.js.map +1 -1
  7. package/Components/JsonConfigComponent/ConfigAutocompleteSendTo.js +5 -3
  8. package/Components/JsonConfigComponent/ConfigAutocompleteSendTo.js.map +1 -1
  9. package/Components/JsonConfigComponent/ConfigCertificateSelect.js +16 -2
  10. package/Components/JsonConfigComponent/ConfigCertificateSelect.js.map +1 -1
  11. package/Components/JsonConfigComponent/ConfigCustom.js +148 -25
  12. package/Components/JsonConfigComponent/ConfigCustom.js.map +1 -1
  13. package/Components/JsonConfigComponent/ConfigFile.js +183 -0
  14. package/Components/JsonConfigComponent/ConfigFile.js.map +1 -0
  15. package/Components/JsonConfigComponent/ConfigFileSelector.js +747 -0
  16. package/Components/JsonConfigComponent/ConfigFileSelector.js.map +1 -0
  17. package/Components/JsonConfigComponent/ConfigGeneric.js +105 -20
  18. package/Components/JsonConfigComponent/ConfigGeneric.js.map +1 -1
  19. package/Components/JsonConfigComponent/ConfigInstanceSelect.js +132 -46
  20. package/Components/JsonConfigComponent/ConfigInstanceSelect.js.map +1 -1
  21. package/Components/JsonConfigComponent/ConfigLanguage.js +25 -1
  22. package/Components/JsonConfigComponent/ConfigLanguage.js.map +1 -1
  23. package/Components/JsonConfigComponent/ConfigNumber.js +5 -4
  24. package/Components/JsonConfigComponent/ConfigNumber.js.map +1 -1
  25. package/Components/JsonConfigComponent/ConfigObjectId.js +3 -2
  26. package/Components/JsonConfigComponent/ConfigObjectId.js.map +1 -1
  27. package/Components/JsonConfigComponent/ConfigPanel.js +51 -40
  28. package/Components/JsonConfigComponent/ConfigPanel.js.map +1 -1
  29. package/Components/JsonConfigComponent/ConfigPattern.js +1 -1
  30. package/Components/JsonConfigComponent/ConfigPattern.js.map +1 -1
  31. package/Components/JsonConfigComponent/ConfigSelect.js +4 -2
  32. package/Components/JsonConfigComponent/ConfigSelect.js.map +1 -1
  33. package/Components/JsonConfigComponent/ConfigSendto.js +2 -2
  34. package/Components/JsonConfigComponent/ConfigSendto.js.map +1 -1
  35. package/Components/JsonConfigComponent/ConfigSetState.js +2 -2
  36. package/Components/JsonConfigComponent/ConfigSetState.js.map +1 -1
  37. package/Components/JsonConfigComponent/ConfigStaticHeader.js +31 -8
  38. package/Components/JsonConfigComponent/ConfigStaticHeader.js.map +1 -1
  39. package/Components/JsonConfigComponent/ConfigStaticImage.js +1 -1
  40. package/Components/JsonConfigComponent/ConfigStaticImage.js.map +1 -1
  41. package/Components/JsonConfigComponent/ConfigTable.js +1 -1
  42. package/Components/JsonConfigComponent/ConfigTable.js.map +1 -1
  43. package/Components/JsonConfigComponent/ConfigTabs.js +12 -3
  44. package/Components/JsonConfigComponent/ConfigTabs.js.map +1 -1
  45. package/Components/JsonConfigComponent/ConfigText.js +4 -2
  46. package/Components/JsonConfigComponent/ConfigText.js.map +1 -1
  47. package/Components/JsonConfigComponent/ConfigTopic.js.map +1 -1
  48. package/Components/JsonConfigComponent/index.js +12 -4
  49. package/Components/JsonConfigComponent/index.js.map +1 -1
  50. package/Components/ObjectBrowser.js +228 -222
  51. package/Components/ObjectBrowser.js.map +1 -1
  52. package/Components/TableResize.js +34 -16
  53. package/Components/TableResize.js.map +1 -1
  54. package/Components/TreeTable.js +2 -2
  55. package/Components/TreeTable.js.map +1 -1
  56. package/Components/Utils.js +5 -5
  57. package/Components/Utils.js.map +1 -1
  58. package/Dialogs/Confirm.js +3 -3
  59. package/Dialogs/Confirm.js.map +1 -1
  60. package/Dialogs/FileSelect.js +259 -0
  61. package/Dialogs/FileSelect.js.map +1 -0
  62. package/Dialogs/SelectID.js +15 -16
  63. package/Dialogs/SelectID.js.map +1 -1
  64. package/GenericApp.js +3 -3
  65. package/GenericApp.js.map +1 -1
  66. package/README.md +3 -0
  67. package/package.json +1 -1
@@ -233,7 +233,7 @@ var styles = function styles(theme) {
233
233
  cursor: 'pointer',
234
234
  height: ROW_HEIGHT,
235
235
  display: 'inline-flex',
236
- lineHeight: ROW_HEIGHT + 'px',
236
+ lineHeight: "".concat(ROW_HEIGHT, "px"),
237
237
  '&:hover': {
238
238
  background: theme.palette.secondary.light,
239
239
  color: _Utils["default"].invertColor(theme.palette.secondary.main, true)
@@ -367,7 +367,14 @@ var styles = function styles(theme) {
367
367
  top: 30,
368
368
  right: 30
369
369
  },
370
- uploadCenterTextAndIcon: {},
370
+ uploadCenterTextAndIcon: {
371
+ position: 'absolute',
372
+ top: '50%',
373
+ left: '50%',
374
+ height: '30%',
375
+ width: '50%',
376
+ margin: '-15% 0 0 -25%'
377
+ },
371
378
  menuButtonExpertActive: {
372
379
  color: '#c00000'
373
380
  },
@@ -436,13 +443,17 @@ var USER_DATA = '0_userdata.0';
436
443
  function sortFolders(a, b) {
437
444
  if (a.folder && b.folder) {
438
445
  return a.name > b.name ? 1 : a.name < b.name ? -1 : 0;
439
- } else if (a.folder) {
446
+ }
447
+
448
+ if (a.folder) {
440
449
  return -1;
441
- } else if (b.folder) {
450
+ }
451
+
452
+ if (b.folder) {
442
453
  return 1;
443
- } else {
444
- return a.name > b.name ? 1 : a.name < b.name ? -1 : 0;
445
454
  }
455
+
456
+ return a.name > b.name ? 1 : a.name < b.name ? -1 : 0;
446
457
  }
447
458
 
448
459
  function getParentDir(dir) {
@@ -456,9 +467,9 @@ function isFile(path) {
456
467
 
457
468
  if (ext && ext.toLowerCase().match(/[a-z]+/) && ext.length < 5) {
458
469
  return true;
459
- } else {
460
- return false;
461
470
  }
471
+
472
+ return false;
462
473
  }
463
474
 
464
475
  var TABLE = 'Table';
@@ -506,20 +517,20 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
506
517
  var backgroundImage = _ref.backgroundImage;
507
518
 
508
519
  if (array.indexOf(backgroundImage) !== -1 && array.length - 1 !== array.indexOf(backgroundImage)) {
509
- window.localStorage.setItem('files.backgroundImage', array[array.indexOf(backgroundImage) + 1]);
520
+ (window._localStorage || window.localStorage).setItem('files.backgroundImage', array[array.indexOf(backgroundImage) + 1]);
510
521
  return {
511
522
  backgroundImage: array[array.indexOf(backgroundImage) + 1]
512
523
  };
513
- } else {
514
- window.localStorage.setItem('files.backgroundImage', array[0]);
515
- return {
516
- backgroundImage: array[0]
517
- };
518
524
  }
525
+
526
+ (window._localStorage || window.localStorage).setItem('files.backgroundImage', array[0]);
527
+ return {
528
+ backgroundImage: array[0]
529
+ };
519
530
  });
520
531
  });
521
532
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getClassBackgroundImage", function () {
522
- //['light', 'dark', 'colored', 'delete']
533
+ // ['light', 'dark', 'colored', 'delete']
523
534
  switch (_this.state.backgroundImage) {
524
535
  case 'light':
525
536
  return _this.props.classes.backgroundImageLight;
@@ -537,10 +548,27 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
537
548
  return null;
538
549
  }
539
550
  });
540
- var expanded = window.localStorage.getItem('files.expanded') || '[]';
551
+ var expanded = (window._localStorage || window.localStorage).getItem('files.expanded') || '[]';
552
+
553
+ if (_this.props.limitPath) {
554
+ var parts = _this.props.limitPath.split('/');
555
+
556
+ _this.limitToObjectID = parts[0];
557
+ _this.limitToPath = !parts.length ? null : parts.length === 1 && parts[0] === '' ? null : parts.join('/');
558
+
559
+ if (_this.limitToPath && _this.limitToPath.endsWith('/')) {
560
+ _this.limitToPath.substring(0, _this.limitToPath.length - 1);
561
+ }
562
+ }
541
563
 
542
564
  try {
543
565
  expanded = JSON.parse(expanded);
566
+
567
+ if (_this.limitToPath) {
568
+ expanded = expanded.filter(function (id) {
569
+ return id.startsWith(_this.limitToPath + '/') || id === _this.limitToPath || _this.limitToPath.startsWith(id + '/');
570
+ });
571
+ }
544
572
  } catch (e) {
545
573
  expanded = [];
546
574
  }
@@ -548,12 +576,12 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
548
576
  var viewType;
549
577
 
550
578
  if (_this.props.showViewTypeButton) {
551
- viewType = window.localStorage.getItem('files.viewType') || TABLE;
579
+ viewType = (window._localStorage || window.localStorage).getItem('files.viewType') || TABLE;
552
580
  } else {
553
581
  viewType = TABLE;
554
582
  }
555
583
 
556
- var selected = _this.props.selected || window.localStorage.getItem('files.selected') || USER_DATA;
584
+ var selected = _this.props.selected || (window._localStorage || window.localStorage).getItem('files.selected') || USER_DATA;
557
585
  var currentDir = '';
558
586
 
559
587
  if (isFile(selected)) {
@@ -562,12 +590,12 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
562
590
  currentDir = selected;
563
591
  }
564
592
 
565
- var _backgroundImage = window.localStorage.getItem('files.backgroundImage') || null;
593
+ var _backgroundImage = (window._localStorage || window.localStorage).getItem('files.backgroundImage') || null;
566
594
 
567
595
  _this.state = {
568
596
  viewType: viewType,
569
597
  folders: {},
570
- filterEmpty: window.localStorage.getItem('files.empty') !== 'false',
598
+ filterEmpty: (window._localStorage || window.localStorage).getItem('files.empty') !== 'false',
571
599
  expanded: expanded,
572
600
  currentDir: currentDir,
573
601
  expertMode: _this.props.expertMode,
@@ -606,7 +634,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
606
634
 
607
635
  this.initialReadFinished = false;
608
636
  return this.browseFolder('/').then(function (folders) {
609
- return _this2.state.viewType === TABLE ? _this2.browseFolders((0, _toConsumableArray2["default"])(_this2.state.expanded), folders) : _this2.state.currentDir && _this2.state.currentDir !== '/' ? _this2.browseFolder(_this2.state.currentDir, folders) : Promise.resolve(folders);
637
+ return _this2.state.viewType === TABLE ? _this2.browseFolders((0, _toConsumableArray2["default"])(_this2.state.expanded), folders) : _this2.state.currentDir && _this2.state.currentDir !== '/' && (!_this2.limitToObjectID || _this2.state.currentDir.startsWith(_this2.limitToObjectID)) ? _this2.browseFolder(_this2.state.currentDir, folders) : Promise.resolve(folders);
610
638
  }).then(function (folders) {
611
639
  return _this2.setState({
612
640
  folders: folders
@@ -692,18 +720,18 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
692
720
  }
693
721
 
694
722
  if (!foldersList || !foldersList.length) {
695
- _resolve(_newFolders);
696
- } else {
697
- this.browseFolder(foldersList.shift(), _newFolders).then(function () {
698
- return setTimeout(function () {
699
- return _this4.browseFolders(foldersList, _newFolders, _resolve);
700
- }, 0);
701
- })["catch"](function () {
702
- return setTimeout(function () {
703
- return _this4.browseFolders(foldersList, _newFolders, _resolve);
704
- }, 0);
705
- });
723
+ return _resolve(_newFolders);
706
724
  }
725
+
726
+ return this.browseFolder(foldersList.shift(), _newFolders).then(function () {
727
+ return setTimeout(function () {
728
+ return _this4.browseFolders(foldersList, _newFolders, _resolve);
729
+ }, 0);
730
+ })["catch"](function () {
731
+ return setTimeout(function () {
732
+ return _this4.browseFolders(foldersList, _newFolders, _resolve);
733
+ }, 0);
734
+ });
707
735
  }
708
736
  }, {
709
737
  key: "readDirSerial",
@@ -845,9 +873,9 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
845
873
  return reject(error);
846
874
  });
847
875
  });
848
- } else {
849
- return Promise.resolve(_newFolders);
850
876
  }
877
+
878
+ return Promise.resolve(_newFolders);
851
879
  }
852
880
 
853
881
  if (!folderId || folderId === '/') {
@@ -878,6 +906,10 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
878
906
  }
879
907
 
880
908
  objs.forEach(function (obj) {
909
+ if (_this7.limitToObjectID && _this7.limitToObjectID !== obj._id) {
910
+ return;
911
+ }
912
+
881
913
  var item = {
882
914
  id: obj._id,
883
915
  name: obj._id,
@@ -904,7 +936,9 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
904
936
  return a.id > b.id ? 1 : a.id < b.id ? -1 : 0;
905
937
  });
906
938
 
907
- _folders.unshift(userData);
939
+ if (!_this7.limitToObjectID || _this7.limitToObjectID === USER_DATA) {
940
+ userData && _folders.unshift(userData);
941
+ }
908
942
 
909
943
  _newFolders[folderId || '/'] = _folders;
910
944
 
@@ -916,56 +950,64 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
916
950
  })).then(function () {
917
951
  return _newFolders;
918
952
  });
919
- } else {
920
- return _newFolders;
921
953
  }
954
+
955
+ return _newFolders;
922
956
  })["catch"](function (e) {
923
- return _this7.initialReadFinished && window.alert('Cannot read meta items: ' + e);
957
+ return _this7.initialReadFinished && window.alert("Cannot read meta items: ".concat(e));
924
958
  });
925
- } else {
926
- var parts = folderId.split('/');
927
- var level = parts.length;
928
- var adapter = parts.shift();
929
- var relPath = parts.join('/'); // make all requests here serial
959
+ }
930
960
 
931
- return this.readDirSerial(adapter, relPath).then(function (files) {
932
- var _folders = [];
933
- files.forEach(function (file) {
934
- var item = {
935
- id: "".concat(folderId, "/").concat(file.file),
936
- ext: _Utils["default"].getFileExtension(file.file),
937
- folder: file.isDir,
938
- name: file.file,
939
- size: file.stats && file.stats.size,
940
- modified: file.modifiedAt,
941
- acl: file.acl,
942
- level: level
943
- };
961
+ var parts = folderId.split('/');
962
+ var level = parts.length;
963
+ var adapter = parts.shift();
964
+ var relPath = parts.join('/'); // make all requests here serial
965
+
966
+ return this.readDirSerial(adapter, relPath).then(function (files) {
967
+ var _folders = [];
968
+ files.forEach(function (file) {
969
+ var item = {
970
+ id: "".concat(folderId, "/").concat(file.file),
971
+ ext: _Utils["default"].getFileExtension(file.file),
972
+ folder: file.isDir,
973
+ name: file.file,
974
+ size: file.stats && file.stats.size,
975
+ modified: file.modifiedAt,
976
+ acl: file.acl,
977
+ level: level
978
+ };
944
979
 
980
+ if (_this7.limitToPath) {
981
+ if (item.folder && (item.id.startsWith(_this7.limitToPath + '/') || item.id === _this7.limitToPath || _this7.limitToPath.startsWith(item.id + '/'))) {
982
+ _folders.push(item);
983
+ } else if (item.id.startsWith(_this7.limitToPath + '/')) {
984
+ _folders.push(item);
985
+ }
986
+ } else {
945
987
  _folders.push(item);
946
- });
988
+ }
989
+ });
947
990
 
948
- _folders.sort(sortFolders);
991
+ _folders.sort(sortFolders);
949
992
 
950
- _newFolders[folderId] = _folders;
993
+ _newFolders[folderId] = _folders;
951
994
 
952
- if (!_checkEmpty) {
953
- return Promise.all(_folders.filter(function (item) {
954
- return item.folder;
955
- }).map(function (item) {
956
- return _this7.browseFolder(item.id, _newFolders, true);
957
- })).then(function () {
958
- return _newFolders;
959
- });
960
- } else {
995
+ if (!_checkEmpty) {
996
+ return Promise.all(_folders.filter(function (item) {
997
+ return item.folder;
998
+ }).map(function (item) {
999
+ return _this7.browseFolder(item.id, _newFolders, true);
1000
+ })).then(function () {
961
1001
  return _newFolders;
962
- }
963
- })["catch"](function (e) {
964
- _this7.initialReadFinished && window.alert("Cannot read ".concat(adapter).concat(relPath ? '/' + relPath : '', ": ").concat(e));
965
- _newFolders[folderId] = [];
966
- return _newFolders;
967
- });
968
- }
1002
+ });
1003
+ }
1004
+
1005
+ return _newFolders;
1006
+ })["catch"](function (e) {
1007
+ _this7.initialReadFinished && window.alert("Cannot read ".concat(adapter).concat(relPath ? "/".concat(relPath) : '', ": ").concat(e));
1008
+ _newFolders[folderId] = [];
1009
+ return _newFolders;
1010
+ });
969
1011
  }
970
1012
  }, {
971
1013
  key: "toggleFolder",
@@ -979,7 +1021,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
979
1021
  if (pos === -1) {
980
1022
  expanded.push(item.id);
981
1023
  expanded.sort();
982
- window.localStorage.setItem('files.expanded', JSON.stringify(expanded));
1024
+ (window._localStorage || window.localStorage).setItem('files.expanded', JSON.stringify(expanded));
983
1025
 
984
1026
  if (!item.temp) {
985
1027
  return this.browseFolder(item.id).then(function (folders) {
@@ -997,7 +1039,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
997
1039
  }
998
1040
  } else {
999
1041
  expanded.splice(pos, 1);
1000
- window.localStorage.setItem('files.expanded', JSON.stringify(expanded));
1042
+ (window._localStorage || window.localStorage).setItem('files.expanded', JSON.stringify(expanded));
1001
1043
  this.setState({
1002
1044
  expanded: expanded
1003
1045
  });
@@ -1016,7 +1058,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1016
1058
  folder = '';
1017
1059
  }
1018
1060
 
1019
- window.localStorage.setItem('files.currentDir', folder);
1061
+ (window._localStorage || window.localStorage).setItem('files.currentDir', folder);
1020
1062
 
1021
1063
  if (folder && !this.state.folders[folder]) {
1022
1064
  return this.browseFolder(folder).then(function (folders) {
@@ -1030,16 +1072,16 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1030
1072
  return _this9.props.onSelect && _this9.props.onSelect('');
1031
1073
  });
1032
1074
  });
1033
- } else {
1034
- this.setState({
1035
- currentDir: folder,
1036
- selected: folder,
1037
- path: folder,
1038
- pathFocus: false
1039
- }, function () {
1040
- return _this9.props.onSelect && _this9.props.onSelect('');
1041
- });
1042
1075
  }
1076
+
1077
+ return this.setState({
1078
+ currentDir: folder,
1079
+ selected: folder,
1080
+ path: folder,
1081
+ pathFocus: false
1082
+ }, function () {
1083
+ return _this9.props.onSelect && _this9.props.onSelect('');
1084
+ });
1043
1085
  }
1044
1086
  }, {
1045
1087
  key: "select",
@@ -1053,7 +1095,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1053
1095
 
1054
1096
  e && e.stopPropagation();
1055
1097
  this.lastSelect = Date.now();
1056
- window.localStorage.setItem('files.selected', id);
1098
+ (window._localStorage || window.localStorage).setItem('files.selected', id);
1057
1099
  this.setState({
1058
1100
  selected: id,
1059
1101
  path: id,
@@ -1063,7 +1105,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1063
1105
  var ext = _Utils["default"].getFileExtension(id);
1064
1106
 
1065
1107
  if ((!_this10.props.filterFiles || _this10.props.filterFiles.includes(ext)) && (!_this10.props.filterByType || _FileViewer.EXTENSIONS[_this10.props.filterByType].includes(ext))) {
1066
- _this10.props.onSelect(id);
1108
+ _this10.props.onSelect(id, false, !!_this10.state.folders[id]);
1067
1109
  } else {
1068
1110
  _this10.props.onSelect('');
1069
1111
  }
@@ -1099,7 +1141,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1099
1141
  return _this11.state.viewType === TABLE && _this11.toggleFolder(item, e);
1100
1142
  },
1101
1143
  title: item.title && (0, _typeof2["default"])(item.title) === 'object' ? item.title[this.props.lang] || item.title.end || '' : item.title || null,
1102
- className: _Utils["default"].clsx('browserItem', this.props.classes['item' + this.state.viewType], this.props.classes['itemFolder' + this.state.viewType], this.state.selected === item.id && this.props.classes.itemSelected, item.temp && this.props.classes['itemFolderTemp'])
1144
+ className: _Utils["default"].clsx('browserItem', this.props.classes["item".concat(this.state.viewType)], this.props.classes["itemFolder".concat(this.state.viewType)], this.state.selected === item.id && this.props.classes.itemSelected, item.temp && this.props.classes['itemFolderTemp'])
1103
1145
  }, /*#__PURE__*/_react["default"].createElement(Icon, {
1104
1146
  className: _Utils["default"].clsx(this.props.classes['itemFolderIcon' + this.state.viewType], isSpecialData && this.props.classes.specialFolder),
1105
1147
  onClick: this.state.viewType === TABLE ? function (e) {
@@ -1110,17 +1152,16 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1110
1152
  }, isUserData ? this.props.t('ra_User files') : item.name), /*#__PURE__*/_react["default"].createElement(_material.Hidden, {
1111
1153
  smDown: true
1112
1154
  }, /*#__PURE__*/_react["default"].createElement("div", {
1113
- className: this.props.classes['itemSize' + this.state.viewType]
1155
+ className: this.props.classes["itemSize".concat(this.state.viewType)]
1114
1156
  }, this.state.viewType === TABLE && this.state.folders[item.id] ? this.state.folders[item.id].length : '')), /*#__PURE__*/_react["default"].createElement(_material.Hidden, {
1115
1157
  smDown: true
1116
1158
  }, this.state.viewType === TABLE ? this.formatAcl(item.acl) : null), /*#__PURE__*/_react["default"].createElement(_material.Hidden, {
1117
1159
  smDown: true
1118
1160
  }, this.state.viewType === TABLE && this.props.expertMode ? /*#__PURE__*/_react["default"].createElement("div", {
1119
- className: this.props.classes['itemDeleteButton' + this.state.viewType]
1161
+ className: this.props.classes["itemDeleteButton".concat(this.state.viewType)]
1120
1162
  }) : null), this.state.viewType === TABLE && this.props.allowDownload ? /*#__PURE__*/_react["default"].createElement("div", {
1121
- className: this.props.classes['itemDownloadButton' + this.state.viewType]
1122
- }) : null, this.state.viewType === TABLE && this.props.allowDelete && this.state.folders[item.id] && this.state.folders[item.id].length && (this.state.expertMode || item.id.startsWith(USER_DATA) || item.id.startsWith('vis.0/')) ? /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
1123
- size: "large",
1163
+ className: this.props.classes["itemDownloadButton".concat(this.state.viewType)]
1164
+ }) : null, this.state.viewType === TABLE && this.props.allowDelete && this.state.folders[item.id] && this.state.folders[item.id].length ? /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
1124
1165
  "aria-label": "delete",
1125
1166
  onClick: function onClick(e) {
1126
1167
  e.stopPropagation();
@@ -1133,7 +1174,8 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1133
1174
  });
1134
1175
  }
1135
1176
  },
1136
- className: this.props.classes['itemDeleteButton' + this.state.viewType]
1177
+ className: this.props.classes["itemDeleteButton".concat(this.state.viewType)],
1178
+ size: "large"
1137
1179
  }, /*#__PURE__*/_react["default"].createElement(_Delete["default"], {
1138
1180
  fontSize: "small"
1139
1181
  })) : this.state.viewType === TABLE && this.props.allowDelete ? /*#__PURE__*/_react["default"].createElement("div", {
@@ -1152,20 +1194,20 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1152
1194
  return _this12.changeFolder(e);
1153
1195
  },
1154
1196
  title: this.props.t('ra_Back to %s', getParentDir(this.state.currentDir)),
1155
- className: _Utils["default"].clsx('browserItem', this.props.classes['item' + this.state.viewType], this.props.classes['itemFolder' + this.state.viewType])
1197
+ className: _Utils["default"].clsx('browserItem', this.props.classes["item".concat(this.state.viewType)], this.props.classes["itemFolder".concat(this.state.viewType)])
1156
1198
  }, /*#__PURE__*/_react["default"].createElement(_IconClosed["default"], {
1157
- className: this.props.classes['itemFolderIcon' + this.state.viewType]
1199
+ className: this.props.classes["itemFolderIcon".concat(this.state.viewType)]
1158
1200
  }), /*#__PURE__*/_react["default"].createElement(_ArrowBack["default"], {
1159
1201
  className: this.props.classes.itemFolderIconBack
1160
1202
  }), /*#__PURE__*/_react["default"].createElement("div", {
1161
- className: _Utils["default"].clsx(this.props.classes['itemName' + this.state.viewType], this.props.classes['itemNameFolder' + this.state.viewType])
1203
+ className: _Utils["default"].clsx(this.props.classes["itemName".concat(this.state.viewType)], this.props.classes["itemNameFolder".concat(this.state.viewType)])
1162
1204
  }, ".."));
1163
1205
  }
1164
1206
  }, {
1165
1207
  key: "formatSize",
1166
1208
  value: function formatSize(size) {
1167
1209
  return /*#__PURE__*/_react["default"].createElement("div", {
1168
- className: this.props.classes['itemSize' + this.state.viewType]
1210
+ className: this.props.classes["itemSize".concat(this.state.viewType)]
1169
1211
  }, size || size === 0 ? _Utils["default"].formatBytes(size) : '');
1170
1212
  }
1171
1213
  }, {
@@ -1197,24 +1239,24 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1197
1239
  switch (ext) {
1198
1240
  case 'json':
1199
1241
  return /*#__PURE__*/_react["default"].createElement(_Bookmark["default"], {
1200
- className: this.props.classes['itemIcon' + this.state.viewType]
1242
+ className: this.props.classes["itemIcon".concat(this.state.viewType)]
1201
1243
  });
1202
1244
 
1203
1245
  case 'css':
1204
1246
  return /*#__PURE__*/_react["default"].createElement(_BookmarkBorder["default"], {
1205
- className: this.props.classes['itemIcon' + this.state.viewType]
1247
+ className: this.props.classes["itemIcon".concat(this.state.viewType)]
1206
1248
  });
1207
1249
 
1208
1250
  case 'js':
1209
1251
  case 'ts':
1210
1252
  return /*#__PURE__*/_react["default"].createElement(_Code["default"], {
1211
- className: this.props.classes['itemIcon' + this.state.viewType]
1253
+ className: this.props.classes["itemIcon".concat(this.state.viewType)]
1212
1254
  });
1213
1255
 
1214
1256
  case 'html':
1215
1257
  case 'md':
1216
1258
  return /*#__PURE__*/_react["default"].createElement(_Description["default"], {
1217
- className: this.props.classes['itemIcon' + this.state.viewType]
1259
+ className: this.props.classes["itemIcon".concat(this.state.viewType)]
1218
1260
  });
1219
1261
 
1220
1262
  case 'mp3':
@@ -1224,29 +1266,15 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1224
1266
  case 'mp4':
1225
1267
  case 'flac':
1226
1268
  return /*#__PURE__*/_react["default"].createElement(_MusicNote["default"], {
1227
- className: this.props.classes['itemIcon' + this.state.viewType]
1269
+ className: this.props.classes["itemIcon".concat(this.state.viewType)]
1228
1270
  });
1229
1271
 
1230
1272
  default:
1231
1273
  return /*#__PURE__*/_react["default"].createElement(_InsertDriveFile["default"], {
1232
- className: this.props.classes['itemIcon' + this.state.viewType]
1274
+ className: this.props.classes["itemIcon".concat(this.state.viewType)]
1233
1275
  });
1234
1276
  }
1235
1277
  }
1236
- }, {
1237
- key: "getEditFile",
1238
- value: function getEditFile(ext) {
1239
- switch (ext) {
1240
- case 'json':
1241
- case 'js':
1242
- case 'html':
1243
- case 'txt':
1244
- return true;
1245
-
1246
- default:
1247
- return false;
1248
- }
1249
- }
1250
1278
  }, {
1251
1279
  key: "renderFile",
1252
1280
  value: function renderFile(item) {
@@ -1265,7 +1293,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1265
1293
  viewer: _this14.imagePrefix + item.id
1266
1294
  });
1267
1295
  } else if ((!_this14.props.filterFiles || _this14.props.filterFiles.includes(item.ext)) && (!_this14.props.filterByType || _FileViewer.EXTENSIONS[_this14.props.filterByType].includes(item.ext))) {
1268
- _this14.props.onSelect(item.id, true);
1296
+ _this14.props.onSelect(item.id, true, !!_this14.state.folders[item.id]);
1269
1297
  }
1270
1298
  },
1271
1299
  onClick: function onClick(e) {
@@ -1275,7 +1303,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1275
1303
  marginLeft: padding,
1276
1304
  width: "calc(100% - ".concat(padding, "px)")
1277
1305
  } : {},
1278
- className: _Utils["default"].clsx('browserItem', this.props.classes['item' + this.state.viewType], this.props.classes['itemFile' + this.state.viewType], this.state.selected === item.id && this.props.classes.itemSelected)
1306
+ className: _Utils["default"].clsx('browserItem', this.props.classes["item".concat(this.state.viewType)], this.props.classes["itemFile".concat(this.state.viewType)], this.state.selected === item.id && this.props.classes.itemSelected)
1279
1307
  }, _FileViewer.EXTENSIONS.images.includes(ext) ? this.state.fileErrors.includes(item.id) ? /*#__PURE__*/_react["default"].createElement(_IconNoIcon["default"], {
1280
1308
  className: _Utils["default"].clsx(this.props.classes['itemImage' + this.state.viewType], this.getClassBackgroundImage())
1281
1309
  }) : /*#__PURE__*/_react["default"].createElement("img", {
@@ -1295,15 +1323,15 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1295
1323
  src: this.imagePrefix + item.id,
1296
1324
  alt: item.name
1297
1325
  }) : this.getFileIcon(ext), /*#__PURE__*/_react["default"].createElement("div", {
1298
- className: this.props.classes['itemName' + this.state.viewType]
1326
+ className: this.props.classes["itemName".concat(this.state.viewType)]
1299
1327
  }, item.name), /*#__PURE__*/_react["default"].createElement(_material.Hidden, {
1300
1328
  smDown: true
1301
1329
  }, this.formatSize(item.size)), /*#__PURE__*/_react["default"].createElement(_material.Hidden, {
1302
1330
  smDown: true
1303
1331
  }, this.state.viewType === TABLE ? this.formatAcl(item.acl) : null), /*#__PURE__*/_react["default"].createElement(_material.Hidden, {
1304
1332
  smDown: true
1305
- }, this.state.viewType === TABLE && this.props.expertMode && this.getEditFile(ext) ? /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
1306
- "aria-label": "delete",
1333
+ }, this.state.viewType === TABLE && this.props.expertMode && FileBrowser.getEditFile(ext) ? /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
1334
+ "aria-label": "edit",
1307
1335
  onClick: function onClick(e) {
1308
1336
  e.stopPropagation();
1309
1337
 
@@ -1313,25 +1341,24 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1313
1341
  formatEditFile: ext
1314
1342
  });
1315
1343
  } else if ((!_this14.props.filterFiles || _this14.props.filterFiles.includes(item.ext)) && (!_this14.props.filterByType || _FileViewer.EXTENSIONS[_this14.props.filterByType].includes(item.ext))) {
1316
- _this14.props.onSelect(item.id, true);
1344
+ _this14.props.onSelect(item.id, true, !!_this14.state.folders[item.id]);
1317
1345
  }
1318
1346
  },
1319
- className: this.props.classes['itemDeleteButton' + this.state.viewType],
1347
+ className: this.props.classes["itemDeleteButton".concat(this.state.viewType)],
1320
1348
  size: "large"
1321
1349
  }, /*#__PURE__*/_react["default"].createElement(_Edit["default"], {
1322
1350
  fontSize: "small"
1323
1351
  })) : /*#__PURE__*/_react["default"].createElement("div", {
1324
- className: this.props.classes['itemDeleteButton' + this.state.viewType]
1352
+ className: this.props.classes["itemDeleteButton".concat(this.state.viewType)]
1325
1353
  })), this.state.viewType === TABLE && this.props.allowDownload ? /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
1326
1354
  download: true,
1327
1355
  href: this.imagePrefix + item.id,
1328
- className: this.props.classes['itemDownloadButton' + this.state.viewType],
1356
+ className: this.props.classes["itemDownloadButton".concat(this.state.viewType)],
1329
1357
  onClick: function onClick(e) {
1330
1358
  return e.stopPropagation();
1331
1359
  },
1332
1360
  size: "large"
1333
- }, /*#__PURE__*/_react["default"].createElement(_SaveAlt["default"], null)) : null, this.state.viewType === TABLE && this.props.allowDelete && item.id !== 'vis.0/' && item.id !== USER_DATA && (this.state.expertMode || item.id.startsWith(USER_DATA) || item.id.startsWith('vis.0/')) ? /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
1334
- size: "large",
1361
+ }, /*#__PURE__*/_react["default"].createElement(_SaveAlt["default"], null)) : null, this.state.viewType === TABLE && this.props.allowDelete && item.id !== 'vis.0/' && item.id !== USER_DATA ? /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
1335
1362
  "aria-label": "delete",
1336
1363
  onClick: function onClick(e) {
1337
1364
  e.stopPropagation();
@@ -1344,11 +1371,12 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1344
1371
  });
1345
1372
  }
1346
1373
  },
1347
- className: this.props.classes['itemDeleteButton' + this.state.viewType]
1374
+ className: this.props.classes["itemDeleteButton".concat(this.state.viewType)],
1375
+ size: "large"
1348
1376
  }, /*#__PURE__*/_react["default"].createElement(_Delete["default"], {
1349
1377
  fontSize: "small"
1350
1378
  })) : this.state.viewType === TABLE && this.props.allowDelete ? /*#__PURE__*/_react["default"].createElement("div", {
1351
- className: this.props.classes['itemDeleteButton' + this.state.viewType]
1379
+ className: this.props.classes["itemDeleteButton".concat(this.state.viewType)]
1352
1380
  }) : null);
1353
1381
  }
1354
1382
  }, {
@@ -1373,46 +1401,46 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1373
1401
  }
1374
1402
  });
1375
1403
  return res;
1376
- } else {
1377
- return this.state.folders[folderId].map(function (item) {
1378
- var res = [];
1404
+ }
1379
1405
 
1380
- if (item.folder) {
1381
- var expanded = _this15.state.expanded.includes(item.id);
1406
+ return this.state.folders[folderId].map(function (item) {
1407
+ var res = [];
1382
1408
 
1383
- res.push(_this15.renderFolder(item, expanded));
1409
+ if (item.folder) {
1410
+ var expanded = _this15.state.expanded.includes(item.id);
1384
1411
 
1385
- if (_this15.state.folders[item.id] && expanded) {
1386
- res.push(_this15.renderItems(item.id));
1387
- }
1388
- } else if ((!_this15.props.filterFiles || _this15.props.filterFiles.includes(item.ext)) && (!_this15.props.filterByType || _FileViewer.EXTENSIONS[_this15.props.filterByType].includes(item.ext))) {
1389
- res.push(_this15.renderFile(item));
1390
- } else {
1391
- return null;
1392
- }
1412
+ res.push(_this15.renderFolder(item, expanded));
1393
1413
 
1394
- return res;
1395
- });
1396
- }
1397
- } else {
1398
- return /*#__PURE__*/_react["default"].createElement("div", {
1399
- style: {
1400
- position: 'relative'
1401
- }
1402
- }, /*#__PURE__*/_react["default"].createElement(_CircularProgress["default"], {
1403
- key: folderId,
1404
- color: "secondary",
1405
- size: 24
1406
- }), /*#__PURE__*/_react["default"].createElement("div", {
1407
- style: {
1408
- position: 'absolute',
1409
- zIndex: 2,
1410
- top: 4,
1411
- width: 24,
1412
- textAlign: 'center'
1414
+ if (_this15.state.folders[item.id] && expanded) {
1415
+ res.push(_this15.renderItems(item.id));
1416
+ }
1417
+ } else if ((!_this15.props.filterFiles || _this15.props.filterFiles.includes(item.ext)) && (!_this15.props.filterByType || _FileViewer.EXTENSIONS[_this15.props.filterByType].includes(item.ext))) {
1418
+ res.push(_this15.renderFile(item));
1419
+ } else {
1420
+ return null;
1413
1421
  }
1414
- }, this.state.queueLength));
1422
+
1423
+ return res;
1424
+ });
1415
1425
  }
1426
+
1427
+ return /*#__PURE__*/_react["default"].createElement("div", {
1428
+ style: {
1429
+ position: 'relative'
1430
+ }
1431
+ }, /*#__PURE__*/_react["default"].createElement(_CircularProgress["default"], {
1432
+ key: folderId,
1433
+ color: "secondary",
1434
+ size: 24
1435
+ }), /*#__PURE__*/_react["default"].createElement("div", {
1436
+ style: {
1437
+ position: 'absolute',
1438
+ zIndex: 2,
1439
+ top: 4,
1440
+ width: 24,
1441
+ textAlign: 'center'
1442
+ }
1443
+ }, this.state.queueLength));
1416
1444
  }
1417
1445
  }, {
1418
1446
  key: "renderToolbar",
@@ -1440,7 +1468,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1440
1468
  "aria-label": "view mode",
1441
1469
  onClick: function onClick() {
1442
1470
  var viewType = _this16.state.viewType === TABLE ? TILE : TABLE;
1443
- window.localStorage.setItem('files.viewType', viewType);
1471
+ (window._localStorage || window.localStorage).setItem('files.viewType', viewType);
1444
1472
  var currentDir = _this16.state.selected;
1445
1473
 
1446
1474
  if (isFile(currentDir)) {
@@ -1464,7 +1492,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1464
1492
  color: this.state.filterEmpty ? 'secondary' : 'inherit',
1465
1493
  "aria-label": "filter empty",
1466
1494
  onClick: function onClick() {
1467
- window.localStorage.setItem('file.empty', !_this16.state.filterEmpty);
1495
+ (window._localStorage || window.localStorage).setItem('file.empty', !_this16.state.filterEmpty);
1468
1496
 
1469
1497
  _this16.setState({
1470
1498
  filterEmpty: !_this16.state.filterEmpty
@@ -1475,7 +1503,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1475
1503
  edge: "start",
1476
1504
  title: this.props.t('ra_Reload files'),
1477
1505
  className: this.props.classes.menuButton,
1478
- color: 'inherit',
1506
+ color: "inherit",
1479
1507
  "aria-label": "reload files",
1480
1508
  onClick: function onClick() {
1481
1509
  return _this16.setState({
@@ -1487,10 +1515,10 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1487
1515
  size: "large"
1488
1516
  }, /*#__PURE__*/_react["default"].createElement(_Refresh["default"], null)), this.props.allowCreateFolder ? /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
1489
1517
  edge: "start",
1490
- disabled: this.state.expertMode ? !this.state.selected : !this.state.selected.startsWith('vis.0') && !this.state.selected.startsWith(USER_DATA),
1518
+ disabled: !this.state.selected || !this.state.folders[this.state.selected] || this.limitToPath && !this.state.selected.startsWith(this.limitToPath + '/') && this.limitToPath !== this.state.selected,
1491
1519
  title: this.props.t('ra_Create folder'),
1492
1520
  className: this.props.classes.menuButton,
1493
- color: 'inherit',
1521
+ color: "inherit",
1494
1522
  "aria-label": "add folder",
1495
1523
  onClick: function onClick() {
1496
1524
  return _this16.setState({
@@ -1500,10 +1528,10 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1500
1528
  size: "large"
1501
1529
  }, /*#__PURE__*/_react["default"].createElement(_CreateNewFolder["default"], null)) : null, this.props.allowUpload ? /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
1502
1530
  edge: "start",
1503
- disabled: this.state.expertMode ? !this.state.selected : !this.state.selected.startsWith('vis.0') && !this.state.selected.startsWith(USER_DATA),
1531
+ disabled: !this.state.selected || !this.state.folders[this.state.selected] || this.limitToPath && !this.state.selected.startsWith(this.limitToPath + '/') && this.limitToPath !== this.state.selected,
1504
1532
  title: this.props.t('ra_Upload file'),
1505
1533
  className: this.props.classes.menuButton,
1506
- color: 'inherit',
1534
+ color: "inherit",
1507
1535
  "aria-label": "upload file",
1508
1536
  onClick: function onClick() {
1509
1537
  return _this16.setState({
@@ -1514,7 +1542,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1514
1542
  }, /*#__PURE__*/_react["default"].createElement(_Publish["default"], null)) : null, /*#__PURE__*/_react["default"].createElement(_material.Tooltip, {
1515
1543
  title: this.props.t('ra_Background image')
1516
1544
  }, /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
1517
- color: 'inherit',
1545
+ color: "inherit",
1518
1546
  edge: "start",
1519
1547
  className: this.props.classes.menuButton,
1520
1548
  onClick: this.setStateBackgroundImage,
@@ -1575,7 +1603,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1575
1603
 
1576
1604
  var parent = _this17.findItem(parentFolder);
1577
1605
 
1578
- var id = parentFolder + '/' + name;
1606
+ var id = "".concat(parentFolder, "/").concat(name);
1579
1607
  folders[parentFolder].push({
1580
1608
  id: id,
1581
1609
  level: parent.level + 1,
@@ -1592,7 +1620,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1592
1620
  expanded.sort();
1593
1621
  }
1594
1622
 
1595
- window.localStorage.setItem('files.expanded', JSON.stringify(expanded));
1623
+ (window._localStorage || window.localStorage).setItem('files.expanded', JSON.stringify(expanded));
1596
1624
 
1597
1625
  _this17.setState({
1598
1626
  addFolder: false,
@@ -1611,13 +1639,15 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1611
1639
  return text.replace(/[^-_\w\d]/, '_');
1612
1640
  }
1613
1641
  });
1614
- } else {
1615
- return null;
1616
1642
  }
1643
+
1644
+ return null;
1617
1645
  }
1618
1646
  }, {
1619
1647
  key: "componentDidUpdate",
1620
- value: function componentDidUpdate(prevProps, prevState, snapshot) {
1648
+ value: function
1649
+ /* prevProps , prevState, snapshot */
1650
+ componentDidUpdate() {
1621
1651
  var _this18 = this;
1622
1652
 
1623
1653
  this.setOpacityTimer && clearTimeout(this.setOpacityTimer);
@@ -1636,7 +1666,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1636
1666
  var parts = fileName.split('/');
1637
1667
  var adapter = parts.shift();
1638
1668
  return this.props.socket.writeFile64(adapter, parts.join('/'), data)["catch"](function (e) {
1639
- return window.alert('Cannot write file: ' + e);
1669
+ return window.alert("Cannot write file: ".concat(e));
1640
1670
  });
1641
1671
  }
1642
1672
  }, {
@@ -1710,7 +1740,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1710
1740
  return window.alert(_this19.props.t('ra_Invalid parent folder!'));
1711
1741
  }
1712
1742
 
1713
- var id = parentFolder + '/' + file.name;
1743
+ var id = "".concat(parentFolder, "/").concat(file.name);
1714
1744
 
1715
1745
  _this19.uploadFile(id, reader.result).then(function () {
1716
1746
  if (! --count) {
@@ -1724,7 +1754,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1724
1754
  if (!expanded.includes(parentFolder)) {
1725
1755
  expanded.push(parentFolder);
1726
1756
  expanded.sort();
1727
- window.localStorage.setItem('files.expanded', JSON.stringify(expanded));
1757
+ (window._localStorage || window.localStorage).setItem('files.expanded', JSON.stringify(expanded));
1728
1758
  }
1729
1759
 
1730
1760
  _this19.setState({
@@ -1741,7 +1771,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1741
1771
  if (!expanded.includes(parentFolder)) {
1742
1772
  expanded.push(parentFolder);
1743
1773
  expanded.sort();
1744
- window.localStorage.setItem('files.expanded', JSON.stringify(expanded));
1774
+ (window._localStorage || window.localStorage).setItem('files.expanded', JSON.stringify(expanded));
1745
1775
  }
1746
1776
 
1747
1777
  _this19.setState({
@@ -1776,9 +1806,9 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1776
1806
  className: _this19.props.classes.uploadCenterText
1777
1807
  }, _this19.state.uploadFile === 'dragging' ? _this19.props.t('ra_Drop file here') : _this19.props.t('ra_Place your files here or click here to open the browse dialog')))));
1778
1808
  })];
1779
- } else {
1780
- return null;
1781
1809
  }
1810
+
1811
+ return null;
1782
1812
  }
1783
1813
  }, {
1784
1814
  key: "deleteRecursive",
@@ -1788,15 +1818,16 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1788
1818
  var item = this.findItem(id);
1789
1819
 
1790
1820
  if (item.folder) {
1791
- return (this.state.folders[id] ? Promise.all(this.state.folders[id].map(function (item) {
1792
- return _this20.deleteRecursive(item.id);
1821
+ return (this.state.folders[id] ? Promise.all(this.state.folders[id].map(function (_item) {
1822
+ return _this20.deleteRecursive(_item.id);
1793
1823
  })) : Promise.resolve()).then(function () {
1794
1824
  // If it is folder of second level
1795
1825
  if (item.level >= 1) {
1796
- var parts = id.split('/');
1797
- var adapter = parts.shift();
1826
+ var _parts = id.split('/');
1827
+
1828
+ var _adapter = _parts.shift();
1798
1829
 
1799
- _this20.props.socket.deleteFolder(adapter, parts.join('/')).then(function () {
1830
+ _this20.props.socket.deleteFolder(_adapter, _parts.join('/')).then(function () {
1800
1831
  // remove this folder
1801
1832
  var folders = JSON.parse(JSON.stringify(_this20.state.folders));
1802
1833
  delete folders[item.id]; // delete folder from parent item
@@ -1822,18 +1853,18 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1822
1853
  });
1823
1854
  }
1824
1855
  });
1825
- } else {
1826
- var parts = id.split('/');
1827
- var adapter = parts.shift();
1856
+ }
1828
1857
 
1829
- if (parts.length) {
1830
- return this.props.socket.deleteFile(adapter, parts.join('/'))["catch"](function (e) {
1831
- return window.alert('Cannot delete file: ' + e);
1832
- });
1833
- } else {
1834
- return Promise.resolve();
1835
- }
1858
+ var parts = id.split('/');
1859
+ var adapter = parts.shift();
1860
+
1861
+ if (parts.length) {
1862
+ return this.props.socket.deleteFile(adapter, parts.join('/'))["catch"](function (e) {
1863
+ return window.alert("Cannot delete file: ".concat(e));
1864
+ });
1836
1865
  }
1866
+
1867
+ return Promise.resolve();
1837
1868
  }
1838
1869
  }, {
1839
1870
  key: "deleteItem",
@@ -1852,7 +1883,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1852
1883
  if (pos !== -1) {
1853
1884
  var expanded = (0, _toConsumableArray2["default"])(_this21.state.expanded);
1854
1885
  expanded.splice(pos, 1);
1855
- window.localStorage.setItem('files.expanded', JSON.stringify(expanded));
1886
+ (window._localStorage || window.localStorage).setItem('files.expanded', JSON.stringify(expanded));
1856
1887
  newState.expanded = expanded;
1857
1888
  }
1858
1889
 
@@ -1900,13 +1931,13 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1900
1931
  }, /*#__PURE__*/_react["default"].createElement(_DialogTitle["default"], {
1901
1932
  id: "form-dialog-title"
1902
1933
  }, this.props.t('ra_Confirm deletion of %s', this.state.deleteItem.split('/').pop())), /*#__PURE__*/_react["default"].createElement(_DialogContent["default"], null, /*#__PURE__*/_react["default"].createElement(_DialogContentText["default"], null, this.props.t('ra_Are you sure?'))), /*#__PURE__*/_react["default"].createElement(_DialogActions["default"], null, /*#__PURE__*/_react["default"].createElement(_Button["default"], {
1934
+ color: "grey",
1903
1935
  variant: "contained",
1904
1936
  onClick: function onClick() {
1905
1937
  _this22.suppressDeleteConfirm = Date.now() + 60000 * 5;
1906
1938
 
1907
1939
  _this22.deleteItem();
1908
- },
1909
- color: "grey"
1940
+ }
1910
1941
  }, this.props.t('ra_Delete (no confirm for 5 mins)')), /*#__PURE__*/_react["default"].createElement(_Button["default"], {
1911
1942
  variant: "contained",
1912
1943
  onClick: function onClick() {
@@ -1923,9 +1954,9 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1923
1954
  },
1924
1955
  color: "grey"
1925
1956
  }, this.props.t('ra_Cancel'))));
1926
- } else {
1927
- return false;
1928
1957
  }
1958
+
1959
+ return false;
1929
1960
  }
1930
1961
  }, {
1931
1962
  key: "renderViewDialog",
@@ -1967,9 +1998,9 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1967
1998
  });
1968
1999
  }
1969
2000
  });
1970
- } else {
1971
- return null;
1972
2001
  }
2002
+
2003
+ return null;
1973
2004
  }
1974
2005
  }, {
1975
2006
  key: "updateItemsAcl",
@@ -2003,7 +2034,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
2003
2034
  folder = getParentDir(_this26.state.path);
2004
2035
  }
2005
2036
 
2006
- return new Promise(function (resolve) {
2037
+ new Promise(function (resolve) {
2007
2038
  if (!_this26.state.folders[folder]) {
2008
2039
  return _this26.browseFolder(folder).then(function (folders) {
2009
2040
  return _this26.setState({
@@ -2016,9 +2047,9 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
2016
2047
  errorText: err === NOT_FOUND ? _this26.props.t('ra_Cannot find "%s"', folder) : _this26.props.t('ra_Cannot read "%s"', folder)
2017
2048
  });
2018
2049
  });
2019
- } else {
2020
- return resolve(true);
2021
2050
  }
2051
+
2052
+ return resolve(true);
2022
2053
  }).then(function (result) {
2023
2054
  return result && _this26.setState({
2024
2055
  selected: _this26.state.path,
@@ -2038,7 +2069,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
2038
2069
  value: function renderBreadcrumb() {
2039
2070
  var _this27 = this;
2040
2071
 
2041
- var parts = this.state.selected.startsWith('/') ? this.state.selected.split('/') : ('/' + this.state.selected).split('/');
2072
+ var parts = this.state.selected.startsWith('/') ? this.state.selected.split('/') : "/".concat(this.state.selected).split('/');
2042
2073
  var p = [];
2043
2074
  return parts.map(function (part, i) {
2044
2075
  part && p.push(part);
@@ -2046,26 +2077,26 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
2046
2077
 
2047
2078
  if (i < parts.length - 1) {
2048
2079
  return [/*#__PURE__*/_react["default"].createElement("div", {
2049
- key: _this27.state.selected + '_' + i,
2080
+ key: "".concat(_this27.state.selected, "_").concat(i),
2050
2081
  className: _this27.props.classes.pathDivBreadcrumbDir,
2051
2082
  onClick: function onClick(e) {
2052
2083
  return _this27.changeFolder(e, path || '/');
2053
2084
  }
2054
2085
  }, part || _this27.props.t('ra_Root')), /*#__PURE__*/_react["default"].createElement("span", {
2055
- key: _this27.state.selected + '_s_' + i,
2086
+ key: "".concat(_this27.state.selected, "_s_").concat(i),
2056
2087
  className: _this27.props.classes.pathDivBreadcrumbSlash
2057
2088
  }, '>')];
2058
- } else {
2059
- return /*#__PURE__*/_react["default"].createElement("div", {
2060
- key: _this27.state.selected + '_' + i,
2061
- className: _this27.props.classes.pathDivBreadcrumbFile,
2062
- onClick: function onClick() {
2063
- return _this27.setState({
2064
- pathFocus: true
2065
- });
2066
- }
2067
- }, part);
2068
2089
  }
2090
+
2091
+ return /*#__PURE__*/_react["default"].createElement("div", {
2092
+ key: "".concat(_this27.state.selected, "_").concat(i),
2093
+ className: _this27.props.classes.pathDivBreadcrumbFile,
2094
+ onClick: function onClick() {
2095
+ return _this27.setState({
2096
+ pathFocus: true
2097
+ });
2098
+ }
2099
+ }, part);
2069
2100
  });
2070
2101
  }
2071
2102
  }, {
@@ -2081,7 +2112,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
2081
2112
  onKeyDown: function onKeyDown(e) {
2082
2113
  return e.keyCode === 13 && _this28.changeToPath();
2083
2114
  },
2084
- onBlur: function onBlur(e) {
2115
+ onBlur: function onBlur() {
2085
2116
  return _this28.changeToPath();
2086
2117
  },
2087
2118
  onChange: function onChange(e) {
@@ -2119,7 +2150,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
2119
2150
  style: this.props.style,
2120
2151
  className: _Utils["default"].clsx(this.props.classes.root, this.props.className)
2121
2152
  }, this.props.showToolbar ? this.renderToolbar() : null, this.state.viewType === TILE ? this.renderPath() : null, /*#__PURE__*/_react["default"].createElement("div", {
2122
- className: _Utils["default"].clsx(this.props.classes.filesDiv, this.props.classes['filesDiv' + this.state.viewType])
2153
+ className: _Utils["default"].clsx(this.props.classes.filesDiv, this.props.classes["filesDiv".concat(this.state.viewType)])
2123
2154
  }, this.state.viewType === TABLE ? this.renderItems('/') : this.renderItems(this.state.currentDir || '/')), this.props.allowUpload ? this.renderInputDialog() : null, this.props.allowUpload ? this.renderUpload() : null, this.props.allowDelete ? this.renderDeleteDialog() : null, this.props.allowView ? this.renderViewDialog() : null, this.state.modalEditOfAccess && this.props.modalEditOfAccessControl && this.props.modalEditOfAccessControl(this, this.state.modalEditOfAccessObjData), this.renderError());
2124
2155
  }
2125
2156
  }], [{
@@ -2128,10 +2159,24 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
2128
2159
  if (props.expertMode !== undefined && props.expertMode !== state.expertMode) {
2129
2160
  return {
2130
2161
  expertMode: props.expertMode,
2131
- loadAllFolders: !state.allFoldersLoaded && props.expertMode
2162
+ loadAllFolders: true
2132
2163
  };
2133
- } else {
2134
- return null;
2164
+ }
2165
+
2166
+ return null;
2167
+ }
2168
+ }, {
2169
+ key: "getEditFile",
2170
+ value: function getEditFile(ext) {
2171
+ switch (ext) {
2172
+ case 'json':
2173
+ case 'js':
2174
+ case 'html':
2175
+ case 'txt':
2176
+ return true;
2177
+
2178
+ default:
2179
+ return false;
2135
2180
  }
2136
2181
  }
2137
2182
  }]);
@@ -2139,12 +2184,6 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
2139
2184
  }(_react.Component);
2140
2185
 
2141
2186
  FileBrowser.defaultProps = {
2142
- objectAddBoolean: false,
2143
- objectEditBoolean: false,
2144
- objectStatesView: false,
2145
- objectImportExport: false,
2146
- objectEditOfAccessControl: false,
2147
- modalNewObject: function modalNewObject() {},
2148
2187
  modalEditOfAccessControl: function modalEditOfAccessControl() {}
2149
2188
  };
2150
2189
  FileBrowser.propTypes = {
@@ -2171,8 +2210,9 @@ FileBrowser.propTypes = {
2171
2210
  // like ['png', 'svg', 'bmp', 'jpg', 'jpeg']
2172
2211
  filterByType: _propTypes["default"].string,
2173
2212
  // images, code or txt from FileViewer.EXTENSIONS
2174
- onSelect: _propTypes["default"].func // function (id, isDoubleClick)
2175
-
2213
+ onSelect: _propTypes["default"].func,
2214
+ // function (id, isDoubleClick)
2215
+ modalEditOfAccessControl: _propTypes["default"].func
2176
2216
  };
2177
2217
  /** @type {typeof FileBrowser} */
2178
2218