@iobroker/adapter-react-v5 0.0.2

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 (264) hide show
  1. package/Components/404.js +155 -0
  2. package/Components/404.js.map +1 -0
  3. package/Components/ColorPicker.js +313 -0
  4. package/Components/ColorPicker.js.map +1 -0
  5. package/Components/ComplexCron.js +606 -0
  6. package/Components/ComplexCron.js.map +1 -0
  7. package/Components/FileBrowser.js +2147 -0
  8. package/Components/FileBrowser.js.map +1 -0
  9. package/Components/FileViewer.js +245 -0
  10. package/Components/FileViewer.js.map +1 -0
  11. package/Components/Icon.js +234 -0
  12. package/Components/Icon.js.map +1 -0
  13. package/Components/IconPicker.js +188 -0
  14. package/Components/IconPicker.js.map +1 -0
  15. package/Components/IconSelector.js +337 -0
  16. package/Components/IconSelector.js.map +1 -0
  17. package/Components/Image.js +215 -0
  18. package/Components/Image.js.map +1 -0
  19. package/Components/Loader.js +134 -0
  20. package/Components/Loader.js.map +1 -0
  21. package/Components/Loaders/PT.css +109 -0
  22. package/Components/Loaders/PT.js +104 -0
  23. package/Components/Loaders/PT.js.map +1 -0
  24. package/Components/Loaders/Vendor.css +13 -0
  25. package/Components/Loaders/Vendor.js +108 -0
  26. package/Components/Loaders/Vendor.js.map +1 -0
  27. package/Components/Logo.js +230 -0
  28. package/Components/Logo.js.map +1 -0
  29. package/Components/MDUtils.js +141 -0
  30. package/Components/MDUtils.js.map +1 -0
  31. package/Components/ObjectBrowser.js +6119 -0
  32. package/Components/ObjectBrowser.js.map +1 -0
  33. package/Components/Router.js +152 -0
  34. package/Components/Router.js.map +1 -0
  35. package/Components/SaveCloseButtons.js +177 -0
  36. package/Components/SaveCloseButtons.js.map +1 -0
  37. package/Components/Schedule.js +1891 -0
  38. package/Components/Schedule.js.map +1 -0
  39. package/Components/SelectWithIcon.js +235 -0
  40. package/Components/SelectWithIcon.js.map +1 -0
  41. package/Components/SimpleCron/cron2text.js +563 -0
  42. package/Components/SimpleCron/cron2text.js.map +1 -0
  43. package/Components/SimpleCron/cronText.js +60 -0
  44. package/Components/SimpleCron/cronText.js.map +1 -0
  45. package/Components/SimpleCron/index.js +861 -0
  46. package/Components/SimpleCron/index.js.map +1 -0
  47. package/Components/SimpleCron/jquery.cron.locale.js +322 -0
  48. package/Components/SimpleCron/jquery.cron.locale.js.map +1 -0
  49. package/Components/TabContainer.js +108 -0
  50. package/Components/TabContainer.js.map +1 -0
  51. package/Components/TabContent.js +96 -0
  52. package/Components/TabContent.js.map +1 -0
  53. package/Components/TabHeader.js +72 -0
  54. package/Components/TabHeader.js.map +1 -0
  55. package/Components/TextWithIcon.js +148 -0
  56. package/Components/TextWithIcon.js.map +1 -0
  57. package/Components/ToggleThemeMenu.js +49 -0
  58. package/Components/ToggleThemeMenu.js.map +1 -0
  59. package/Components/TreeTable.js +1030 -0
  60. package/Components/TreeTable.js.map +1 -0
  61. package/Components/Utils.js +1763 -0
  62. package/Components/Utils.js.map +1 -0
  63. package/Components/copy-to-clipboard.js +183 -0
  64. package/Components/copy-to-clipboard.js.map +1 -0
  65. package/Components/loader.css +222 -0
  66. package/Components/types.d.ts +121 -0
  67. package/Connection.js +3334 -0
  68. package/Connection.js.map +1 -0
  69. package/Dialogs/ComplexCron.js +193 -0
  70. package/Dialogs/ComplexCron.js.map +1 -0
  71. package/Dialogs/Confirm.js +211 -0
  72. package/Dialogs/Confirm.js.map +1 -0
  73. package/Dialogs/Cron.js +254 -0
  74. package/Dialogs/Cron.js.map +1 -0
  75. package/Dialogs/Error.js +137 -0
  76. package/Dialogs/Error.js.map +1 -0
  77. package/Dialogs/Message.js +118 -0
  78. package/Dialogs/Message.js.map +1 -0
  79. package/Dialogs/SelectID.js +313 -0
  80. package/Dialogs/SelectID.js.map +1 -0
  81. package/Dialogs/SimpleCron.js +177 -0
  82. package/Dialogs/SimpleCron.js.map +1 -0
  83. package/Dialogs/TextInput.js +194 -0
  84. package/Dialogs/TextInput.js.map +1 -0
  85. package/GenericApp.js +1022 -0
  86. package/GenericApp.js.map +1 -0
  87. package/LICENSE +22 -0
  88. package/Prompt.js +21 -0
  89. package/Prompt.js.map +1 -0
  90. package/README.md +645 -0
  91. package/Theme.js +422 -0
  92. package/Theme.js.map +1 -0
  93. package/assets/devices/Alarm Systems.svg +19 -0
  94. package/assets/devices/Amplifier.svg +22 -0
  95. package/assets/devices/Awnings.svg +5 -0
  96. package/assets/devices/Battery Status.svg +5 -0
  97. package/assets/devices/Ceiling Spotlights.svg +16 -0
  98. package/assets/devices/Chandelier.svg +7 -0
  99. package/assets/devices/Climate.svg +12 -0
  100. package/assets/devices/Coffee Makers.svg +6 -0
  101. package/assets/devices/Cold Water.svg +31 -0
  102. package/assets/devices/Computer.svg +21 -0
  103. package/assets/devices/Consumption.svg +8 -0
  104. package/assets/devices/Curtains.svg +43 -0
  105. package/assets/devices/Dishwashers.svg +12 -0
  106. package/assets/devices/Doors.svg +6 -0
  107. package/assets/devices/Doorstep.svg +35 -0
  108. package/assets/devices/Dryer.svg +14 -0
  109. package/assets/devices/Fan.svg +20 -0
  110. package/assets/devices/Floor Lamps.svg +5 -0
  111. package/assets/devices/Garage Doors.svg +9 -0
  112. package/assets/devices/Gates.svg +32 -0
  113. package/assets/devices/Hairdryer.svg +23 -0
  114. package/assets/devices/Handle.svg +6 -0
  115. package/assets/devices/Hanging Lamps.svg +9 -0
  116. package/assets/devices/Heater.svg +44 -0
  117. package/assets/devices/Hoods.svg +12 -0
  118. package/assets/devices/Hot Water.svg +10 -0
  119. package/assets/devices/Humidity.svg +41 -0
  120. package/assets/devices/Iron.svg +5 -0
  121. package/assets/devices/Irrigation.svg +42 -0
  122. package/assets/devices/Led Strip.svg +31 -0
  123. package/assets/devices/Light.svg +30 -0
  124. package/assets/devices/Lightings.svg +46 -0
  125. package/assets/devices/Lock.svg +19 -0
  126. package/assets/devices/Louvre.svg +7 -0
  127. package/assets/devices/Mowing Machine.svg +9 -0
  128. package/assets/devices/Music.svg +13 -0
  129. package/assets/devices/Outdoor Blinds.svg +7 -0
  130. package/assets/devices/People.svg +19 -0
  131. package/assets/devices/Pool.svg +8 -0
  132. package/assets/devices/Power Consumption.svg +13 -0
  133. package/assets/devices/Printer.svg +10 -0
  134. package/assets/devices/Pump.svg +10 -0
  135. package/assets/devices/Receiver.svg +19 -0
  136. package/assets/devices/Sconces.svg +10 -0
  137. package/assets/devices/Security.svg +34 -0
  138. package/assets/devices/Shading.svg +5 -0
  139. package/assets/devices/Shutters.svg +11 -0
  140. package/assets/devices/SmokeDetector.svg +13 -0
  141. package/assets/devices/Sockets.svg +13 -0
  142. package/assets/devices/Speaker.svg +35 -0
  143. package/assets/devices/Stove.svg +12 -0
  144. package/assets/devices/Table Lamps.svg +12 -0
  145. package/assets/devices/Temperature Sensors.svg +28 -0
  146. package/assets/devices/Tv.svg +8 -0
  147. package/assets/devices/Vacuum Cleaner.svg +16 -0
  148. package/assets/devices/Ventilation.svg +12 -0
  149. package/assets/devices/Washing Machines.svg +16 -0
  150. package/assets/devices/Water Consumption.svg +6 -0
  151. package/assets/devices/Water Heater.svg +8 -0
  152. package/assets/devices/Water.svg +40 -0
  153. package/assets/devices/Weather.svg +28 -0
  154. package/assets/devices/Window.svg +8 -0
  155. package/assets/devices/list.json +994 -0
  156. package/assets/devices/names.txt +63 -0
  157. package/assets/devices/parseNames.js +34 -0
  158. package/assets/lamp_ceiling.svg +9 -0
  159. package/assets/lamp_table.svg +8 -0
  160. package/assets/no_icon.svg +9 -0
  161. package/assets/rooms/Anteroom.svg +53 -0
  162. package/assets/rooms/Attic.svg +21 -0
  163. package/assets/rooms/Balcony.svg +13 -0
  164. package/assets/rooms/Barn.svg +6 -0
  165. package/assets/rooms/Basement.svg +5 -0
  166. package/assets/rooms/Bathroom.svg +38 -0
  167. package/assets/rooms/Bedroom.svg +5 -0
  168. package/assets/rooms/Boiler Room.svg +13 -0
  169. package/assets/rooms/Carport.svg +17 -0
  170. package/assets/rooms/Cellar.svg +89 -0
  171. package/assets/rooms/Chamber.svg +9 -0
  172. package/assets/rooms/Corridor.svg +53 -0
  173. package/assets/rooms/Dining Area.svg +37 -0
  174. package/assets/rooms/Dining Room.svg +37 -0
  175. package/assets/rooms/Dining.svg +37 -0
  176. package/assets/rooms/Dressing Room.svg +5 -0
  177. package/assets/rooms/Driveway.svg +15 -0
  178. package/assets/rooms/Entrance.svg +44 -0
  179. package/assets/rooms/Equipment Room.svg +15 -0
  180. package/assets/rooms/Front Yard.svg +64 -0
  181. package/assets/rooms/Gallery.svg +14 -0
  182. package/assets/rooms/Garage.svg +20 -0
  183. package/assets/rooms/Garden.svg +13 -0
  184. package/assets/rooms/Ground Floor.svg +95 -0
  185. package/assets/rooms/Guest Bathroom.svg +33 -0
  186. package/assets/rooms/Guest Room.svg +5 -0
  187. package/assets/rooms/Gym.svg +5 -0
  188. package/assets/rooms/Hall.svg +19 -0
  189. package/assets/rooms/Home Theater.svg +8 -0
  190. package/assets/rooms/Kitchen.svg +18 -0
  191. package/assets/rooms/Laundry Room.svg +12 -0
  192. package/assets/rooms/Living Area.svg +11 -0
  193. package/assets/rooms/Living Room.svg +10 -0
  194. package/assets/rooms/Locker Room.svg +17 -0
  195. package/assets/rooms/Nursery.svg +5 -0
  196. package/assets/rooms/Office.svg +8 -0
  197. package/assets/rooms/Outdoors.svg +7 -0
  198. package/assets/rooms/Playroom.svg +6 -0
  199. package/assets/rooms/Pool.svg +8 -0
  200. package/assets/rooms/Rear Wall.svg +30 -0
  201. package/assets/rooms/Second Floor.svg +95 -0
  202. package/assets/rooms/Shed.svg +16 -0
  203. package/assets/rooms/Sleeping Area.svg +22 -0
  204. package/assets/rooms/Stairway.svg +5 -0
  205. package/assets/rooms/Stairwell.svg +15 -0
  206. package/assets/rooms/Storeroom.svg +5 -0
  207. package/assets/rooms/Summer House.svg +27 -0
  208. package/assets/rooms/Swimming Pool.svg +21 -0
  209. package/assets/rooms/Terrace.svg +7 -0
  210. package/assets/rooms/Toilet.svg +10 -0
  211. package/assets/rooms/Upstairs.svg +6 -0
  212. package/assets/rooms/Wardrobe.svg +60 -0
  213. package/assets/rooms/Washroom.svg +20 -0
  214. package/assets/rooms/Wc.svg +10 -0
  215. package/assets/rooms/Windscreen.svg +60 -0
  216. package/assets/rooms/Workshop.svg +23 -0
  217. package/assets/rooms/Workspace.svg +8 -0
  218. package/assets/rooms/list.json +946 -0
  219. package/assets/rooms/names.txt +60 -0
  220. package/assets/rooms/parseNames.js +34 -0
  221. package/gulpfile.js +113 -0
  222. package/i18n/de.json +280 -0
  223. package/i18n/en.json +280 -0
  224. package/i18n/es.json +267 -0
  225. package/i18n/fr.json +267 -0
  226. package/i18n/it.json +267 -0
  227. package/i18n/nl.json +267 -0
  228. package/i18n/pl.json +267 -0
  229. package/i18n/pt.json +267 -0
  230. package/i18n/ru.json +280 -0
  231. package/i18n/zh-cn.json +267 -0
  232. package/i18n.js +171 -0
  233. package/i18n.js.map +1 -0
  234. package/icons/IconAdapter.js +39 -0
  235. package/icons/IconAdapter.js.map +1 -0
  236. package/icons/IconAlias.js +39 -0
  237. package/icons/IconAlias.js.map +1 -0
  238. package/icons/IconChannel.js +80 -0
  239. package/icons/IconChannel.js.map +1 -0
  240. package/icons/IconClearFilter.js +41 -0
  241. package/icons/IconClearFilter.js.map +1 -0
  242. package/icons/IconClosed.js +39 -0
  243. package/icons/IconClosed.js.map +1 -0
  244. package/icons/IconCopy.js +48 -0
  245. package/icons/IconCopy.js.map +1 -0
  246. package/icons/IconDevice.js +147 -0
  247. package/icons/IconDevice.js.map +1 -0
  248. package/icons/IconDocument.js +39 -0
  249. package/icons/IconDocument.js.map +1 -0
  250. package/icons/IconExpert.js +50 -0
  251. package/icons/IconExpert.js.map +1 -0
  252. package/icons/IconFx.js +39 -0
  253. package/icons/IconFx.js.map +1 -0
  254. package/icons/IconInstance.js +39 -0
  255. package/icons/IconInstance.js.map +1 -0
  256. package/icons/IconLogout.js +50 -0
  257. package/icons/IconLogout.js.map +1 -0
  258. package/icons/IconOpen.js +39 -0
  259. package/icons/IconOpen.js.map +1 -0
  260. package/icons/IconState.js +58 -0
  261. package/icons/IconState.js.map +1 -0
  262. package/index.css +55 -0
  263. package/package.json +42 -0
  264. package/types.d.ts +84 -0
@@ -0,0 +1,2147 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+
8
+ var _withStyles = _interopRequireDefault(require("@mui/styles/withStyles"));
9
+
10
+ var _react = _interopRequireWildcard(require("react"));
11
+
12
+ var _propTypes = _interopRequireDefault(require("prop-types"));
13
+
14
+ var _reactDropzone = _interopRequireDefault(require("react-dropzone"));
15
+
16
+ var _LinearProgress = _interopRequireDefault(require("@mui/material/LinearProgress"));
17
+
18
+ var _CircularProgress = _interopRequireDefault(require("@mui/material/CircularProgress"));
19
+
20
+ var _Toolbar = _interopRequireDefault(require("@mui/material/Toolbar"));
21
+
22
+ var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
23
+
24
+ var _Fab = _interopRequireDefault(require("@mui/material/Fab"));
25
+
26
+ var _Dialog = _interopRequireDefault(require("@mui/material/Dialog"));
27
+
28
+ var _DialogTitle = _interopRequireDefault(require("@mui/material/DialogTitle"));
29
+
30
+ var _DialogContent = _interopRequireDefault(require("@mui/material/DialogContent"));
31
+
32
+ var _DialogContentText = _interopRequireDefault(require("@mui/material/DialogContentText"));
33
+
34
+ var _DialogActions = _interopRequireDefault(require("@mui/material/DialogActions"));
35
+
36
+ var _Button = _interopRequireDefault(require("@mui/material/Button"));
37
+
38
+ var _Input = _interopRequireDefault(require("@mui/material/Input"));
39
+
40
+ var _material = require("@mui/material");
41
+
42
+ var _Error = _interopRequireDefault(require("../Dialogs/Error"));
43
+
44
+ var _Utils = _interopRequireDefault(require("./Utils"));
45
+
46
+ var _TextInput = _interopRequireDefault(require("../Dialogs/TextInput"));
47
+
48
+ var _FileViewer = _interopRequireWildcard(require("./FileViewer"));
49
+
50
+ var _Refresh = _interopRequireDefault(require("@mui/icons-material/Refresh"));
51
+
52
+ var _Close = _interopRequireDefault(require("@mui/icons-material/Close"));
53
+
54
+ var _Bookmark = _interopRequireDefault(require("@mui/icons-material/Bookmark"));
55
+
56
+ var _BookmarkBorder = _interopRequireDefault(require("@mui/icons-material/BookmarkBorder"));
57
+
58
+ var _Description = _interopRequireDefault(require("@mui/icons-material/Description"));
59
+
60
+ var _Edit = _interopRequireDefault(require("@mui/icons-material/Edit"));
61
+
62
+ var _Code = _interopRequireDefault(require("@mui/icons-material/Code"));
63
+
64
+ var _InsertDriveFile = _interopRequireDefault(require("@mui/icons-material/InsertDriveFile"));
65
+
66
+ var _Publish = _interopRequireDefault(require("@mui/icons-material/Publish"));
67
+
68
+ var _MusicNote = _interopRequireDefault(require("@mui/icons-material/MusicNote"));
69
+
70
+ var _SaveAlt = _interopRequireDefault(require("@mui/icons-material/SaveAlt"));
71
+
72
+ var _CreateNewFolder = _interopRequireDefault(require("@mui/icons-material/CreateNewFolder"));
73
+
74
+ var _FolderOpen = _interopRequireDefault(require("@mui/icons-material/FolderOpen"));
75
+
76
+ var _List = _interopRequireDefault(require("@mui/icons-material/List"));
77
+
78
+ var _ViewModule = _interopRequireDefault(require("@mui/icons-material/ViewModule"));
79
+
80
+ var _ArrowBack = _interopRequireDefault(require("@mui/icons-material/ArrowBack"));
81
+
82
+ var _Delete = _interopRequireDefault(require("@mui/icons-material/Delete"));
83
+
84
+ var _Brightness = _interopRequireDefault(require("@mui/icons-material/Brightness6"));
85
+
86
+ var _IconExpert = _interopRequireDefault(require("../icons/IconExpert"));
87
+
88
+ var _no_icon = _interopRequireDefault(require("../assets/no_icon.svg"));
89
+
90
+ var _IconClosed = _interopRequireDefault(require("../icons/IconClosed"));
91
+
92
+ var _IconOpen = _interopRequireDefault(require("../icons/IconOpen"));
93
+
94
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
95
+
96
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
97
+
98
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
99
+
100
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
101
+
102
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
103
+
104
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
105
+
106
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
107
+
108
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
109
+
110
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
111
+
112
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
113
+
114
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
115
+
116
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
117
+
118
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
119
+
120
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
121
+
122
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
123
+
124
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
125
+
126
+ function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
127
+
128
+ function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
129
+
130
+ 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; } }
131
+
132
+ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
133
+
134
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
135
+
136
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
137
+
138
+ // FIXME checkout https://mui.com/components/use-media-query/#migrating-from-withwidth
139
+ var withWidth = function withWidth() {
140
+ return function (WrappedComponent) {
141
+ return function (props) {
142
+ return /*#__PURE__*/_react["default"].createElement(WrappedComponent, _extends({}, props, {
143
+ width: "xs"
144
+ }));
145
+ };
146
+ };
147
+ };
148
+
149
+ var ROW_HEIGHT = 32;
150
+ var BUTTON_WIDTH = 32;
151
+ var TILE_HEIGHT = 120;
152
+ var TILE_WIDTH = 64;
153
+ var NOT_FOUND = 'Not found';
154
+
155
+ var styles = function styles(theme) {
156
+ return {
157
+ dialog: {
158
+ height: "calc(100% - ".concat(theme.mixins.toolbar.minHeight, "px)")
159
+ },
160
+ root: {
161
+ width: '100%',
162
+ overflow: 'hidden',
163
+ height: '100%',
164
+ position: 'relative'
165
+ },
166
+ filesDiv: {
167
+ width: "calc(100% - ".concat(theme.spacing(2), ")"),
168
+ overflowX: 'hidden',
169
+ overflowY: 'auto',
170
+ padding: theme.spacing(1)
171
+ },
172
+ filesDivTable: {
173
+ height: "calc(100% - ".concat(48 + theme.spacing(1), "px)")
174
+ },
175
+ filesDivTile: {
176
+ height: "calc(100% - ".concat(48 * 2 + theme.spacing(1), "px)"),
177
+ display: 'flex',
178
+ alignContent: 'flex-start',
179
+ alignItems: 'stretch',
180
+ flexWrap: 'wrap',
181
+ flex: "0 0 ".concat(TILE_WIDTH, "px")
182
+ },
183
+ itemTile: {
184
+ position: 'relative',
185
+ userSelect: 'none',
186
+ cursor: 'pointer',
187
+ height: TILE_HEIGHT,
188
+ width: TILE_WIDTH,
189
+ display: 'inline-block',
190
+ textAlign: 'center',
191
+ opacity: 0.1,
192
+ transition: 'opacity 1s',
193
+ margin: 4,
194
+ '&:hover': {
195
+ background: theme.palette.secondary.light,
196
+ color: _Utils["default"].invertColor(theme.palette.secondary.main, true)
197
+ }
198
+ },
199
+ itemNameFolderTile: {
200
+ fontWeight: 'bold'
201
+ },
202
+ itemNameTile: {
203
+ width: '100%',
204
+ height: 32,
205
+ overflow: 'hidden',
206
+ textOverflow: 'ellipsis',
207
+ fontSize: 12,
208
+ textAlign: 'center',
209
+ wordBreak: 'break-all'
210
+ },
211
+ itemFolderIconTile: {
212
+ width: '100%',
213
+ height: TILE_HEIGHT - 32 - 16 - 8,
214
+ // name + size
215
+ display: 'block',
216
+ paddingLeft: 8,
217
+ color: theme.palette.secondary.main || '#fbff7d'
218
+ },
219
+ itemFolderIconBack: {
220
+ position: 'absolute',
221
+ top: 22,
222
+ left: 18,
223
+ zIndex: 1,
224
+ color: theme.palette.mode === 'dark' ? '#FFF' : '#000'
225
+ },
226
+ itemSizeTile: {
227
+ width: '100%',
228
+ height: 16,
229
+ textAlign: 'center',
230
+ fontSize: 10
231
+ },
232
+ itemImageTile: {
233
+ width: 'calc(100% - 8px)',
234
+ height: TILE_HEIGHT - 32 - 16 - 8,
235
+ // name + size
236
+ margin: 4,
237
+ display: 'block',
238
+ textAlign: 'center',
239
+ objectFit: 'contain'
240
+ },
241
+ itemIconTile: {
242
+ width: '100%',
243
+ height: TILE_HEIGHT - 32 - 16 - 8,
244
+ // name + size
245
+ display: 'block',
246
+ objectFit: 'contain'
247
+ },
248
+ itemSelected: {
249
+ background: theme.palette.primary.main,
250
+ color: _Utils["default"].invertColor(theme.palette.primary.main, true)
251
+ },
252
+ itemTable: {
253
+ userSelect: 'none',
254
+ cursor: 'pointer',
255
+ height: ROW_HEIGHT,
256
+ display: 'inline-flex',
257
+ lineHeight: ROW_HEIGHT + 'px',
258
+ '&:hover': {
259
+ background: theme.palette.secondary.light,
260
+ color: _Utils["default"].invertColor(theme.palette.secondary.main, true)
261
+ }
262
+ },
263
+ itemNameTable: {
264
+ display: 'inline-block',
265
+ paddingLeft: 10,
266
+ fontSize: '1rem',
267
+ verticalAlign: 'top',
268
+ flexGrow: 1
269
+ },
270
+ itemNameFolderTable: {
271
+ fontWeight: 'bold'
272
+ },
273
+ itemSizeTable: {
274
+ display: 'inline-block',
275
+ width: 60,
276
+ verticalAlign: 'top',
277
+ textAlign: 'right'
278
+ },
279
+ itemAccessTable: {
280
+ // display: 'inline-block',
281
+ verticalAlign: 'top',
282
+ width: 60,
283
+ textAlign: 'right',
284
+ paddingRight: 5,
285
+ display: 'flex',
286
+ justifyContent: 'center'
287
+ },
288
+ itemImageTable: {
289
+ display: 'inline-block',
290
+ width: 30,
291
+ marginTop: 1,
292
+ objectFit: 'contain',
293
+ maxHeight: 30
294
+ },
295
+ itemIconTable: {
296
+ display: 'inline-block',
297
+ marginTop: 1,
298
+ width: 30,
299
+ height: 30
300
+ },
301
+ itemFolderTable: {},
302
+ itemFolderTemp: {
303
+ opacity: 0.4
304
+ },
305
+ itemFolderIconTable: {
306
+ marginTop: 1,
307
+ marginLeft: theme.spacing(1),
308
+ display: 'inline-block',
309
+ width: 30,
310
+ height: 30,
311
+ color: theme.palette.secondary.main || '#fbff7d'
312
+ },
313
+ itemDownloadButtonTable: {
314
+ display: 'inline-block',
315
+ width: BUTTON_WIDTH,
316
+ height: ROW_HEIGHT,
317
+ minWidth: BUTTON_WIDTH,
318
+ verticalAlign: 'top',
319
+ padding: 0,
320
+ '& span': {
321
+ paddingTop: 9
322
+ },
323
+ '& svg': {
324
+ width: 14,
325
+ height: 14,
326
+ fontSize: '1rem'
327
+ }
328
+ },
329
+ itemAclButtonTable: {
330
+ width: BUTTON_WIDTH,
331
+ height: ROW_HEIGHT,
332
+ minWidth: BUTTON_WIDTH,
333
+ verticalAlign: 'top',
334
+ padding: 0,
335
+ fontSize: 12,
336
+ display: 'flex'
337
+ },
338
+ itemDeleteButtonTable: {
339
+ display: 'inline-block',
340
+ width: BUTTON_WIDTH,
341
+ height: ROW_HEIGHT,
342
+ minWidth: BUTTON_WIDTH,
343
+ verticalAlign: 'top',
344
+ padding: 0,
345
+ '& svg': {
346
+ width: 18,
347
+ height: 18,
348
+ fontSize: '1.5rem'
349
+ }
350
+ },
351
+ uploadDiv: {
352
+ top: 0,
353
+ zIndex: 1,
354
+ bottom: 0,
355
+ left: 0,
356
+ right: 0,
357
+ position: 'absolute',
358
+ opacity: 0.9,
359
+ textAlign: 'center',
360
+ background: '#FFFFFF'
361
+ },
362
+ uploadDivDragging: {
363
+ opacity: 1
364
+ },
365
+ uploadCenterDiv: {
366
+ margin: 20,
367
+ border: '3px dashed grey',
368
+ borderRadius: 30,
369
+ width: 'calc(100% - 40px)',
370
+ height: 'calc(100% - 40px)',
371
+ position: 'relative',
372
+ color: theme.palette.mode === 'dark' ? '#222' : '#CCC'
373
+ },
374
+ uploadCenterIcon: {
375
+ width: '25%',
376
+ height: '25%'
377
+ },
378
+ uploadCenterText: {
379
+ fontSize: 24,
380
+ fontWeight: 'bold'
381
+ },
382
+ uploadCloseButton: {
383
+ zIndex: 2,
384
+ position: 'absolute',
385
+ top: 30,
386
+ right: 30
387
+ },
388
+ uploadCenterTextAndIcon: {
389
+ position: 'absolute',
390
+ top: '50%',
391
+ left: '50%',
392
+ height: '30%',
393
+ width: '50%',
394
+ margin: '-15% 0 0 -25%'
395
+ },
396
+ menuButtonExpertActive: {
397
+ color: '#c00000'
398
+ },
399
+ pathDiv: {
400
+ display: 'flex',
401
+ width: "calc(100% - ".concat(theme.spacing(2), ")"),
402
+ marginLeft: theme.spacing(1),
403
+ marginRight: theme.spacing(1),
404
+ textOverflow: 'clip',
405
+ overflow: 'hidden',
406
+ whiteSpace: 'nowrap'
407
+ },
408
+ pathDivInput: {
409
+ width: '100%'
410
+ },
411
+ pathDivBreadcrumb: {
412
+ paddingTop: 3,
413
+ paddingBottom: 2,
414
+ borderBottom: 'solid 1px'
415
+ },
416
+ pathDivBreadcrumbDir: {
417
+ paddingLeft: 4,
418
+ paddingRight: 4,
419
+ paddingBottom: 4,
420
+ cursor: 'pointer',
421
+ '&:hover': {
422
+ background: theme.palette.mode === 'dark' ? '#333' : '#CCC'
423
+ }
424
+ },
425
+ pathDivBreadcrumbSlash: {
426
+ paddingLeft: 4,
427
+ paddingRight: 4,
428
+ paddingBottom: 4,
429
+ opacity: 0.7
430
+ },
431
+ pathDivBreadcrumbFile: {
432
+ cursor: 'pointer',
433
+ flexGrow: 1
434
+ },
435
+ backgroundImageLight: {
436
+ background: 'white'
437
+ },
438
+ backgroundImageDark: {
439
+ background: 'black'
440
+ },
441
+ backgroundImageColored: {
442
+ background: 'silver'
443
+ },
444
+ '@media screen and (max-width: 500px)': {
445
+ itemNameTable: {
446
+ whiteSpace: 'nowrap',
447
+ overflow: 'hidden',
448
+ textOverflow: 'ellipsis',
449
+ textAlign: 'end',
450
+ direction: 'rtl'
451
+ }
452
+ }
453
+ };
454
+ };
455
+
456
+ var USER_DATA = '0_userdata.0';
457
+
458
+ function sortFolders(a, b) {
459
+ if (a.folder && b.folder) {
460
+ return a.name > b.name ? 1 : a.name < b.name ? -1 : 0;
461
+ } else if (a.folder) {
462
+ return -1;
463
+ } else if (b.folder) {
464
+ return 1;
465
+ } else {
466
+ return a.name > b.name ? 1 : a.name < b.name ? -1 : 0;
467
+ }
468
+ }
469
+
470
+ function getParentDir(dir) {
471
+ var parts = (dir || '').split('/');
472
+ parts.length && parts.pop();
473
+ return parts.join('/');
474
+ }
475
+
476
+ function isFile(path) {
477
+ var ext = _Utils["default"].getFileExtension(path);
478
+
479
+ if (ext && ext.toLowerCase().match(/[a-z]+/) && ext.length < 5) {
480
+ return true;
481
+ } else {
482
+ return false;
483
+ }
484
+ }
485
+
486
+ var TABLE = 'Table';
487
+ var TILE = 'Tile';
488
+ /**
489
+ * @extends {React.Component<import('./types').FileBrowserProps>}
490
+ */
491
+
492
+ var FileBrowser = /*#__PURE__*/function (_Component) {
493
+ _inherits(FileBrowser, _Component);
494
+
495
+ var _super = _createSuper(FileBrowser);
496
+
497
+ /**
498
+ * @param {Readonly<import("./types").FileBrowserProps>} props
499
+ */
500
+ function FileBrowser(props) {
501
+ var _this;
502
+
503
+ _classCallCheck(this, FileBrowser);
504
+
505
+ _this = _super.call(this, props);
506
+
507
+ _defineProperty(_assertThisInitialized(_this), "setStateBackgroundImage", function () {
508
+ var array = ['light', 'dark', 'colored', 'delete'];
509
+
510
+ _this.setState(function (_ref) {
511
+ var backgroundImage = _ref.backgroundImage;
512
+
513
+ if (array.indexOf(backgroundImage) !== -1 && array.length - 1 !== array.indexOf(backgroundImage)) {
514
+ window.localStorage.setItem('files.backgroundImage', array[array.indexOf(backgroundImage) + 1]);
515
+ return {
516
+ backgroundImage: array[array.indexOf(backgroundImage) + 1]
517
+ };
518
+ } else {
519
+ window.localStorage.setItem('files.backgroundImage', array[0]);
520
+ return {
521
+ backgroundImage: array[0]
522
+ };
523
+ }
524
+ });
525
+ });
526
+
527
+ _defineProperty(_assertThisInitialized(_this), "getClassBackgroundImage", function () {
528
+ //['light', 'dark', 'colored', 'delete']
529
+ switch (_this.state.backgroundImage) {
530
+ case 'light':
531
+ return _this.props.classes.backgroundImageLight;
532
+
533
+ case 'dark':
534
+ return _this.props.classes.backgroundImageDark;
535
+
536
+ case 'colored':
537
+ return _this.props.classes.backgroundImageColored;
538
+
539
+ case 'delete':
540
+ return null;
541
+
542
+ default:
543
+ return null;
544
+ }
545
+ });
546
+
547
+ var expanded = window.localStorage.getItem('files.expanded') || '[]';
548
+
549
+ try {
550
+ expanded = JSON.parse(expanded);
551
+ } catch (e) {
552
+ expanded = [];
553
+ }
554
+
555
+ var viewType;
556
+
557
+ if (_this.props.showViewTypeButton) {
558
+ viewType = window.localStorage.getItem('files.viewType') || TABLE;
559
+ } else {
560
+ viewType = TABLE;
561
+ }
562
+
563
+ var selected = _this.props.selected || window.localStorage.getItem('files.selected') || USER_DATA;
564
+ var currentDir = '';
565
+
566
+ if (isFile(selected)) {
567
+ currentDir = getParentDir(selected);
568
+ } else {
569
+ currentDir = selected;
570
+ }
571
+
572
+ var _backgroundImage = window.localStorage.getItem('files.backgroundImage') || null;
573
+
574
+ _this.state = {
575
+ viewType: viewType,
576
+ folders: {},
577
+ filterEmpty: window.localStorage.getItem('files.empty') !== 'false',
578
+ expanded: expanded,
579
+ currentDir: currentDir,
580
+ expertMode: _this.props.expertMode,
581
+ addFolder: false,
582
+ uploadFile: false,
583
+ deleteItem: '',
584
+ marked: [],
585
+ viewer: '',
586
+ formatEditFile: '',
587
+ path: selected,
588
+ selected: selected,
589
+ errorText: '',
590
+ modalEditOfAccess: false,
591
+ backgroundImage: _backgroundImage,
592
+ queueLength: 0,
593
+ loadAllFolders: false,
594
+ allFoldersLoaded: false
595
+ };
596
+ _this.imagePrefix = _this.props.imagePrefix || './files/';
597
+ _this.levelPadding = _this.props.levelPadding || 20;
598
+ _this.mounted = true;
599
+ _this.suppressDeleteConfirm = 0;
600
+ _this.browseList = [];
601
+ _this.browseListRunning = false;
602
+ _this.initialReadFinished = false;
603
+ return _this;
604
+ }
605
+
606
+ _createClass(FileBrowser, [{
607
+ key: "loadFolders",
608
+ value: function loadFolders() {
609
+ var _this2 = this;
610
+
611
+ this.initialReadFinished = false;
612
+ return this.browseFolder('/').then(function (folders) {
613
+ return _this2.state.viewType === TABLE ? _this2.browseFolders(_toConsumableArray(_this2.state.expanded), folders) : _this2.state.currentDir && _this2.state.currentDir !== '/' ? _this2.browseFolder(_this2.state.currentDir, folders) : Promise.resolve(folders);
614
+ }).then(function (folders) {
615
+ return _this2.setState({
616
+ folders: folders
617
+ }, function () {
618
+ if (_this2.state.viewType === TABLE && !_this2.findItem(_this2.state.selected)) {
619
+ var parts = _this2.state.selected.split('/');
620
+
621
+ while (parts.length && !_this2.findItem(parts.join('/'))) {
622
+ parts.pop();
623
+ }
624
+
625
+ var selected;
626
+
627
+ if (parts.length) {
628
+ selected = parts.join('/');
629
+ } else {
630
+ selected = USER_DATA;
631
+ }
632
+
633
+ _this2.setState({
634
+ selected: selected,
635
+ path: selected,
636
+ pathFocus: false
637
+ }, function () {
638
+ return _this2.scrollToSelected();
639
+ });
640
+ } else {
641
+ _this2.scrollToSelected();
642
+ }
643
+
644
+ _this2.initialReadFinished = true;
645
+ });
646
+ });
647
+ }
648
+ }, {
649
+ key: "scrollToSelected",
650
+ value: function scrollToSelected() {
651
+ if (this.mounted) {
652
+ var el = document.getElementById(this.state.selected);
653
+ el && el.scrollIntoView();
654
+ }
655
+ }
656
+ }, {
657
+ key: "componentDidMount",
658
+ value: function componentDidMount() {
659
+ this.mounted = true;
660
+ this.loadFolders();
661
+ }
662
+ }, {
663
+ key: "componentWillUnmount",
664
+ value: function componentWillUnmount() {
665
+ this.mounted = false;
666
+ this.browseList = null;
667
+ this.browseListRunning = false;
668
+ }
669
+ }, {
670
+ key: "browseFolders",
671
+ value: function browseFolders(foldersList, _newFolders, _resolve) {
672
+ var _this3 = this;
673
+
674
+ if (!_newFolders) {
675
+ _newFolders = {};
676
+ Object.keys(this.state.folders).forEach(function (folder) {
677
+ return _newFolders[folder] = _this3.state.folders[folder];
678
+ });
679
+ }
680
+
681
+ if (!_resolve) {
682
+ return new Promise(function (resolve) {
683
+ return _this3.browseFolders(foldersList, _newFolders, resolve);
684
+ });
685
+ }
686
+
687
+ if (!foldersList || !foldersList.length) {
688
+ _resolve(_newFolders);
689
+ } else {
690
+ this.browseFolder(foldersList.shift(), _newFolders).then(function () {
691
+ return setTimeout(function () {
692
+ return _this3.browseFolders(foldersList, _newFolders, _resolve);
693
+ }, 0);
694
+ })["catch"](function () {
695
+ return setTimeout(function () {
696
+ return _this3.browseFolders(foldersList, _newFolders, _resolve);
697
+ }, 0);
698
+ });
699
+ }
700
+ }
701
+ }, {
702
+ key: "readDirSerial",
703
+ value: function readDirSerial(adapter, relPath) {
704
+ var _this4 = this;
705
+
706
+ return new Promise(function (resolve, reject) {
707
+ if (_this4.browseList) {
708
+ // if component still mounted
709
+ _this4.browseList.push({
710
+ resolve: resolve,
711
+ reject: reject,
712
+ adapter: adapter,
713
+ relPath: relPath
714
+ });
715
+
716
+ !_this4.browseListRunning && _this4.processBrowseList();
717
+ }
718
+ });
719
+ }
720
+ }, {
721
+ key: "processBrowseList",
722
+ value: function processBrowseList(level) {
723
+ var _this5 = this;
724
+
725
+ if (!this.browseListRunning && this.browseList && this.browseList.length) {
726
+ this.browseListRunning = true;
727
+
728
+ if (this.browseList.length > 10) {
729
+ // not too often
730
+ if (!(this.browseList.length % 10)) {
731
+ this.setState({
732
+ queueLength: this.browseList.length
733
+ });
734
+ }
735
+ } else {
736
+ this.setState({
737
+ queueLength: this.browseList.length
738
+ });
739
+ }
740
+
741
+ this.browseList[0].processing = true;
742
+ this.props.socket.readDir(this.browseList[0].adapter, this.browseList[0].relPath).then(function (files) {
743
+ if (_this5.browseList) {
744
+ // if component still mounted
745
+ var item = _this5.browseList.shift();
746
+
747
+ if (item) {
748
+ var resolve = item.resolve;
749
+ item.resolve = null;
750
+ item.reject = null;
751
+ item.adapter = null;
752
+ item.relPath = null;
753
+ resolve(files);
754
+ _this5.browseListRunning = false;
755
+
756
+ if (_this5.browseList.length) {
757
+ if (level < 5) {
758
+ _this5.processBrowseList(level + 1);
759
+ } else {
760
+ setTimeout(function () {
761
+ return _this5.processBrowseList(0);
762
+ }, 0);
763
+ }
764
+ } else {
765
+ _this5.setState({
766
+ queueLength: 0
767
+ });
768
+ }
769
+ } else {
770
+ _this5.setState({
771
+ queueLength: 0
772
+ });
773
+ }
774
+ }
775
+ })["catch"](function (e) {
776
+ if (_this5.browseList) {
777
+ // if component still mounted
778
+ var item = _this5.browseList.shift();
779
+
780
+ if (item) {
781
+ var reject = item.reject;
782
+ item.resolve = null;
783
+ item.reject = null;
784
+ item.adapter = null;
785
+ item.relPath = null;
786
+ reject(e);
787
+ _this5.browseListRunning = false;
788
+
789
+ if (_this5.browseList.length) {
790
+ if (level < 5) {
791
+ _this5.processBrowseList(level + 1);
792
+ } else {
793
+ setTimeout(function () {
794
+ return _this5.processBrowseList(0);
795
+ }, 0);
796
+ }
797
+ } else {
798
+ _this5.setState({
799
+ queueLength: 0
800
+ });
801
+ }
802
+ } else {
803
+ _this5.setState({
804
+ queueLength: 0
805
+ });
806
+ }
807
+ }
808
+ });
809
+ }
810
+ }
811
+ }, {
812
+ key: "browseFolder",
813
+ value: function browseFolder(folderId, _newFolders, _checkEmpty) {
814
+ var _this6 = this;
815
+
816
+ if (!_newFolders) {
817
+ _newFolders = {};
818
+ Object.keys(this.state.folders).forEach(function (folder) {
819
+ return _newFolders[folder] = _this6.state.folders[folder];
820
+ });
821
+ }
822
+
823
+ if (_newFolders[folderId]) {
824
+ if (!_checkEmpty) {
825
+ return new Promise(function (resolve, reject) {
826
+ return Promise.all(_newFolders[folderId].filter(function (item) {
827
+ return item.folder;
828
+ }).map(function (item) {
829
+ return _this6.browseFolder(item.id, _newFolders, true)["catch"](function (error) {});
830
+ })).then(function () {
831
+ return resolve(_newFolders);
832
+ })["catch"](function (error) {
833
+ return reject(error);
834
+ });
835
+ });
836
+ } else {
837
+ return Promise.resolve(_newFolders);
838
+ }
839
+ }
840
+
841
+ if (!folderId || folderId === '/') {
842
+ return this.props.socket.readMetaItems().then(function (objs) {
843
+ var _folders = [];
844
+ var userData = null; // load only adapter.admin and not other meta files like hm-rpc.0.devices.blablabla
845
+
846
+ objs = objs.filter(function (obj) {
847
+ if (!_this6.state.expertMode) {
848
+ return obj._id === '0_userdata.0' || obj._id === 'vis.0';
849
+ } else {
850
+ return obj._id.split('.').length <= 2;
851
+ }
852
+ }); // remember, that all folders are loaded
853
+
854
+ if (_this6.state.expertMode) {
855
+ _this6.setState({
856
+ allFoldersLoaded: true,
857
+ loadFolders: false
858
+ });
859
+ }
860
+
861
+ objs.forEach(function (obj) {
862
+ var item = {
863
+ id: obj._id,
864
+ name: obj._id,
865
+ title: obj.common && obj.common.name || obj._id,
866
+ meta: true,
867
+ from: obj.from,
868
+ ts: obj.ts,
869
+ color: obj.common && obj.common.color,
870
+ icon: obj.common && obj.common.icon,
871
+ folder: true,
872
+ acl: obj.acl,
873
+ level: 0
874
+ };
875
+
876
+ if (item.id === USER_DATA) {
877
+ // user data must be first
878
+ userData = item;
879
+ } else {
880
+ _folders.push(item);
881
+ }
882
+ });
883
+
884
+ _folders.sort(function (a, b) {
885
+ return a.id > b.id ? 1 : a.id < b.id ? -1 : 0;
886
+ });
887
+
888
+ _folders.unshift(userData);
889
+
890
+ _newFolders[folderId || '/'] = _folders;
891
+
892
+ if (!_checkEmpty) {
893
+ return Promise.all(_folders.filter(function (item) {
894
+ return item.folder;
895
+ }).map(function (item) {
896
+ return _this6.browseFolder(item.id, _newFolders, true)["catch"](function (error) {});
897
+ })).then(function () {
898
+ return _newFolders;
899
+ });
900
+ } else {
901
+ return _newFolders;
902
+ }
903
+ })["catch"](function (e) {
904
+ return _this6.initialReadFinished && window.alert('Cannot read meta items: ' + e);
905
+ });
906
+ } else {
907
+ var parts = folderId.split('/');
908
+ var level = parts.length;
909
+ var adapter = parts.shift();
910
+ var relPath = parts.join('/'); // make all requests here serial
911
+
912
+ return this.readDirSerial(adapter, relPath).then(function (files) {
913
+ var _folders = [];
914
+ files.forEach(function (file) {
915
+ var item = {
916
+ id: folderId + '/' + file.file,
917
+ ext: _Utils["default"].getFileExtension(file.file),
918
+ folder: file.isDir,
919
+ name: file.file,
920
+ size: file.stats && file.stats.size,
921
+ modified: file.modifiedAt,
922
+ acl: file.acl,
923
+ level: level
924
+ };
925
+
926
+ _folders.push(item);
927
+ });
928
+
929
+ _folders.sort(sortFolders);
930
+
931
+ _newFolders[folderId] = _folders;
932
+
933
+ if (!_checkEmpty) {
934
+ return Promise.all(_folders.filter(function (item) {
935
+ return item.folder;
936
+ }).map(function (item) {
937
+ return _this6.browseFolder(item.id, _newFolders, true);
938
+ })).then(function () {
939
+ return _newFolders;
940
+ });
941
+ } else {
942
+ return _newFolders;
943
+ }
944
+ })["catch"](function (e) {
945
+ _this6.initialReadFinished && window.alert("Cannot read ".concat(adapter).concat(relPath ? '/' + relPath : '', ": ").concat(e));
946
+ _newFolders[folderId] = [];
947
+ return _newFolders;
948
+ });
949
+ }
950
+ }
951
+ }, {
952
+ key: "toggleFolder",
953
+ value: function toggleFolder(item, e) {
954
+ var _this7 = this;
955
+
956
+ e && e.stopPropagation();
957
+
958
+ var expanded = _toConsumableArray(this.state.expanded);
959
+
960
+ var pos = expanded.indexOf(item.id);
961
+
962
+ if (pos === -1) {
963
+ expanded.push(item.id);
964
+ expanded.sort();
965
+ window.localStorage.setItem('files.expanded', JSON.stringify(expanded));
966
+
967
+ if (!item.temp) {
968
+ return this.browseFolder(item.id).then(function (folders) {
969
+ return _this7.setState({
970
+ expanded: expanded,
971
+ folders: folders
972
+ });
973
+ })["catch"](function (err) {
974
+ return window.alert(err === NOT_FOUND ? _this7.props.t('re_Cannot find "%s"', item.id) : _this7.props.t('re_Cannot read "%s"', item.id));
975
+ });
976
+ } else {
977
+ this.setState({
978
+ expanded: expanded
979
+ });
980
+ }
981
+ } else {
982
+ expanded.splice(pos, 1);
983
+ window.localStorage.setItem('files.expanded', JSON.stringify(expanded));
984
+ this.setState({
985
+ expanded: expanded
986
+ });
987
+ }
988
+ }
989
+ }, {
990
+ key: "changeFolder",
991
+ value: function changeFolder(e, folder) {
992
+ var _this8 = this;
993
+
994
+ e && e.stopPropagation();
995
+ this.lastSelect = Date.now();
996
+ folder = folder || getParentDir(this.state.currentDir);
997
+
998
+ if (folder === '/') {
999
+ folder = '';
1000
+ }
1001
+
1002
+ window.localStorage.setItem('files.currentDir', folder);
1003
+
1004
+ if (folder && !this.state.folders[folder]) {
1005
+ return this.browseFolder(folder).then(function (folders) {
1006
+ return _this8.setState({
1007
+ folders: folders,
1008
+ path: folder,
1009
+ currentDir: folder,
1010
+ selected: folder,
1011
+ pathFocus: false
1012
+ }, function () {
1013
+ return _this8.props.onSelect && _this8.props.onSelect('');
1014
+ });
1015
+ });
1016
+ } else {
1017
+ this.setState({
1018
+ currentDir: folder,
1019
+ selected: folder,
1020
+ path: folder,
1021
+ pathFocus: false
1022
+ }, function () {
1023
+ return _this8.props.onSelect && _this8.props.onSelect('');
1024
+ });
1025
+ }
1026
+ }
1027
+ }, {
1028
+ key: "select",
1029
+ value: function select(id, e, cb) {
1030
+ var _this9 = this;
1031
+
1032
+ if (typeof e === 'function') {
1033
+ cb = e;
1034
+ e = null;
1035
+ }
1036
+
1037
+ e && e.stopPropagation();
1038
+ this.lastSelect = Date.now();
1039
+ window.localStorage.setItem('files.selected', id);
1040
+ this.setState({
1041
+ selected: id,
1042
+ path: id,
1043
+ pathFocus: false
1044
+ }, function () {
1045
+ if (_this9.props.onSelect) {
1046
+ var ext = _Utils["default"].getFileExtension(id);
1047
+
1048
+ if ((!_this9.props.filterFiles || _this9.props.filterFiles.includes(ext)) && (!_this9.props.filterByType || _FileViewer.EXTENSIONS[_this9.props.filterByType].includes(ext))) {
1049
+ _this9.props.onSelect(id);
1050
+ } else {
1051
+ _this9.props.onSelect('');
1052
+ }
1053
+ }
1054
+
1055
+ cb && cb();
1056
+ });
1057
+ }
1058
+ }, {
1059
+ key: "renderFolder",
1060
+ value: function renderFolder(item, expanded) {
1061
+ var _this10 = this;
1062
+
1063
+ if (this.state.filterEmpty && (!this.state.folders[item.id] || !this.state.folders[item.id].length) && item.id !== USER_DATA && !item.temp) {
1064
+ return null;
1065
+ }
1066
+
1067
+ var Icon = expanded ? _IconOpen["default"] : _IconClosed["default"];
1068
+ var padding = this.state.viewType === TABLE ? item.level * this.levelPadding : 0;
1069
+ return /*#__PURE__*/_react["default"].createElement("div", {
1070
+ key: item.id,
1071
+ id: item.id,
1072
+ style: this.state.viewType === TABLE ? {
1073
+ marginLeft: padding,
1074
+ width: 'calc(100% - ' + padding + 'px'
1075
+ } : {},
1076
+ onClick: function onClick(e) {
1077
+ return _this10.state.viewType === TABLE ? _this10.select(item.id, e) : _this10.changeFolder(e, item.id);
1078
+ },
1079
+ onDoubleClick: function onDoubleClick(e) {
1080
+ return _this10.state.viewType === TABLE && _this10.toggleFolder(item, e);
1081
+ },
1082
+ title: item.title && _typeof(item.title) === 'object' ? item.title[this.props.lang] || item.title.end || '' : item.title || null,
1083
+ 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'])
1084
+ }, /*#__PURE__*/_react["default"].createElement(Icon, {
1085
+ className: this.props.classes['itemFolderIcon' + this.state.viewType],
1086
+ onClick: this.state.viewType === TABLE ? function (e) {
1087
+ return _this10.toggleFolder(item, e);
1088
+ } : undefined
1089
+ }), /*#__PURE__*/_react["default"].createElement("div", {
1090
+ className: _Utils["default"].clsx(this.props.classes['itemName' + this.state.viewType], this.props.classes['itemNameFolder' + this.state.viewType])
1091
+ }, item.name === USER_DATA ? this.props.t('ra_User files') : item.name), /*#__PURE__*/_react["default"].createElement(_material.Hidden, {
1092
+ smDown: true
1093
+ }, /*#__PURE__*/_react["default"].createElement("div", {
1094
+ className: this.props.classes['itemSize' + this.state.viewType]
1095
+ }, this.state.viewType === TABLE && this.state.folders[item.id] ? this.state.folders[item.id].length : '')), /*#__PURE__*/_react["default"].createElement(_material.Hidden, {
1096
+ smDown: true
1097
+ }, this.state.viewType === TABLE ? this.formatAcl(item.acl) : null), /*#__PURE__*/_react["default"].createElement(_material.Hidden, {
1098
+ smDown: true
1099
+ }, this.state.viewType === TABLE && this.props.expertMode && /*#__PURE__*/_react["default"].createElement("div", {
1100
+ className: this.props.classes['itemDeleteButton' + this.state.viewType]
1101
+ })), this.state.viewType === TABLE && this.props.allowDownload ? /*#__PURE__*/_react["default"].createElement("div", {
1102
+ className: this.props.classes['itemDownloadButton' + this.state.viewType]
1103
+ }) : 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"], {
1104
+ "aria-label": "delete",
1105
+ onClick: function onClick(e) {
1106
+ e.stopPropagation();
1107
+
1108
+ if (_this10.suppressDeleteConfirm > Date.now()) {
1109
+ _this10.deleteItem(item.id);
1110
+ } else {
1111
+ _this10.setState({
1112
+ deleteItem: item.id
1113
+ });
1114
+ }
1115
+ },
1116
+ className: this.props.classes['itemDeleteButton' + this.state.viewType],
1117
+ size: "large"
1118
+ }, /*#__PURE__*/_react["default"].createElement(_Delete["default"], {
1119
+ fontSize: "small"
1120
+ })) : this.state.viewType === TABLE && this.props.allowDelete ? /*#__PURE__*/_react["default"].createElement("div", {
1121
+ className: this.props.classes['itemDeleteButton' + this.state.viewType]
1122
+ }) : null);
1123
+ }
1124
+ }, {
1125
+ key: "renderBackFolder",
1126
+ value: function renderBackFolder() {
1127
+ var _this11 = this;
1128
+
1129
+ return /*#__PURE__*/_react["default"].createElement("div", {
1130
+ key: this.state.currentDir,
1131
+ id: this.state.currentDir,
1132
+ onClick: function onClick(e) {
1133
+ return _this11.changeFolder(e);
1134
+ },
1135
+ title: this.props.t('re_Back to %s', getParentDir(this.state.currentDir)),
1136
+ className: _Utils["default"].clsx('browserItem', this.props.classes['item' + this.state.viewType], this.props.classes['itemFolder' + this.state.viewType])
1137
+ }, /*#__PURE__*/_react["default"].createElement(_IconClosed["default"], {
1138
+ className: this.props.classes['itemFolderIcon' + this.state.viewType]
1139
+ }), /*#__PURE__*/_react["default"].createElement(_ArrowBack["default"], {
1140
+ className: this.props.classes.itemFolderIconBack
1141
+ }), /*#__PURE__*/_react["default"].createElement("div", {
1142
+ className: _Utils["default"].clsx(this.props.classes['itemName' + this.state.viewType], this.props.classes['itemNameFolder' + this.state.viewType])
1143
+ }, ".."));
1144
+ }
1145
+ }, {
1146
+ key: "formatSize",
1147
+ value: function formatSize(size) {
1148
+ return /*#__PURE__*/_react["default"].createElement("div", {
1149
+ className: this.props.classes['itemSize' + this.state.viewType]
1150
+ }, size || size === 0 ? _Utils["default"].formatBytes(size) : '');
1151
+ }
1152
+ }, {
1153
+ key: "formatAcl",
1154
+ value: function formatAcl(acl) {
1155
+ var _this12 = this;
1156
+
1157
+ var access = acl && (acl.permissions || acl.file);
1158
+
1159
+ if (access) {
1160
+ access = access.toString(16).padStart(3, '0');
1161
+ }
1162
+
1163
+ return /*#__PURE__*/_react["default"].createElement("div", {
1164
+ className: this.props.classes['itemAccess' + this.state.viewType]
1165
+ }, " ", /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
1166
+ onClick: function onClick() {
1167
+ return _this12.setState({
1168
+ modalEditOfAccess: true
1169
+ });
1170
+ },
1171
+ className: this.props.classes['itemAclButton' + this.state.viewType],
1172
+ size: "large"
1173
+ }, access || '---'));
1174
+ }
1175
+ }, {
1176
+ key: "getFileIcon",
1177
+ value: function getFileIcon(ext) {
1178
+ switch (ext) {
1179
+ case 'json':
1180
+ return /*#__PURE__*/_react["default"].createElement(_Bookmark["default"], {
1181
+ className: this.props.classes['itemIcon' + this.state.viewType]
1182
+ });
1183
+
1184
+ case 'css':
1185
+ return /*#__PURE__*/_react["default"].createElement(_BookmarkBorder["default"], {
1186
+ className: this.props.classes['itemIcon' + this.state.viewType]
1187
+ });
1188
+
1189
+ case 'js':
1190
+ case 'ts':
1191
+ return /*#__PURE__*/_react["default"].createElement(_Code["default"], {
1192
+ className: this.props.classes['itemIcon' + this.state.viewType]
1193
+ });
1194
+
1195
+ case 'html':
1196
+ case 'md':
1197
+ return /*#__PURE__*/_react["default"].createElement(_Description["default"], {
1198
+ className: this.props.classes['itemIcon' + this.state.viewType]
1199
+ });
1200
+
1201
+ case 'mp3':
1202
+ case 'ogg':
1203
+ case 'wav':
1204
+ case 'm4a':
1205
+ case 'mp4':
1206
+ case 'flac':
1207
+ return /*#__PURE__*/_react["default"].createElement(_MusicNote["default"], {
1208
+ className: this.props.classes['itemIcon' + this.state.viewType]
1209
+ });
1210
+
1211
+ default:
1212
+ return /*#__PURE__*/_react["default"].createElement(_InsertDriveFile["default"], {
1213
+ className: this.props.classes['itemIcon' + this.state.viewType]
1214
+ });
1215
+ }
1216
+ }
1217
+ }, {
1218
+ key: "getEditFile",
1219
+ value: function getEditFile(ext) {
1220
+ switch (ext) {
1221
+ case 'json':
1222
+ case 'js':
1223
+ case 'html':
1224
+ case 'txt':
1225
+ return true;
1226
+
1227
+ default:
1228
+ return false;
1229
+ }
1230
+ }
1231
+ }, {
1232
+ key: "renderFile",
1233
+ value: function renderFile(item) {
1234
+ var _this13 = this;
1235
+
1236
+ var padding = this.state.viewType === TABLE ? item.level * this.levelPadding : 0;
1237
+
1238
+ var ext = _Utils["default"].getFileExtension(item.name);
1239
+
1240
+ return /*#__PURE__*/_react["default"].createElement("div", {
1241
+ key: item.id,
1242
+ id: item.id,
1243
+ onDoubleClick: function onDoubleClick() {
1244
+ if (!_this13.props.onSelect) {
1245
+ _this13.setState({
1246
+ viewer: _this13.imagePrefix + item.id
1247
+ });
1248
+ } else if ((!_this13.props.filterFiles || _this13.props.filterFiles.includes(item.ext)) && (!_this13.props.filterByType || _FileViewer.EXTENSIONS[_this13.props.filterByType].includes(item.ext))) {
1249
+ _this13.props.onSelect(item.id, true);
1250
+ }
1251
+ },
1252
+ onClick: function onClick(e) {
1253
+ return _this13.select(item.id, e);
1254
+ },
1255
+ style: this.state.viewType === TABLE ? {
1256
+ marginLeft: padding,
1257
+ width: 'calc(100% - ' + padding + 'px)'
1258
+ } : {},
1259
+ 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)
1260
+ }, _FileViewer.EXTENSIONS.images.includes(ext) ? /*#__PURE__*/_react["default"].createElement("img", {
1261
+ onError: function onError(e) {
1262
+ e.target.onerror = null;
1263
+ e.target.src = _no_icon["default"];
1264
+ },
1265
+ className: _Utils["default"].clsx(this.props.classes['itemImage' + this.state.viewType], this.getClassBackgroundImage()),
1266
+ src: this.imagePrefix + item.id,
1267
+ alt: item.name
1268
+ }) : this.getFileIcon(ext), /*#__PURE__*/_react["default"].createElement("div", {
1269
+ className: this.props.classes['itemName' + this.state.viewType]
1270
+ }, item.name), /*#__PURE__*/_react["default"].createElement(_material.Hidden, {
1271
+ smDown: true
1272
+ }, this.formatSize(item.size)), /*#__PURE__*/_react["default"].createElement(_material.Hidden, {
1273
+ smDown: true
1274
+ }, this.state.viewType === TABLE ? this.formatAcl(item.acl) : null), /*#__PURE__*/_react["default"].createElement(_material.Hidden, {
1275
+ smDown: true
1276
+ }, this.state.viewType === TABLE && this.props.expertMode && this.getEditFile(ext) ? /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
1277
+ "aria-label": "delete",
1278
+ onClick: function onClick(e) {
1279
+ e.stopPropagation();
1280
+
1281
+ if (!_this13.props.onSelect) {
1282
+ _this13.setState({
1283
+ viewer: _this13.imagePrefix + item.id,
1284
+ formatEditFile: ext
1285
+ });
1286
+ } else if ((!_this13.props.filterFiles || _this13.props.filterFiles.includes(item.ext)) && (!_this13.props.filterByType || _FileViewer.EXTENSIONS[_this13.props.filterByType].includes(item.ext))) {
1287
+ _this13.props.onSelect(item.id, true);
1288
+ }
1289
+ },
1290
+ className: this.props.classes['itemDeleteButton' + this.state.viewType],
1291
+ size: "large"
1292
+ }, /*#__PURE__*/_react["default"].createElement(_Edit["default"], {
1293
+ fontSize: "small"
1294
+ })) : /*#__PURE__*/_react["default"].createElement("div", {
1295
+ className: this.props.classes['itemDeleteButton' + this.state.viewType]
1296
+ })), this.state.viewType === TABLE && this.props.allowDownload ? /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
1297
+ download: true,
1298
+ href: this.imagePrefix + item.id,
1299
+ className: this.props.classes['itemDownloadButton' + this.state.viewType],
1300
+ onClick: function onClick(e) {
1301
+ return e.stopPropagation();
1302
+ },
1303
+ size: "large"
1304
+ }, /*#__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"], {
1305
+ "aria-label": "delete",
1306
+ onClick: function onClick(e) {
1307
+ e.stopPropagation();
1308
+
1309
+ if (_this13.suppressDeleteConfirm > Date.now()) {
1310
+ _this13.deleteItem(item.id);
1311
+ } else {
1312
+ _this13.setState({
1313
+ deleteItem: item.id
1314
+ });
1315
+ }
1316
+ },
1317
+ className: this.props.classes['itemDeleteButton' + this.state.viewType],
1318
+ size: "large"
1319
+ }, /*#__PURE__*/_react["default"].createElement(_Delete["default"], {
1320
+ fontSize: "small"
1321
+ })) : this.state.viewType === TABLE && this.props.allowDelete ? /*#__PURE__*/_react["default"].createElement("div", {
1322
+ className: this.props.classes['itemDeleteButton' + this.state.viewType]
1323
+ }) : null);
1324
+ }
1325
+ }, {
1326
+ key: "renderItems",
1327
+ value: function renderItems(folderId) {
1328
+ var _this14 = this;
1329
+
1330
+ if (folderId && folderId !== '/' && !this.state.expertMode && folderId !== USER_DATA && !folderId.startsWith(USER_DATA) && folderId !== 'vis.0' && !folderId.startsWith('vis.0/')) {
1331
+ return null;
1332
+ } // tile
1333
+
1334
+
1335
+ if (this.state.folders && this.state.folders[folderId]) {
1336
+ if (this.state.viewType === TILE) {
1337
+ var res = [];
1338
+
1339
+ if (folderId && folderId !== '/') {
1340
+ res.push(this.renderBackFolder());
1341
+ }
1342
+
1343
+ this.state.folders[folderId].forEach(function (item) {
1344
+ if (!_this14.state.expertMode && item.id !== USER_DATA && !item.id.startsWith(USER_DATA) && item.id !== 'vis.0' && !item.id.startsWith('vis.0/')) {
1345
+ return;
1346
+ }
1347
+
1348
+ if (item.folder) {
1349
+ res.push(_this14.renderFolder(item));
1350
+ } else if ((!_this14.props.filterFiles || _this14.props.filterFiles.includes(item.ext)) && (!_this14.props.filterByType || _FileViewer.EXTENSIONS[_this14.props.filterByType].includes(item.ext))) {
1351
+ res.push(_this14.renderFile(item));
1352
+ }
1353
+ });
1354
+ return res;
1355
+ } else {
1356
+ return this.state.folders[folderId].map(function (item) {
1357
+ var res = [];
1358
+
1359
+ if (item.id && item.id !== '/' && !_this14.state.expertMode && item.id !== USER_DATA && !item.id.startsWith(USER_DATA) && item.id !== 'vis.0' && !item.id.startsWith('vis.0/')) {
1360
+ return null;
1361
+ }
1362
+
1363
+ if (item.folder) {
1364
+ var expanded = _this14.state.expanded.includes(item.id);
1365
+
1366
+ res.push(_this14.renderFolder(item, expanded));
1367
+
1368
+ if (_this14.state.folders[item.id] && expanded) {
1369
+ res.push(_this14.renderItems(item.id));
1370
+ }
1371
+ } else if ((!_this14.props.filterFiles || _this14.props.filterFiles.includes(item.ext)) && (!_this14.props.filterByType || _FileViewer.EXTENSIONS[_this14.props.filterByType].includes(item.ext))) {
1372
+ res.push(_this14.renderFile(item));
1373
+ } else {
1374
+ return null;
1375
+ }
1376
+
1377
+ return res;
1378
+ });
1379
+ }
1380
+ } else {
1381
+ return /*#__PURE__*/_react["default"].createElement("div", {
1382
+ style: {
1383
+ position: 'relative'
1384
+ }
1385
+ }, /*#__PURE__*/_react["default"].createElement(_CircularProgress["default"], {
1386
+ key: folderId,
1387
+ color: "secondary",
1388
+ size: 24
1389
+ }), /*#__PURE__*/_react["default"].createElement("div", {
1390
+ style: {
1391
+ position: 'absolute',
1392
+ zIndex: 2,
1393
+ top: 4,
1394
+ width: 24,
1395
+ textAlign: 'center'
1396
+ }
1397
+ }, this.state.queueLength));
1398
+ }
1399
+ }
1400
+ }, {
1401
+ key: "renderToolbar",
1402
+ value: function renderToolbar() {
1403
+ var _this15 = this;
1404
+
1405
+ return /*#__PURE__*/_react["default"].createElement(_Toolbar["default"], {
1406
+ key: "toolbar",
1407
+ variant: "dense"
1408
+ }, this.props.showExpertButton ? /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
1409
+ edge: "start",
1410
+ title: this.props.t('ra_Toggle expert mode'),
1411
+ className: _Utils["default"].clsx(this.props.classes.menuButton, this.state.expertMode && this.props.classes.menuButtonExpertActive),
1412
+ "aria-label": "expert mode",
1413
+ onClick: function onClick() {
1414
+ return _this15.setState({
1415
+ expertMode: !_this15.state.expertMode
1416
+ });
1417
+ },
1418
+ size: "large"
1419
+ }, /*#__PURE__*/_react["default"].createElement(_IconExpert["default"], null)) : null, this.props.showViewTypeButton ? /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
1420
+ edge: "start",
1421
+ title: this.props.t('ra_Toggle view mode'),
1422
+ className: this.props.classes.menuButton,
1423
+ "aria-label": "view mode",
1424
+ onClick: function onClick() {
1425
+ var viewType = _this15.state.viewType === TABLE ? TILE : TABLE;
1426
+ window.localStorage.setItem('files.viewType', viewType);
1427
+ var currentDir = _this15.state.selected;
1428
+
1429
+ if (isFile(currentDir)) {
1430
+ currentDir = getParentDir(currentDir);
1431
+ }
1432
+
1433
+ _this15.setState({
1434
+ viewType: viewType,
1435
+ currentDir: currentDir
1436
+ }, function () {
1437
+ if (_this15.state.viewType === TABLE) {
1438
+ _this15.scrollToSelected();
1439
+ }
1440
+ });
1441
+ },
1442
+ size: "large"
1443
+ }, 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"], {
1444
+ edge: "start",
1445
+ title: this.props.t('ra_Hide empty folders'),
1446
+ className: this.props.classes.menuButton,
1447
+ color: this.state.filterEmpty ? 'secondary' : 'inherit',
1448
+ "aria-label": "filter empty",
1449
+ onClick: function onClick() {
1450
+ window.localStorage.setItem('file.empty', !_this15.state.filterEmpty);
1451
+
1452
+ _this15.setState({
1453
+ filterEmpty: !_this15.state.filterEmpty
1454
+ });
1455
+ },
1456
+ size: "large"
1457
+ }, /*#__PURE__*/_react["default"].createElement(_FolderOpen["default"], null)), /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
1458
+ edge: "start",
1459
+ title: this.props.t('ra_Reload files'),
1460
+ className: this.props.classes.menuButton,
1461
+ color: 'inherit',
1462
+ "aria-label": "reload files",
1463
+ onClick: function onClick() {
1464
+ return _this15.setState({
1465
+ folders: {}
1466
+ }, function () {
1467
+ return _this15.loadFolders();
1468
+ });
1469
+ },
1470
+ size: "large"
1471
+ }, /*#__PURE__*/_react["default"].createElement(_Refresh["default"], null)), this.props.allowCreateFolder ? /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
1472
+ edge: "start",
1473
+ disabled: this.state.expertMode ? !this.state.selected : !this.state.selected.startsWith('vis.0') && !this.state.selected.startsWith(USER_DATA),
1474
+ title: this.props.t('ra_Create folder'),
1475
+ className: this.props.classes.menuButton,
1476
+ color: 'inherit',
1477
+ "aria-label": "add folder",
1478
+ onClick: function onClick() {
1479
+ return _this15.setState({
1480
+ addFolder: true
1481
+ });
1482
+ },
1483
+ size: "large"
1484
+ }, /*#__PURE__*/_react["default"].createElement(_CreateNewFolder["default"], null)) : null, this.props.allowUpload ? /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
1485
+ edge: "start",
1486
+ disabled: this.state.expertMode ? !this.state.selected : !this.state.selected.startsWith('vis.0') && !this.state.selected.startsWith(USER_DATA),
1487
+ title: this.props.t('ra_Upload file'),
1488
+ className: this.props.classes.menuButton,
1489
+ color: 'inherit',
1490
+ "aria-label": "upload file",
1491
+ onClick: function onClick() {
1492
+ return _this15.setState({
1493
+ uploadFile: true
1494
+ });
1495
+ },
1496
+ size: "large"
1497
+ }, /*#__PURE__*/_react["default"].createElement(_Publish["default"], null)) : null, /*#__PURE__*/_react["default"].createElement(_material.Tooltip, {
1498
+ title: this.props.t('Background image')
1499
+ }, /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
1500
+ color: 'inherit',
1501
+ edge: "start",
1502
+ className: this.props.classes.menuButton,
1503
+ onClick: this.setStateBackgroundImage,
1504
+ size: "large"
1505
+ }, /*#__PURE__*/_react["default"].createElement(_Brightness["default"], null))));
1506
+ }
1507
+ }, {
1508
+ key: "findItem",
1509
+ value: function findItem(id, folders) {
1510
+ folders = folders || this.state.folders;
1511
+
1512
+ if (!folders) {
1513
+ return null;
1514
+ }
1515
+
1516
+ var parts = id.split('/');
1517
+ parts.pop();
1518
+ var parentFolder = parts.join('/') || '/';
1519
+
1520
+ if (!folders[parentFolder]) {
1521
+ return null;
1522
+ }
1523
+
1524
+ return folders[parentFolder].find(function (item) {
1525
+ return item.id === id;
1526
+ });
1527
+ }
1528
+ }, {
1529
+ key: "renderInputDialog",
1530
+ value: function renderInputDialog() {
1531
+ var _this16 = this;
1532
+
1533
+ if (this.state.addFolder) {
1534
+ var parentFolder = this.findFirstFolder(this.state.selected);
1535
+
1536
+ if (!parentFolder) {
1537
+ return window.alert(this.props.t('ra_Invalid parent folder!'));
1538
+ }
1539
+
1540
+ return /*#__PURE__*/_react["default"].createElement(_TextInput["default"], {
1541
+ key: "inputDialog",
1542
+ applyText: this.props.t('ra_Create'),
1543
+ cancelText: this.props.t('ra_Cancel'),
1544
+ titleText: this.props.t('ra_Create new folder in %s', this.state.selected),
1545
+ promptText: this.props.t('ra_If no file will be created in the folder, it will disappear after the browser closed'),
1546
+ labelText: this.props.t('ra_Folder name'),
1547
+ verify: function verify(text) {
1548
+ return _this16.state.folders[parentFolder].find(function (item) {
1549
+ return item.name === text;
1550
+ }) ? '' : _this16.props.t('ra_Duplicate name');
1551
+ },
1552
+ onClose: function onClose(name) {
1553
+ if (name) {
1554
+ var folders = {};
1555
+ Object.keys(_this16.state.folders).forEach(function (folder) {
1556
+ return folders[folder] = _this16.state.folders[folder];
1557
+ });
1558
+
1559
+ var parent = _this16.findItem(parentFolder);
1560
+
1561
+ var id = parentFolder + '/' + name;
1562
+ folders[parentFolder].push({
1563
+ id: id,
1564
+ level: parent.level + 1,
1565
+ name: name,
1566
+ folder: true,
1567
+ temp: true
1568
+ });
1569
+ folders[parentFolder].sort(sortFolders);
1570
+ folders[id] = [];
1571
+
1572
+ var expanded = _toConsumableArray(_this16.state.expanded);
1573
+
1574
+ if (!expanded.includes(parentFolder)) {
1575
+ expanded.push(parentFolder);
1576
+ expanded.sort();
1577
+ }
1578
+
1579
+ window.localStorage.setItem('files.expanded', JSON.stringify(expanded));
1580
+
1581
+ _this16.setState({
1582
+ addFolder: false,
1583
+ folders: folders,
1584
+ expanded: expanded
1585
+ }, function () {
1586
+ return _this16.select(id);
1587
+ });
1588
+ } else {
1589
+ _this16.setState({
1590
+ addFolder: false
1591
+ });
1592
+ }
1593
+ },
1594
+ replace: function replace(text) {
1595
+ return text.replace(/[^-_\w\d]/, '_');
1596
+ }
1597
+ });
1598
+ } else {
1599
+ return null;
1600
+ }
1601
+ }
1602
+ }, {
1603
+ key: "componentDidUpdate",
1604
+ value: function componentDidUpdate(prevProps, prevState, snapshot) {
1605
+ var _this17 = this;
1606
+
1607
+ this.setOpacityTimer && clearTimeout(this.setOpacityTimer);
1608
+ this.setOpacityTimer = setTimeout(function () {
1609
+ _this17.setOpacityTimer = null;
1610
+ var items = window.document.getElementsByClassName('browserItem');
1611
+
1612
+ for (var i = 0; i < items.length; i++) {
1613
+ items[i].style.opacity = 1;
1614
+ }
1615
+ }, 100);
1616
+ }
1617
+ }, {
1618
+ key: "uploadFile",
1619
+ value: function uploadFile(fileName, data) {
1620
+ var parts = fileName.split('/');
1621
+ var adapter = parts.shift();
1622
+ return this.props.socket.writeFile64(adapter, parts.join('/'), data)["catch"](function (e) {
1623
+ return window.alert('Cannot write file: ' + e);
1624
+ });
1625
+ }
1626
+ }, {
1627
+ key: "findFirstFolder",
1628
+ value: function findFirstFolder(id) {
1629
+ var parentFolder = id;
1630
+ var item = this.findItem(parentFolder); // find folder
1631
+
1632
+ if (item && !item.folder) {
1633
+ var parts = parentFolder.split('/');
1634
+ parts.pop();
1635
+ parentFolder = '';
1636
+
1637
+ while (parts.length) {
1638
+ var _item = this.findItem(parts.join('/'));
1639
+
1640
+ if (_item && _item.folder) {
1641
+ parentFolder = parts.join('/');
1642
+ break;
1643
+ }
1644
+ }
1645
+ }
1646
+
1647
+ return parentFolder;
1648
+ }
1649
+ }, {
1650
+ key: "renderUpload",
1651
+ value: function renderUpload() {
1652
+ var _this18 = this;
1653
+
1654
+ if (this.state.uploadFile) {
1655
+ return [/*#__PURE__*/_react["default"].createElement(_Fab["default"], {
1656
+ key: "close",
1657
+ color: "primary",
1658
+ "aria-label": "close",
1659
+ className: this.props.classes.uploadCloseButton,
1660
+ onClick: function onClick() {
1661
+ return _this18.setState({
1662
+ uploadFile: false
1663
+ });
1664
+ }
1665
+ }, /*#__PURE__*/_react["default"].createElement(_Close["default"], null)), /*#__PURE__*/_react["default"].createElement(_reactDropzone["default"], {
1666
+ key: "dropzone",
1667
+ onDragEnter: function onDragEnter() {
1668
+ return _this18.setState({
1669
+ uploadFile: 'dragging'
1670
+ });
1671
+ },
1672
+ onDragLeave: function onDragLeave() {
1673
+ return _this18.setState({
1674
+ uploadFile: true
1675
+ });
1676
+ },
1677
+ onDrop: function onDrop(acceptedFiles) {
1678
+ var count = acceptedFiles.length;
1679
+ acceptedFiles.forEach(function (file) {
1680
+ var reader = new FileReader();
1681
+
1682
+ reader.onabort = function () {
1683
+ return console.log('file reading was aborted');
1684
+ };
1685
+
1686
+ reader.onerror = function () {
1687
+ return console.log('file reading has failed');
1688
+ };
1689
+
1690
+ reader.onload = function () {
1691
+ var parentFolder = _this18.findFirstFolder(_this18.state.selected);
1692
+
1693
+ if (!parentFolder) {
1694
+ return window.alert(_this18.props.t('ra_Invalid parent folder!'));
1695
+ }
1696
+
1697
+ var id = parentFolder + '/' + file.name;
1698
+
1699
+ _this18.uploadFile(id, reader.result).then(function () {
1700
+ if (! --count) {
1701
+ var folders = {};
1702
+ Object.keys(_this18.state.folders).forEach(function (name) {
1703
+ if (name !== parentFolder && !name.startsWith(parentFolder + '/')) {
1704
+ folders[name] = _this18.state.folders[name];
1705
+ }
1706
+ });
1707
+
1708
+ _this18.setState({
1709
+ uploadFile: false,
1710
+ folders: folders
1711
+ }, function () {
1712
+ return _this18.browseFolders(_toConsumableArray(_this18.state.expanded), folders).then(function (folders) {
1713
+ // open current folder
1714
+ var expanded = _toConsumableArray(_this18.state.expanded);
1715
+
1716
+ if (!expanded.includes(parentFolder)) {
1717
+ expanded.push(parentFolder);
1718
+ expanded.sort();
1719
+ window.localStorage.setItem('files.expanded', JSON.stringify(expanded));
1720
+ }
1721
+
1722
+ _this18.setState({
1723
+ folders: folders,
1724
+ expanded: expanded
1725
+ }, function () {
1726
+ return _this18.select(id);
1727
+ });
1728
+ });
1729
+ });
1730
+ }
1731
+ });
1732
+ };
1733
+
1734
+ reader.readAsArrayBuffer(file);
1735
+ });
1736
+ }
1737
+ }, function (_ref2) {
1738
+ var getRootProps = _ref2.getRootProps,
1739
+ getInputProps = _ref2.getInputProps;
1740
+ return /*#__PURE__*/_react["default"].createElement("div", _extends({
1741
+ className: _Utils["default"].clsx(_this18.props.classes.uploadDiv, _this18.state.uploadFile === 'dragging' && _this18.props.classes.uploadDivDragging)
1742
+ }, getRootProps()), /*#__PURE__*/_react["default"].createElement("input", getInputProps()), /*#__PURE__*/_react["default"].createElement("div", {
1743
+ className: _this18.props.classes.uploadCenterDiv
1744
+ }, /*#__PURE__*/_react["default"].createElement("div", {
1745
+ className: _this18.props.classes.uploadCenterTextAndIcon
1746
+ }, /*#__PURE__*/_react["default"].createElement(_Publish["default"], {
1747
+ className: _this18.props.classes.uploadCenterIcon
1748
+ }), /*#__PURE__*/_react["default"].createElement("div", {
1749
+ className: _this18.props.classes.uploadCenterText
1750
+ }, _this18.state.uploadFile === 'dragging' ? _this18.props.t('ra_Drop file here') : _this18.props.t('ra_Place your files here or click here to open the browse dialog')))));
1751
+ })];
1752
+ } else {
1753
+ return null;
1754
+ }
1755
+ }
1756
+ }, {
1757
+ key: "deleteRecursive",
1758
+ value: function deleteRecursive(id) {
1759
+ var _this19 = this;
1760
+
1761
+ var item = this.findItem(id);
1762
+
1763
+ if (item.folder) {
1764
+ return (this.state.folders[id] ? Promise.all(this.state.folders[id].map(function (item) {
1765
+ return _this19.deleteRecursive(item.id);
1766
+ })) : Promise.resolve()).then(function () {
1767
+ // If it is folder of second level
1768
+ if (item.level >= 1) {
1769
+ var parts = id.split('/');
1770
+ var adapter = parts.shift();
1771
+
1772
+ _this19.props.socket.deleteFolder(adapter, parts.join('/')).then(function () {
1773
+ // remove this folder
1774
+ var folders = JSON.parse(JSON.stringify(_this19.state.folders));
1775
+ delete folders[item.id]; // delete folder from parent item
1776
+
1777
+ var parentId = getParentDir(item.id);
1778
+ var parentFolder = folders[parentId];
1779
+
1780
+ if (parentFolder) {
1781
+ var pos = parentFolder.indexOf(parentFolder.find(function (f) {
1782
+ return f.id === item.id;
1783
+ }));
1784
+
1785
+ if (pos !== -1) {
1786
+ parentFolder.splice(pos, 1);
1787
+ }
1788
+
1789
+ _this19.select(parentId, function () {
1790
+ return _this19.setState({
1791
+ folders: folders
1792
+ });
1793
+ });
1794
+ }
1795
+ });
1796
+ }
1797
+ });
1798
+ } else {
1799
+ var parts = id.split('/');
1800
+ var adapter = parts.shift();
1801
+
1802
+ if (parts.length) {
1803
+ return this.props.socket.deleteFile(adapter, parts.join('/'))["catch"](function (e) {
1804
+ return window.alert('Cannot delete file: ' + e);
1805
+ });
1806
+ } else {
1807
+ return Promise.resolve();
1808
+ }
1809
+ }
1810
+ }
1811
+ }, {
1812
+ key: "deleteItem",
1813
+ value: function deleteItem(_deleteItem) {
1814
+ var _this20 = this;
1815
+
1816
+ _deleteItem = _deleteItem || this.state.deleteItem;
1817
+ this.setState({
1818
+ deleteItem: ''
1819
+ }, function () {
1820
+ return _this20.deleteRecursive(_deleteItem).then(function () {
1821
+ var pos = _this20.state.expanded.indexOf(_deleteItem);
1822
+
1823
+ if (pos !== -1) {
1824
+ var expanded = _toConsumableArray(_this20.state.expanded);
1825
+
1826
+ expanded.splice(pos, 1);
1827
+ window.localStorage.setItem('files.expanded', JSON.stringify(expanded));
1828
+
1829
+ _this20.setState({
1830
+ expanded: expanded
1831
+ });
1832
+ }
1833
+ /*let parentFolder = this.findFirstFolder(deleteItem);
1834
+ const folders = {};
1835
+ Object.keys(this.state.folders).forEach(name => {
1836
+ if (name !== parentFolder && !name.startsWith(parentFolder + '/')) {
1837
+ folders[name] = this.state.folders[name];
1838
+ }
1839
+ });
1840
+ this.setState({ folders }, () =>
1841
+ this.browseFolders([...this.state.expanded], folders)
1842
+ .then(folders => this.setState({ folders })));*/
1843
+
1844
+ });
1845
+ });
1846
+ }
1847
+ }, {
1848
+ key: "renderDeleteDialog",
1849
+ value: function renderDeleteDialog() {
1850
+ var _this21 = this;
1851
+
1852
+ if (this.state.deleteItem) {
1853
+ return /*#__PURE__*/_react["default"].createElement(_Dialog["default"], {
1854
+ key: "deleteDialog",
1855
+ open: true,
1856
+ onClose: function onClose() {
1857
+ return _this21.setState({
1858
+ deleteItem: ''
1859
+ });
1860
+ },
1861
+ "aria-labelledby": "form-dialog-title"
1862
+ }, /*#__PURE__*/_react["default"].createElement(_DialogTitle["default"], {
1863
+ id: "form-dialog-title"
1864
+ }, 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"], {
1865
+ color: "grey",
1866
+ variant: "contained",
1867
+ onClick: function onClick() {
1868
+ _this21.suppressDeleteConfirm = Date.now() + 60000 * 5;
1869
+
1870
+ _this21.deleteItem();
1871
+ }
1872
+ }, this.props.t('ra_Delete (no confirm for 5 mins)')), /*#__PURE__*/_react["default"].createElement(_Button["default"], {
1873
+ variant: "contained",
1874
+ onClick: function onClick() {
1875
+ return _this21.deleteItem();
1876
+ },
1877
+ color: "primary",
1878
+ autoFocus: true
1879
+ }, this.props.t('ra_Delete')), /*#__PURE__*/_react["default"].createElement(_Button["default"], {
1880
+ color: "grey",
1881
+ variant: "contained",
1882
+ onClick: function onClick() {
1883
+ return _this21.setState({
1884
+ deleteItem: ''
1885
+ });
1886
+ }
1887
+ }, this.props.t('ra_Cancel'))));
1888
+ } else {
1889
+ return false;
1890
+ }
1891
+ }
1892
+ }, {
1893
+ key: "renderViewDialog",
1894
+ value: function renderViewDialog() {
1895
+ var _this22 = this;
1896
+
1897
+ return this.state.viewer ? /*#__PURE__*/_react["default"].createElement(_FileViewer["default"], {
1898
+ key: this.state.viewer,
1899
+ href: this.state.viewer,
1900
+ formatEditFile: this.state.formatEditFile,
1901
+ themeName: this.props.themeName,
1902
+ setStateBackgroundImage: this.setStateBackgroundImage,
1903
+ getClassBackgroundImage: this.getClassBackgroundImage,
1904
+ t: this.props.t,
1905
+ socket: this.props.socket,
1906
+ lang: this.props.lang,
1907
+ expertMode: this.state.expertMode,
1908
+ onClose: function onClose() {
1909
+ return _this22.setState({
1910
+ viewer: '',
1911
+ formatEditFile: ''
1912
+ });
1913
+ }
1914
+ }) : null;
1915
+ }
1916
+ }, {
1917
+ key: "renderError",
1918
+ value: function renderError() {
1919
+ var _this23 = this;
1920
+
1921
+ if (this.state.errorText) {
1922
+ return /*#__PURE__*/_react["default"].createElement(_Error["default"], {
1923
+ key: "errorDialog",
1924
+ text: this.state.errorText,
1925
+ onClose: function onClose() {
1926
+ return _this23.setState({
1927
+ errorText: ''
1928
+ });
1929
+ }
1930
+ });
1931
+ } else {
1932
+ return null;
1933
+ }
1934
+ }
1935
+ }, {
1936
+ key: "updateItemsAcl",
1937
+ value: function updateItemsAcl(info) {
1938
+ var _this24 = this;
1939
+
1940
+ var folders = JSON.parse(JSON.stringify(this.state.folders));
1941
+ var changed;
1942
+ info.forEach(function (it) {
1943
+ var item = _this24.findItem(it.id, folders);
1944
+
1945
+ if (item && JSON.stringify(item.acl) !== JSON.stringify(it.acl)) {
1946
+ item.acl = it.acl;
1947
+ changed = true;
1948
+ }
1949
+ });
1950
+ changed && this.setState({
1951
+ folders: folders
1952
+ });
1953
+ }
1954
+ }, {
1955
+ key: "changeToPath",
1956
+ value: function changeToPath() {
1957
+ var _this25 = this;
1958
+
1959
+ setTimeout(function () {
1960
+ if (_this25.state.path !== _this25.state.selected && (!_this25.lastSelect || Date.now() - _this25.lastSelect > 100)) {
1961
+ var folder = _this25.state.path;
1962
+
1963
+ if (isFile(_this25.state.path)) {
1964
+ folder = getParentDir(_this25.state.path);
1965
+ }
1966
+
1967
+ return new Promise(function (resolve) {
1968
+ if (!_this25.state.folders[folder]) {
1969
+ return _this25.browseFolder(folder).then(function (folders) {
1970
+ return _this25.setState({
1971
+ folders: folders
1972
+ }, function () {
1973
+ return resolve(true);
1974
+ });
1975
+ })["catch"](function (err) {
1976
+ return _this25.setState({
1977
+ errorText: err === NOT_FOUND ? _this25.props.t('re_Cannot find "%s"', folder) : _this25.props.t('re_Cannot read "%s"', folder)
1978
+ });
1979
+ });
1980
+ } else {
1981
+ return resolve(true);
1982
+ }
1983
+ }).then(function (result) {
1984
+ return result && _this25.setState({
1985
+ selected: _this25.state.path,
1986
+ currentDir: folder,
1987
+ pathFocus: false
1988
+ });
1989
+ });
1990
+ } else if (!_this25.lastSelect || Date.now() - _this25.lastSelect > 100) {
1991
+ _this25.setState({
1992
+ pathFocus: false
1993
+ });
1994
+ }
1995
+ }, 100);
1996
+ }
1997
+ }, {
1998
+ key: "renderBreadcrumb",
1999
+ value: function renderBreadcrumb() {
2000
+ var _this26 = this;
2001
+
2002
+ var parts = this.state.selected.startsWith('/') ? this.state.selected.split('/') : ('/' + this.state.selected).split('/');
2003
+ var p = [];
2004
+ return parts.map(function (part, i) {
2005
+ part && p.push(part);
2006
+ var path = p.join('/');
2007
+
2008
+ if (i < parts.length - 1) {
2009
+ return [/*#__PURE__*/_react["default"].createElement("div", {
2010
+ key: _this26.state.selected + '_' + i,
2011
+ className: _this26.props.classes.pathDivBreadcrumbDir,
2012
+ onClick: function onClick(e) {
2013
+ return _this26.changeFolder(e, path || '/');
2014
+ }
2015
+ }, part || _this26.props.t('re_Root')), /*#__PURE__*/_react["default"].createElement("span", {
2016
+ key: _this26.state.selected + '_s_' + i,
2017
+ className: _this26.props.classes.pathDivBreadcrumbSlash
2018
+ }, '>')];
2019
+ } else {
2020
+ return /*#__PURE__*/_react["default"].createElement("div", {
2021
+ key: _this26.state.selected + '_' + i,
2022
+ className: _this26.props.classes.pathDivBreadcrumbFile,
2023
+ onClick: function onClick() {
2024
+ return _this26.setState({
2025
+ pathFocus: true
2026
+ });
2027
+ }
2028
+ }, part);
2029
+ }
2030
+ });
2031
+ }
2032
+ }, {
2033
+ key: "renderPath",
2034
+ value: function renderPath() {
2035
+ var _this27 = this;
2036
+
2037
+ return /*#__PURE__*/_react["default"].createElement("div", {
2038
+ key: "path",
2039
+ className: _Utils["default"].clsx(this.props.classes.pathDiv, !this.state.pathFocus && this.props.classes.pathDivBreadcrumb)
2040
+ }, this.state.pathFocus ? /*#__PURE__*/_react["default"].createElement(_Input["default"], {
2041
+ value: this.state.path,
2042
+ onKeyDown: function onKeyDown(e) {
2043
+ return e.keyCode === 13 && _this27.changeToPath();
2044
+ },
2045
+ onBlur: function onBlur(e) {
2046
+ return _this27.changeToPath();
2047
+ },
2048
+ onChange: function onChange(e) {
2049
+ return _this27.setState({
2050
+ path: e.target.value
2051
+ });
2052
+ },
2053
+ className: this.props.classes.pathDivInput
2054
+ }) : this.renderBreadcrumb());
2055
+ }
2056
+ }, {
2057
+ key: "render",
2058
+ value: function render() {
2059
+ var _this28 = this;
2060
+
2061
+ if (!this.props.ready) {
2062
+ return /*#__PURE__*/_react["default"].createElement(_LinearProgress["default"], {
2063
+ key: this.props.key ? this.props.key + '_c' : 'c'
2064
+ });
2065
+ }
2066
+
2067
+ if (this.state.loadAllFolders && !this.foldersLoading) {
2068
+ this.foldersLoading = true;
2069
+ setTimeout(function () {
2070
+ _this28.setState({
2071
+ loadAllFolders: false,
2072
+ folders: {}
2073
+ }, function () {
2074
+ _this28.foldersLoading = false;
2075
+
2076
+ _this28.loadFolders();
2077
+ });
2078
+ }, 300);
2079
+ }
2080
+
2081
+ return /*#__PURE__*/_react["default"].createElement("div", {
2082
+ style: this.props.style,
2083
+ className: _Utils["default"].clsx(this.props.classes.root, this.props.className)
2084
+ }, this.props.showToolbar ? this.renderToolbar() : null, this.state.viewType === TILE ? this.renderPath() : null, /*#__PURE__*/_react["default"].createElement("div", {
2085
+ className: _Utils["default"].clsx(this.props.classes.filesDiv, this.props.classes['filesDiv' + this.state.viewType])
2086
+ }, 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());
2087
+ }
2088
+ }], [{
2089
+ key: "getDerivedStateFromProps",
2090
+ value: function getDerivedStateFromProps(props, state) {
2091
+ if (props.expertMode !== undefined && props.expertMode !== state.expertMode) {
2092
+ return {
2093
+ expertMode: props.expertMode,
2094
+ loadAllFolders: !state.allFoldersLoaded && props.expertMode
2095
+ };
2096
+ } else {
2097
+ return null;
2098
+ }
2099
+ }
2100
+ }]);
2101
+
2102
+ return FileBrowser;
2103
+ }(_react.Component);
2104
+
2105
+ FileBrowser.defaultProps = {
2106
+ objectAddBoolean: false,
2107
+ objectEditBoolean: false,
2108
+ objectStatesView: false,
2109
+ objectImportExport: false,
2110
+ objectEditOfAccessControl: false,
2111
+ modalNewObject: function modalNewObject() {},
2112
+ modalEditOfAccessControl: function modalEditOfAccessControl() {}
2113
+ };
2114
+ FileBrowser.propTypes = {
2115
+ style: _propTypes["default"].object,
2116
+ className: _propTypes["default"].string,
2117
+ t: _propTypes["default"].func,
2118
+ lang: _propTypes["default"].string,
2119
+ socket: _propTypes["default"].object,
2120
+ ready: _propTypes["default"].bool,
2121
+ expertMode: _propTypes["default"].bool,
2122
+ showToolbar: _propTypes["default"].bool,
2123
+ allowUpload: _propTypes["default"].bool,
2124
+ allowDownload: _propTypes["default"].bool,
2125
+ allowCreateFolder: _propTypes["default"].bool,
2126
+ allowDelete: _propTypes["default"].bool,
2127
+ allowView: _propTypes["default"].bool,
2128
+ imagePrefix: _propTypes["default"].string,
2129
+ showExpertButton: _propTypes["default"].bool,
2130
+ viewType: _propTypes["default"].string,
2131
+ showViewTypeButton: _propTypes["default"].bool,
2132
+ selected: _propTypes["default"].string,
2133
+ tileView: _propTypes["default"].bool,
2134
+ filterFiles: _propTypes["default"].array,
2135
+ // like ['png', 'svg', 'bmp', 'jpg', 'jpeg']
2136
+ filterByType: _propTypes["default"].string,
2137
+ // images, code or txt from FileViewer.EXTENSIONS
2138
+ onSelect: _propTypes["default"].func // function (id, isDoubleClick)
2139
+
2140
+ };
2141
+ /** @type {typeof FileBrowser} */
2142
+
2143
+ var _export = withWidth()((0, _withStyles["default"])(styles)(FileBrowser));
2144
+
2145
+ var _default = _export;
2146
+ exports["default"] = _default;
2147
+ //# sourceMappingURL=FileBrowser.js.map