@iobroker/adapter-react-v5 3.3.0 → 3.4.0

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.
@@ -55,6 +55,10 @@ var _ViewModule = _interopRequireDefault(require("@mui/icons-material/ViewModule
55
55
  var _ArrowBack = _interopRequireDefault(require("@mui/icons-material/ArrowBack"));
56
56
  var _Delete = _interopRequireDefault(require("@mui/icons-material/Delete"));
57
57
  var _Brightness = _interopRequireDefault(require("@mui/icons-material/Brightness6"));
58
+ var _Image = _interopRequireDefault(require("@mui/icons-material/Image"));
59
+ var _FontDownload = _interopRequireDefault(require("@mui/icons-material/FontDownload"));
60
+ var _AudioFile = _interopRequireDefault(require("@mui/icons-material/AudioFile"));
61
+ var _Videocam = _interopRequireDefault(require("@mui/icons-material/Videocam"));
58
62
  var _IconExpert = _interopRequireDefault(require("../icons/IconExpert"));
59
63
  var _IconClosed = _interopRequireDefault(require("../icons/IconClosed"));
60
64
  var _IconOpen = _interopRequireDefault(require("../icons/IconOpen"));
@@ -69,6 +73,14 @@ var BUTTON_WIDTH = 32;
69
73
  var TILE_HEIGHT = 120;
70
74
  var TILE_WIDTH = 64;
71
75
  var NOT_FOUND = 'Not found';
76
+ var FILE_TYPE_ICONS = {
77
+ all: _InsertDriveFile["default"],
78
+ images: _Image["default"],
79
+ code: _Code["default"],
80
+ txt: _FontDownload["default"],
81
+ audio: _AudioFile["default"],
82
+ video: _Videocam["default"]
83
+ };
72
84
  var styles = function styles(theme) {
73
85
  return {
74
86
  dialog: {
@@ -410,10 +422,7 @@ function getParentDir(dir) {
410
422
  }
411
423
  function isFile(path) {
412
424
  var ext = _Utils["default"].getFileExtension(path);
413
- if (ext && ext.toLowerCase().match(/[a-z]+/) && ext.length < 5) {
414
- return true;
415
- }
416
- return false;
425
+ return !!(ext && ext.toLowerCase().match(/[a-z]+/) && ext.length < 5);
417
426
  }
418
427
  var TABLE = 'Table';
419
428
  var TILE = 'Tile';
@@ -432,7 +441,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
432
441
  (0, _classCallCheck2["default"])(this, FileBrowser);
433
442
  _this = _super.call(this, props);
434
443
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onFileChange", function (id, fileName, size) {
435
- var key = id + '/' + fileName;
444
+ var key = "".concat(id, "/").concat(fileName);
436
445
  var pos = key.lastIndexOf('/');
437
446
  var folder = key.substring(0, pos);
438
447
  console.log("File changed ".concat(key, "[").concat(size, "]"));
@@ -492,7 +501,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
492
501
  expanded = JSON.parse(expanded);
493
502
  if (_this.limitToPath) {
494
503
  expanded = expanded.filter(function (id) {
495
- return id.startsWith(_this.limitToPath + '/') || id === _this.limitToPath || _this.limitToPath.startsWith(id + '/');
504
+ return id.startsWith("".concat(_this.limitToPath, "/")) || id === _this.limitToPath || _this.limitToPath.startsWith("".concat(id, "/"));
496
505
  });
497
506
  }
498
507
  } catch (e) {
@@ -505,6 +514,11 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
505
514
  viewType = TABLE;
506
515
  }
507
516
  var selected = _this.props.selected || (window._localStorage || window.localStorage).getItem('files.selected') || USER_DATA;
517
+
518
+ // TODO: Now we do not support multiple selection
519
+ if (Array.isArray(selected)) {
520
+ selected = selected[0];
521
+ }
508
522
  var currentDir = '';
509
523
  if (isFile(selected)) {
510
524
  currentDir = getParentDir(selected);
@@ -522,7 +536,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
522
536
  addFolder: false,
523
537
  uploadFile: false,
524
538
  deleteItem: '',
525
- marked: [],
539
+ // marked: [],
526
540
  viewer: '',
527
541
  formatEditFile: '',
528
542
  path: selected,
@@ -532,8 +546,10 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
532
546
  backgroundImage: _backgroundImage,
533
547
  queueLength: 0,
534
548
  loadAllFolders: false,
535
- allFoldersLoaded: false,
536
- fileErrors: []
549
+ // allFoldersLoaded: false,
550
+ fileErrors: [],
551
+ filterByType: props.filterByType || window.localStorage.getItem('files.filterByType') || '',
552
+ showTypesMenu: null
537
553
  };
538
554
  _this.imagePrefix = _this.props.imagePrefix || './files/';
539
555
  _this.levelPadding = _this.props.levelPadding || 20;
@@ -625,7 +641,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
625
641
  }
626
642
  if (!_resolve) {
627
643
  return new Promise(function (resolve) {
628
- return _this4.browseFolders(foldersList, _newFolders, resolve);
644
+ _this4.browseFolders(foldersList, _newFolders, resolve);
629
645
  });
630
646
  }
631
647
  if (!foldersList || !foldersList.length) {
@@ -762,7 +778,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
762
778
  return Promise.all(_newFolders[folderId].filter(function (item) {
763
779
  return item.folder;
764
780
  }).map(function (item) {
765
- return _this7.browseFolder(item.id, _newFolders, true)["catch"](function (error) {});
781
+ return _this7.browseFolder(item.id, _newFolders, true)["catch"](function () {});
766
782
  })).then(function () {
767
783
  return resolve(_newFolders);
768
784
  })["catch"](function (error) {
@@ -789,14 +805,6 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
789
805
  if (pos !== -1) {
790
806
  objs.splice(pos, 1);
791
807
  }
792
-
793
- // remember, that all folders are loaded
794
- if (_this7.state.expertMode) {
795
- _this7.setState({
796
- allFoldersLoaded: true,
797
- loadFolders: false
798
- });
799
- }
800
808
  objs.forEach(function (obj) {
801
809
  if (_this7.limitToObjectID && _this7.limitToObjectID !== obj._id) {
802
810
  return;
@@ -832,7 +840,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
832
840
  return Promise.all(_folders.filter(function (item) {
833
841
  return item.folder;
834
842
  }).map(function (item) {
835
- return _this7.browseFolder(item.id, _newFolders, true)["catch"](function (error) {});
843
+ return _this7.browseFolder(item.id, _newFolders, true)["catch"](function () {});
836
844
  })).then(function () {
837
845
  return _newFolders;
838
846
  });
@@ -862,9 +870,9 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
862
870
  level: level
863
871
  };
864
872
  if (_this7.limitToPath) {
865
- if (item.folder && (item.id.startsWith(_this7.limitToPath + '/') || item.id === _this7.limitToPath || _this7.limitToPath.startsWith(item.id + '/'))) {
873
+ if (item.folder && (item.id.startsWith("".concat(_this7.limitToPath, "/")) || item.id === _this7.limitToPath || _this7.limitToPath.startsWith("".concat(item.id, "/")))) {
866
874
  _folders.push(item);
867
- } else if (item.id.startsWith(_this7.limitToPath + '/')) {
875
+ } else if (item.id.startsWith("".concat(_this7.limitToPath, "/"))) {
868
876
  _folders.push(item);
869
877
  }
870
878
  } else {
@@ -901,7 +909,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
901
909
  expanded.sort();
902
910
  (window._localStorage || window.localStorage).setItem('files.expanded', JSON.stringify(expanded));
903
911
  if (!item.temp) {
904
- return this.browseFolder(item.id).then(function (folders) {
912
+ this.browseFolder(item.id).then(function (folders) {
905
913
  return _this8.setState({
906
914
  expanded: expanded,
907
915
  folders: folders
@@ -973,7 +981,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
973
981
  }, function () {
974
982
  if (_this10.props.onSelect) {
975
983
  var ext = _Utils["default"].getFileExtension(id);
976
- if ((!_this10.props.filterFiles || _this10.props.filterFiles.includes(ext)) && (!_this10.props.filterByType || _FileViewer.EXTENSIONS[_this10.props.filterByType].includes(ext))) {
984
+ if ((!_this10.props.filterFiles || _this10.props.filterFiles.includes(ext)) && (!_this10.state.filterByType || _FileViewer.EXTENSIONS[_this10.state.filterByType].includes(ext))) {
977
985
  _this10.props.onSelect(id, false, !!_this10.state.folders[id]);
978
986
  } else {
979
987
  _this10.props.onSelect('');
@@ -992,7 +1000,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
992
1000
  var Icon = expanded ? _IconOpen["default"] : _IconClosed["default"];
993
1001
  var padding = this.state.viewType === TABLE ? item.level * this.levelPadding : 0;
994
1002
  var isUserData = item.name === USER_DATA;
995
- var isSpecialData = isUserData || item.name === 'vis.0';
1003
+ var isSpecialData = isUserData || item.name === 'vis.0' || item.name === 'vis-2-beta.0';
996
1004
  return /*#__PURE__*/_react["default"].createElement("div", {
997
1005
  key: item.id,
998
1006
  id: item.id,
@@ -1007,14 +1015,14 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1007
1015
  return _this11.state.viewType === TABLE && _this11.toggleFolder(item, e);
1008
1016
  },
1009
1017
  title: item.title && (0, _typeof2["default"])(item.title) === 'object' ? item.title[this.props.lang] || item.title.end || '' : item.title || null,
1010
- 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'])
1018
+ 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)
1011
1019
  }, /*#__PURE__*/_react["default"].createElement(Icon, {
1012
- className: _Utils["default"].clsx(this.props.classes['itemFolderIcon' + this.state.viewType], isSpecialData && this.props.classes.specialFolder),
1020
+ className: _Utils["default"].clsx(this.props.classes["itemFolderIcon".concat(this.state.viewType)], isSpecialData && this.props.classes.specialFolder),
1013
1021
  onClick: this.state.viewType === TABLE ? function (e) {
1014
1022
  return _this11.toggleFolder(item, e);
1015
1023
  } : undefined
1016
1024
  }), /*#__PURE__*/_react["default"].createElement("div", {
1017
- className: _Utils["default"].clsx(this.props.classes['itemName' + this.state.viewType], this.props.classes['itemNameFolder' + this.state.viewType])
1025
+ className: _Utils["default"].clsx(this.props.classes["itemName".concat(this.state.viewType)], this.props.classes["itemNameFolder".concat(this.state.viewType)])
1018
1026
  }, isUserData ? this.props.t('ra_User files') : item.name), /*#__PURE__*/_react["default"].createElement(_material.Hidden, {
1019
1027
  smDown: true
1020
1028
  }, /*#__PURE__*/_react["default"].createElement("div", {
@@ -1083,7 +1091,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1083
1091
  access = access.toString(16).padStart(3, '0');
1084
1092
  }
1085
1093
  return /*#__PURE__*/_react["default"].createElement("div", {
1086
- className: this.props.classes['itemAccess' + this.state.viewType]
1094
+ className: this.props.classes["itemAccess".concat(this.state.viewType)]
1087
1095
  }, /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
1088
1096
  size: "large",
1089
1097
  onClick: function onClick() {
@@ -1091,7 +1099,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1091
1099
  modalEditOfAccess: true
1092
1100
  });
1093
1101
  },
1094
- className: this.props.classes['itemAclButton' + this.state.viewType]
1102
+ className: this.props.classes["itemAclButton".concat(this.state.viewType)]
1095
1103
  }, access || '---'));
1096
1104
  }
1097
1105
  }, {
@@ -1146,7 +1154,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1146
1154
  _this14.setState({
1147
1155
  viewer: _this14.imagePrefix + item.id
1148
1156
  });
1149
- } else if ((!_this14.props.filterFiles || _this14.props.filterFiles.includes(item.ext)) && (!_this14.props.filterByType || _FileViewer.EXTENSIONS[_this14.props.filterByType].includes(item.ext))) {
1157
+ } else if ((!_this14.props.filterFiles || _this14.props.filterFiles.includes(item.ext)) && (!_this14.state.filterByType || _FileViewer.EXTENSIONS[_this14.state.filterByType].includes(item.ext))) {
1150
1158
  _this14.props.onSelect(item.id, true, !!_this14.state.folders[item.id]);
1151
1159
  }
1152
1160
  },
@@ -1159,7 +1167,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1159
1167
  } : {},
1160
1168
  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)
1161
1169
  }, _FileViewer.EXTENSIONS.images.includes(ext) ? this.state.fileErrors.includes(item.id) ? /*#__PURE__*/_react["default"].createElement(_IconNoIcon["default"], {
1162
- className: _Utils["default"].clsx(this.props.classes['itemImage' + this.state.viewType], this.getClassBackgroundImage())
1170
+ className: _Utils["default"].clsx(this.props.classes["itemImage".concat(this.state.viewType)], this.getClassBackgroundImage())
1163
1171
  }) : /*#__PURE__*/_react["default"].createElement("img", {
1164
1172
  onError: function onError(e) {
1165
1173
  e.target.onerror = null;
@@ -1171,7 +1179,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1171
1179
  });
1172
1180
  }
1173
1181
  },
1174
- className: _Utils["default"].clsx(this.props.classes['itemImage' + this.state.viewType], this.getClassBackgroundImage()),
1182
+ className: _Utils["default"].clsx(this.props.classes["itemImage".concat(this.state.viewType)], this.getClassBackgroundImage()),
1175
1183
  src: this.imagePrefix + item.id,
1176
1184
  alt: item.name
1177
1185
  }) : this.getFileIcon(ext), /*#__PURE__*/_react["default"].createElement("div", {
@@ -1191,7 +1199,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1191
1199
  viewer: _this14.imagePrefix + item.id,
1192
1200
  formatEditFile: ext
1193
1201
  });
1194
- } else if ((!_this14.props.filterFiles || _this14.props.filterFiles.includes(item.ext)) && (!_this14.props.filterByType || _FileViewer.EXTENSIONS[_this14.props.filterByType].includes(item.ext))) {
1202
+ } else if ((!_this14.props.filterFiles || _this14.props.filterFiles.includes(item.ext)) && (!_this14.state.filterByType || _FileViewer.EXTENSIONS[_this14.state.filterByType].includes(item.ext))) {
1195
1203
  _this14.props.onSelect(item.id, true, !!_this14.state.folders[item.id]);
1196
1204
  }
1197
1205
  },
@@ -1209,7 +1217,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1209
1217
  onClick: function onClick(e) {
1210
1218
  e.stopPropagation();
1211
1219
  }
1212
- }, /*#__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"], {
1220
+ }, /*#__PURE__*/_react["default"].createElement(_SaveAlt["default"], null)) : null, this.state.viewType === TABLE && this.props.allowDelete && item.id !== 'vis.0/' && item.id !== 'vis-2-beta.0/' && item.id !== USER_DATA ? /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
1213
1221
  "aria-label": "delete",
1214
1222
  onClick: function onClick(e) {
1215
1223
  e.stopPropagation();
@@ -1243,7 +1251,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1243
1251
  this.state.folders[folderId].forEach(function (item) {
1244
1252
  if (item.folder) {
1245
1253
  res.push(_this15.renderFolder(item));
1246
- } else if ((!_this15.props.filterFiles || _this15.props.filterFiles.includes(item.ext)) && (!_this15.props.filterByType || _FileViewer.EXTENSIONS[_this15.props.filterByType].includes(item.ext))) {
1254
+ } else if ((!_this15.props.filterFiles || _this15.props.filterFiles.includes(item.ext)) && (!_this15.state.filterByType || _FileViewer.EXTENSIONS[_this15.state.filterByType].includes(item.ext))) {
1247
1255
  res.push(_this15.renderFile(item));
1248
1256
  }
1249
1257
  });
@@ -1257,7 +1265,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1257
1265
  if (_this15.state.folders[item.id] && expanded) {
1258
1266
  res.push(_this15.renderItems(item.id));
1259
1267
  }
1260
- } else if ((!_this15.props.filterFiles || _this15.props.filterFiles.includes(item.ext)) && (!_this15.props.filterByType || _FileViewer.EXTENSIONS[_this15.props.filterByType].includes(item.ext))) {
1268
+ } else if ((!_this15.props.filterFiles || _this15.props.filterFiles.includes(item.ext)) && (!_this15.state.filterByType || _FileViewer.EXTENSIONS[_this15.state.filterByType].includes(item.ext))) {
1261
1269
  res.push(_this15.renderFile(item));
1262
1270
  } else {
1263
1271
  return null;
@@ -1287,6 +1295,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1287
1295
  key: "renderToolbar",
1288
1296
  value: function renderToolbar() {
1289
1297
  var _this16 = this;
1298
+ var IconType = this.props.showTypeSelector ? FILE_TYPE_ICONS[this.state.filterByType || 'all'] || FILE_TYPE_ICONS.all : null;
1290
1299
  return /*#__PURE__*/_react["default"].createElement(_Toolbar["default"], {
1291
1300
  key: "toolbar",
1292
1301
  variant: "dense"
@@ -1300,8 +1309,10 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1300
1309
  expertMode: !_this16.state.expertMode
1301
1310
  });
1302
1311
  },
1303
- size: "large"
1304
- }, /*#__PURE__*/_react["default"].createElement(_IconExpert["default"], null)) : null, this.props.showViewTypeButton ? /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
1312
+ size: "small"
1313
+ }, /*#__PURE__*/_react["default"].createElement(_IconExpert["default"], {
1314
+ fontSize: "small"
1315
+ })) : null, this.props.showViewTypeButton ? /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
1305
1316
  edge: "start",
1306
1317
  title: this.props.t('ra_Toggle view mode'),
1307
1318
  className: this.props.classes.menuButton,
@@ -1322,8 +1333,12 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1322
1333
  }
1323
1334
  });
1324
1335
  },
1325
- size: "large"
1326
- }, this.state.viewType !== TABLE ? /*#__PURE__*/_react["default"].createElement(_List["default"], null) : /*#__PURE__*/_react["default"].createElement(_ViewModule["default"], null)) : null, /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
1336
+ size: "small"
1337
+ }, this.state.viewType !== TABLE ? /*#__PURE__*/_react["default"].createElement(_List["default"], {
1338
+ fontSize: "small"
1339
+ }) : /*#__PURE__*/_react["default"].createElement(_ViewModule["default"], {
1340
+ fontSize: "small"
1341
+ })) : null, /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
1327
1342
  edge: "start",
1328
1343
  title: this.props.t('ra_Hide empty folders'),
1329
1344
  className: this.props.classes.menuButton,
@@ -1335,8 +1350,10 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1335
1350
  filterEmpty: !_this16.state.filterEmpty
1336
1351
  });
1337
1352
  },
1338
- size: "large"
1339
- }, /*#__PURE__*/_react["default"].createElement(_FolderOpen["default"], null)), /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
1353
+ size: "small"
1354
+ }, /*#__PURE__*/_react["default"].createElement(_FolderOpen["default"], {
1355
+ fontSize: "small"
1356
+ })), /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
1340
1357
  edge: "start",
1341
1358
  title: this.props.t('ra_Reload files'),
1342
1359
  className: this.props.classes.menuButton,
@@ -1349,10 +1366,12 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1349
1366
  return _this16.loadFolders();
1350
1367
  });
1351
1368
  },
1352
- size: "large"
1353
- }, /*#__PURE__*/_react["default"].createElement(_Refresh["default"], null)), this.props.allowCreateFolder ? /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
1369
+ size: "small"
1370
+ }, /*#__PURE__*/_react["default"].createElement(_Refresh["default"], {
1371
+ fontSize: "small"
1372
+ })), this.props.allowCreateFolder ? /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
1354
1373
  edge: "start",
1355
- disabled: !this.state.selected || !this.state.folders[this.state.selected] || this.limitToPath && !this.state.selected.startsWith(this.limitToPath + '/') && this.limitToPath !== this.state.selected,
1374
+ disabled: !this.state.selected || !this.state.folders[this.state.selected] || this.limitToPath && !this.state.selected.startsWith("".concat(this.limitToPath, "/")) && this.limitToPath !== this.state.selected,
1356
1375
  title: this.props.t('ra_Create folder'),
1357
1376
  className: this.props.classes.menuButton,
1358
1377
  color: "inherit",
@@ -1362,10 +1381,12 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1362
1381
  addFolder: true
1363
1382
  });
1364
1383
  },
1365
- size: "large"
1366
- }, /*#__PURE__*/_react["default"].createElement(_CreateNewFolder["default"], null)) : null, this.props.allowUpload ? /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
1384
+ size: "small"
1385
+ }, /*#__PURE__*/_react["default"].createElement(_CreateNewFolder["default"], {
1386
+ fontSize: "small"
1387
+ })) : null, this.props.allowUpload ? /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
1367
1388
  edge: "start",
1368
- disabled: !this.state.selected || !this.state.folders[this.state.selected] || this.limitToPath && !this.state.selected.startsWith(this.limitToPath + '/') && this.limitToPath !== this.state.selected,
1389
+ disabled: !this.state.selected || !this.state.folders[this.state.selected] || this.limitToPath && !this.state.selected.startsWith("".concat(this.limitToPath, "/")) && this.limitToPath !== this.state.selected,
1369
1390
  title: this.props.t('ra_Upload file'),
1370
1391
  className: this.props.classes.menuButton,
1371
1392
  color: "inherit",
@@ -1375,16 +1396,62 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1375
1396
  uploadFile: true
1376
1397
  });
1377
1398
  },
1378
- size: "large"
1379
- }, /*#__PURE__*/_react["default"].createElement(_Publish["default"], null)) : null, /*#__PURE__*/_react["default"].createElement(_material.Tooltip, {
1399
+ size: "small"
1400
+ }, /*#__PURE__*/_react["default"].createElement(_Publish["default"], {
1401
+ fontSize: "small"
1402
+ })) : null, this.props.showTypeSelector ? /*#__PURE__*/_react["default"].createElement(_material.Tooltip, {
1403
+ title: this.props.t('ra_Filter files')
1404
+ }, /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
1405
+ size: "small",
1406
+ onClick: function onClick(e) {
1407
+ return _this16.setState({
1408
+ showTypesMenu: e.target
1409
+ });
1410
+ }
1411
+ }, /*#__PURE__*/_react["default"].createElement(IconType, {
1412
+ fontSize: "small"
1413
+ }))) : null, this.state.showTypesMenu ? /*#__PURE__*/_react["default"].createElement(_material.Menu, {
1414
+ open: !0,
1415
+ anchorEl: this.state.showTypesMenu,
1416
+ onClose: function onClose() {
1417
+ return _this16.setState({
1418
+ showTypesMenu: null
1419
+ });
1420
+ }
1421
+ }, Object.keys(FILE_TYPE_ICONS).map(function (type) {
1422
+ var MyIcon = FILE_TYPE_ICONS[type];
1423
+ return /*#__PURE__*/_react["default"].createElement(_material.MenuItem, {
1424
+ key: type,
1425
+ selected: _this16.state.filterByType === type,
1426
+ onClick: function onClick() {
1427
+ if (type === 'all') {
1428
+ (window._localStorage || window.localStorage).removeItem('files.filterByType');
1429
+ _this16.setState({
1430
+ filterByType: '',
1431
+ showTypesMenu: null
1432
+ });
1433
+ } else {
1434
+ (window._localStorage || window.localStorage).setItem('files.filterByType', type);
1435
+ _this16.setState({
1436
+ filterByType: type,
1437
+ showTypesMenu: null
1438
+ });
1439
+ }
1440
+ }
1441
+ }, /*#__PURE__*/_react["default"].createElement(_material.ListItemIcon, null, /*#__PURE__*/_react["default"].createElement(MyIcon, {
1442
+ fontSize: "small"
1443
+ })), /*#__PURE__*/_react["default"].createElement(_material.ListItemText, null, _this16.props.t("ra_fileType_".concat(type))));
1444
+ })) : null, /*#__PURE__*/_react["default"].createElement(_material.Tooltip, {
1380
1445
  title: this.props.t('ra_Background image')
1381
1446
  }, /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
1382
1447
  color: "inherit",
1383
1448
  edge: "start",
1384
1449
  className: this.props.classes.menuButton,
1385
1450
  onClick: this.setStateBackgroundImage,
1386
- size: "large"
1387
- }, /*#__PURE__*/_react["default"].createElement(_Brightness["default"], null))));
1451
+ size: "small"
1452
+ }, /*#__PURE__*/_react["default"].createElement(_Brightness["default"], {
1453
+ fontSize: "small"
1454
+ }))));
1388
1455
  }
1389
1456
  }, {
1390
1457
  key: "findItem",
@@ -1550,49 +1617,50 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1550
1617
  reader.onload = function () {
1551
1618
  var parentFolder = _this19.findFirstFolder(_this19.state.selected);
1552
1619
  if (!parentFolder) {
1553
- return window.alert(_this19.props.t('ra_Invalid parent folder!'));
1554
- }
1555
- var id = "".concat(parentFolder, "/").concat(file.name);
1556
- _this19.uploadFile(id, reader.result).then(function () {
1557
- if (! --count) {
1558
- _this19.setState({
1559
- uploadFile: false
1560
- }, function () {
1561
- if (_this19.supportSubscribes) {
1562
- // open current folder
1563
- var expanded = (0, _toConsumableArray2["default"])(_this19.state.expanded);
1564
- if (!expanded.includes(parentFolder)) {
1565
- expanded.push(parentFolder);
1566
- expanded.sort();
1567
- (window._localStorage || window.localStorage).setItem('files.expanded', JSON.stringify(expanded));
1568
- }
1569
- _this19.setState({
1570
- expanded: expanded
1571
- }, function () {
1572
- return _this19.select(id);
1573
- });
1574
- } else {
1575
- setTimeout(function () {
1576
- return _this19.browseFolder(parentFolder, true).then(function (folders) {
1577
- // open current folder
1578
- var expanded = (0, _toConsumableArray2["default"])(_this19.state.expanded);
1579
- if (!expanded.includes(parentFolder)) {
1580
- expanded.push(parentFolder);
1581
- expanded.sort();
1582
- (window._localStorage || window.localStorage).setItem('files.expanded', JSON.stringify(expanded));
1583
- }
1584
- _this19.setState({
1585
- folders: folders,
1586
- expanded: expanded
1587
- }, function () {
1588
- return _this19.select(id);
1589
- });
1620
+ window.alert(_this19.props.t('ra_Invalid parent folder!'));
1621
+ } else {
1622
+ var id = "".concat(parentFolder, "/").concat(file.name);
1623
+ _this19.uploadFile(id, reader.result).then(function () {
1624
+ if (! --count) {
1625
+ _this19.setState({
1626
+ uploadFile: false
1627
+ }, function () {
1628
+ if (_this19.supportSubscribes) {
1629
+ // open current folder
1630
+ var expanded = (0, _toConsumableArray2["default"])(_this19.state.expanded);
1631
+ if (!expanded.includes(parentFolder)) {
1632
+ expanded.push(parentFolder);
1633
+ expanded.sort();
1634
+ (window._localStorage || window.localStorage).setItem('files.expanded', JSON.stringify(expanded));
1635
+ }
1636
+ _this19.setState({
1637
+ expanded: expanded
1638
+ }, function () {
1639
+ return _this19.select(id);
1590
1640
  });
1591
- }, 500);
1592
- }
1593
- });
1594
- }
1595
- });
1641
+ } else {
1642
+ setTimeout(function () {
1643
+ return _this19.browseFolder(parentFolder, true).then(function (folders) {
1644
+ // open current folder
1645
+ var expanded = (0, _toConsumableArray2["default"])(_this19.state.expanded);
1646
+ if (!expanded.includes(parentFolder)) {
1647
+ expanded.push(parentFolder);
1648
+ expanded.sort();
1649
+ (window._localStorage || window.localStorage).setItem('files.expanded', JSON.stringify(expanded));
1650
+ }
1651
+ _this19.setState({
1652
+ folders: folders,
1653
+ expanded: expanded
1654
+ }, function () {
1655
+ return _this19.select(id);
1656
+ });
1657
+ });
1658
+ }, 500);
1659
+ }
1660
+ });
1661
+ }
1662
+ });
1663
+ }
1596
1664
  };
1597
1665
  reader.readAsArrayBuffer(file);
1598
1666
  });
@@ -1682,16 +1750,16 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1682
1750
  var parentFolder = _this21.findFirstFolder(_deleteItem);
1683
1751
  var folders = {};
1684
1752
  Object.keys(_this21.state.folders).forEach(function (name) {
1685
- if (name !== parentFolder && !name.startsWith(parentFolder + '/')) {
1753
+ if (name !== parentFolder && !name.startsWith("".concat(parentFolder, "/"))) {
1686
1754
  folders[name] = _this21.state.folders[name];
1687
1755
  }
1688
1756
  });
1689
1757
  newState.folders = folders;
1690
1758
  _this21.setState(newState, function () {
1691
1759
  return setTimeout(function () {
1692
- return _this21.browseFolders((0, _toConsumableArray2["default"])(_this21.state.expanded), folders).then(function (folders) {
1760
+ return _this21.browseFolders((0, _toConsumableArray2["default"])(_this21.state.expanded), folders).then(function (_folders) {
1693
1761
  return _this21.setState({
1694
- folders: folders
1762
+ folders: _folders
1695
1763
  });
1696
1764
  });
1697
1765
  }, 200);
@@ -1774,6 +1842,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1774
1842
  var _this24 = this;
1775
1843
  if (this.state.errorText) {
1776
1844
  return /*#__PURE__*/_react["default"].createElement(_Error["default"], {
1845
+ classes: {},
1777
1846
  key: "errorDialog",
1778
1847
  text: this.state.errorText,
1779
1848
  onClose: function onClose() {
@@ -1785,57 +1854,56 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1785
1854
  }
1786
1855
  return null;
1787
1856
  }
1788
- }, {
1789
- key: "updateItemsAcl",
1790
- value: function updateItemsAcl(info) {
1791
- var _this25 = this;
1792
- var folders = JSON.parse(JSON.stringify(this.state.folders));
1793
- var changed;
1794
- info.forEach(function (it) {
1795
- var item = _this25.findItem(it.id, folders);
1796
- if (item && JSON.stringify(item.acl) !== JSON.stringify(it.acl)) {
1797
- item.acl = it.acl;
1798
- changed = true;
1799
- }
1800
- });
1801
- changed && this.setState({
1802
- folders: folders
1803
- });
1857
+
1858
+ /*
1859
+ updateItemsAcl(info) {
1860
+ const folders = JSON.parse(JSON.stringify(this.state.folders));
1861
+ let changed;
1862
+ info.forEach(it => {
1863
+ const item = this.findItem(it.id, folders);
1864
+ if (item && JSON.stringify(item.acl) !== JSON.stringify(it.acl)) {
1865
+ item.acl = it.acl;
1866
+ changed = true;
1867
+ }
1868
+ });
1869
+ changed && this.setState({ folders });
1804
1870
  }
1871
+ */
1805
1872
  }, {
1806
1873
  key: "changeToPath",
1807
1874
  value: function changeToPath() {
1808
- var _this26 = this;
1875
+ var _this25 = this;
1809
1876
  setTimeout(function () {
1810
- if (_this26.state.path !== _this26.state.selected && (!_this26.lastSelect || Date.now() - _this26.lastSelect > 100)) {
1811
- var folder = _this26.state.path;
1812
- if (isFile(_this26.state.path)) {
1813
- folder = getParentDir(_this26.state.path);
1877
+ if (_this25.state.path !== _this25.state.selected && (!_this25.lastSelect || Date.now() - _this25.lastSelect > 100)) {
1878
+ var folder = _this25.state.path;
1879
+ if (isFile(_this25.state.path)) {
1880
+ folder = getParentDir(_this25.state.path);
1814
1881
  }
1815
1882
  new Promise(function (resolve) {
1816
- if (!_this26.state.folders[folder]) {
1817
- return _this26.browseFolder(folder).then(function (folders) {
1818
- return _this26.setState({
1883
+ if (!_this25.state.folders[folder]) {
1884
+ _this25.browseFolder(folder).then(function (folders) {
1885
+ return _this25.setState({
1819
1886
  folders: folders
1820
1887
  }, function () {
1821
1888
  return resolve(true);
1822
1889
  });
1823
1890
  })["catch"](function (err) {
1824
- return _this26.setState({
1825
- errorText: err === NOT_FOUND ? _this26.props.t('ra_Cannot find "%s"', folder) : _this26.props.t('ra_Cannot read "%s"', folder)
1891
+ return _this25.setState({
1892
+ errorText: err === NOT_FOUND ? _this25.props.t('ra_Cannot find "%s"', folder) : _this25.props.t('ra_Cannot read "%s"', folder)
1826
1893
  });
1827
1894
  });
1895
+ } else {
1896
+ resolve(true);
1828
1897
  }
1829
- return resolve(true);
1830
1898
  }).then(function (result) {
1831
- return result && _this26.setState({
1832
- selected: _this26.state.path,
1899
+ return result && _this25.setState({
1900
+ selected: _this25.state.path,
1833
1901
  currentDir: folder,
1834
1902
  pathFocus: false
1835
1903
  });
1836
1904
  });
1837
- } else if (!_this26.lastSelect || Date.now() - _this26.lastSelect > 100) {
1838
- _this26.setState({
1905
+ } else if (!_this25.lastSelect || Date.now() - _this25.lastSelect > 100) {
1906
+ _this25.setState({
1839
1907
  pathFocus: false
1840
1908
  });
1841
1909
  }
@@ -1844,7 +1912,7 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1844
1912
  }, {
1845
1913
  key: "renderBreadcrumb",
1846
1914
  value: function renderBreadcrumb() {
1847
- var _this27 = this;
1915
+ var _this26 = this;
1848
1916
  var parts = this.state.selected.startsWith('/') ? this.state.selected.split('/') : "/".concat(this.state.selected).split('/');
1849
1917
  var p = [];
1850
1918
  return parts.map(function (part, i) {
@@ -1852,21 +1920,21 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1852
1920
  var path = p.join('/');
1853
1921
  if (i < parts.length - 1) {
1854
1922
  return [/*#__PURE__*/_react["default"].createElement("div", {
1855
- key: "".concat(_this27.state.selected, "_").concat(i),
1856
- className: _this27.props.classes.pathDivBreadcrumbDir,
1923
+ key: "".concat(_this26.state.selected, "_").concat(i),
1924
+ className: _this26.props.classes.pathDivBreadcrumbDir,
1857
1925
  onClick: function onClick(e) {
1858
- return _this27.changeFolder(e, path || '/');
1926
+ return _this26.changeFolder(e, path || '/');
1859
1927
  }
1860
- }, part || _this27.props.t('ra_Root')), /*#__PURE__*/_react["default"].createElement("span", {
1861
- key: "".concat(_this27.state.selected, "_s_").concat(i),
1862
- className: _this27.props.classes.pathDivBreadcrumbSlash
1928
+ }, part || _this26.props.t('ra_Root')), /*#__PURE__*/_react["default"].createElement("span", {
1929
+ key: "".concat(_this26.state.selected, "_s_").concat(i),
1930
+ className: _this26.props.classes.pathDivBreadcrumbSlash
1863
1931
  }, '>')];
1864
1932
  }
1865
1933
  return /*#__PURE__*/_react["default"].createElement("div", {
1866
- key: "".concat(_this27.state.selected, "_").concat(i),
1867
- className: _this27.props.classes.pathDivBreadcrumbFile,
1934
+ key: "".concat(_this26.state.selected, "_").concat(i),
1935
+ className: _this26.props.classes.pathDivBreadcrumbFile,
1868
1936
  onClick: function onClick() {
1869
- return _this27.setState({
1937
+ return _this26.setState({
1870
1938
  pathFocus: true
1871
1939
  });
1872
1940
  }
@@ -1876,20 +1944,20 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1876
1944
  }, {
1877
1945
  key: "renderPath",
1878
1946
  value: function renderPath() {
1879
- var _this28 = this;
1947
+ var _this27 = this;
1880
1948
  return /*#__PURE__*/_react["default"].createElement("div", {
1881
1949
  key: "path",
1882
1950
  className: _Utils["default"].clsx(this.props.classes.pathDiv, !this.state.pathFocus && this.props.classes.pathDivBreadcrumb)
1883
1951
  }, this.state.pathFocus ? /*#__PURE__*/_react["default"].createElement(_Input["default"], {
1884
1952
  value: this.state.path,
1885
1953
  onKeyDown: function onKeyDown(e) {
1886
- return e.keyCode === 13 && _this28.changeToPath();
1954
+ return e.keyCode === 13 && _this27.changeToPath();
1887
1955
  },
1888
1956
  onBlur: function onBlur() {
1889
- return _this28.changeToPath();
1957
+ return _this27.changeToPath();
1890
1958
  },
1891
1959
  onChange: function onChange(e) {
1892
- return _this28.setState({
1960
+ return _this27.setState({
1893
1961
  path: e.target.value
1894
1962
  });
1895
1963
  },
@@ -1899,19 +1967,19 @@ var FileBrowser = /*#__PURE__*/function (_Component) {
1899
1967
  }, {
1900
1968
  key: "render",
1901
1969
  value: function render() {
1902
- var _this29 = this;
1970
+ var _this28 = this;
1903
1971
  if (!this.props.ready) {
1904
1972
  return /*#__PURE__*/_react["default"].createElement(_LinearProgress["default"], null);
1905
1973
  }
1906
1974
  if (this.state.loadAllFolders && !this.foldersLoading) {
1907
1975
  this.foldersLoading = true;
1908
1976
  setTimeout(function () {
1909
- _this29.setState({
1977
+ _this28.setState({
1910
1978
  loadAllFolders: false,
1911
1979
  folders: {}
1912
1980
  }, function () {
1913
- _this29.foldersLoading = false;
1914
- _this29.loadFolders();
1981
+ _this28.foldersLoading = false;
1982
+ _this28.loadFolders();
1915
1983
  });
1916
1984
  }, 300);
1917
1985
  }
@@ -1961,6 +2029,7 @@ FileBrowser.propTypes = {
1961
2029
  socket: _propTypes["default"].object.isRequired,
1962
2030
  ready: _propTypes["default"].bool,
1963
2031
  expertMode: _propTypes["default"].bool,
2032
+ showTypeSelector: _propTypes["default"].bool,
1964
2033
  showToolbar: _propTypes["default"].bool,
1965
2034
  allowUpload: _propTypes["default"].bool,
1966
2035
  allowDownload: _propTypes["default"].bool,
@@ -1976,7 +2045,7 @@ FileBrowser.propTypes = {
1976
2045
  filterFiles: _propTypes["default"].array,
1977
2046
  // like ['png', 'svg', 'bmp', 'jpg', 'jpeg']
1978
2047
  filterByType: _propTypes["default"].string,
1979
- // images, code or txt from FileViewer.EXTENSIONS
2048
+ // images, code or txt from EXTENSIONS
1980
2049
  onSelect: _propTypes["default"].func,
1981
2050
  // function (id, isDoubleClick)
1982
2051