@deephaven/file-explorer 0.5.1 → 0.5.2-allpackages.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/FileExistsError.js +7 -35
- package/dist/FileExistsError.js.map +1 -1
- package/dist/FileExplorer.js +62 -139
- package/dist/FileExplorer.js.map +1 -1
- package/dist/FileExplorerShortcuts.js +1 -1
- package/dist/FileExplorerShortcuts.js.map +1 -1
- package/dist/FileExplorerToolbar.js +7 -6
- package/dist/FileExplorerToolbar.js.map +1 -1
- package/dist/FileList.js +103 -172
- package/dist/FileList.js.map +1 -1
- package/dist/FileListContainer.js +38 -68
- package/dist/FileListContainer.js.map +1 -1
- package/dist/FileListItemEditor.js +28 -58
- package/dist/FileListItemEditor.js.map +1 -1
- package/dist/FileNotFoundError.js +5 -40
- package/dist/FileNotFoundError.js.map +1 -1
- package/dist/FileUtils.js +208 -258
- package/dist/FileUtils.js.map +1 -1
- package/dist/NewItemModal.js +397 -464
- package/dist/NewItemModal.js.map +1 -1
- package/dist/WebdavFileStorage.js +97 -250
- package/dist/WebdavFileStorage.js.map +1 -1
- package/dist/WebdavFileStorageTable.js +196 -346
- package/dist/WebdavFileStorageTable.js.map +1 -1
- package/dist/index.js +10 -10
- package/dist/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +14 -13
package/dist/FileList.js
CHANGED
|
@@ -4,18 +4,6 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
|
|
|
4
4
|
|
|
5
5
|
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; }
|
|
6
6
|
|
|
7
|
-
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
8
|
-
|
|
9
|
-
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
10
|
-
|
|
11
|
-
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); }
|
|
12
|
-
|
|
13
|
-
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; }
|
|
14
|
-
|
|
15
|
-
function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
16
|
-
|
|
17
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
18
|
-
|
|
19
7
|
import { ItemList } from '@deephaven/components';
|
|
20
8
|
import { dhPython, vsCode, vsFolder, vsFolderOpened } from '@deephaven/icons';
|
|
21
9
|
import Log from '@deephaven/log';
|
|
@@ -23,35 +11,33 @@ import { RangeUtils } from '@deephaven/utils';
|
|
|
23
11
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
24
12
|
import classNames from 'classnames';
|
|
25
13
|
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
26
|
-
import { isDirectory } from
|
|
14
|
+
import { isDirectory } from "./FileStorage.js";
|
|
27
15
|
import "./FileList.css";
|
|
28
|
-
import FileUtils, { MIME_TYPE } from
|
|
16
|
+
import FileUtils, { MIME_TYPE } from "./FileUtils.js";
|
|
29
17
|
var log = Log.module('FileList');
|
|
30
|
-
export var getPathFromItem =
|
|
31
|
-
return isDirectory(file) ? FileUtils.makePath(file.filename) : FileUtils.getPath(file.filename);
|
|
32
|
-
};
|
|
18
|
+
export var getPathFromItem = file => isDirectory(file) ? FileUtils.makePath(file.filename) : FileUtils.getPath(file.filename);
|
|
33
19
|
export var DEFAULT_ROW_HEIGHT = 26; // How long you need to hover over a directory before it expands
|
|
34
20
|
|
|
35
21
|
export var DRAG_HOVER_TIMEOUT = 500;
|
|
36
22
|
var ITEM_LIST_CLASS_NAME = 'item-list-scroll-pane';
|
|
37
|
-
export var renderFileListItem =
|
|
23
|
+
export var renderFileListItem = props => {
|
|
38
24
|
var _draggedItems$some;
|
|
39
25
|
|
|
40
|
-
var
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
26
|
+
var {
|
|
27
|
+
children,
|
|
28
|
+
draggedItems,
|
|
29
|
+
isDragInProgress,
|
|
30
|
+
isDropTargetValid,
|
|
31
|
+
isSelected,
|
|
32
|
+
item,
|
|
33
|
+
itemIndex,
|
|
34
|
+
dropTargetItem,
|
|
35
|
+
onDragStart,
|
|
36
|
+
onDragOver,
|
|
37
|
+
onDragEnd,
|
|
38
|
+
onDrop
|
|
39
|
+
} = props;
|
|
40
|
+
var isDragged = (_draggedItems$some = draggedItems === null || draggedItems === void 0 ? void 0 : draggedItems.some(draggedItem => draggedItem.id === item.id)) !== null && _draggedItems$some !== void 0 ? _draggedItems$some : false;
|
|
55
41
|
var itemPath = getPathFromItem(item);
|
|
56
42
|
var dropTargetPath = isDragInProgress && dropTargetItem ? getPathFromItem(dropTargetItem) : null;
|
|
57
43
|
var isExactDropTarget = isDragInProgress && isDropTargetValid && isDirectory(item) && dropTargetPath === itemPath;
|
|
@@ -59,16 +45,13 @@ export var renderFileListItem = function renderFileListItem(props) {
|
|
|
59
45
|
var isInvalidDropTarget = isDragInProgress && !isDropTargetValid && dropTargetPath === itemPath;
|
|
60
46
|
var icon = getItemIcon(item);
|
|
61
47
|
var depth = FileUtils.getDepth(item.filename);
|
|
62
|
-
var depthLines = Array(depth).fill(null).map(
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
})
|
|
70
|
-
);
|
|
71
|
-
});
|
|
48
|
+
var depthLines = Array(depth).fill(null).map((value, index) =>
|
|
49
|
+
/*#__PURE__*/
|
|
50
|
+
// eslint-disable-next-line react/no-array-index-key
|
|
51
|
+
React.createElement("span", {
|
|
52
|
+
className: "file-list-depth-line",
|
|
53
|
+
key: index
|
|
54
|
+
}));
|
|
72
55
|
return /*#__PURE__*/React.createElement("div", {
|
|
73
56
|
className: classNames('d-flex w-100 align-items-center', 'file-list-item', {
|
|
74
57
|
'is-dragged': isDragged,
|
|
@@ -87,9 +70,7 @@ export var renderFileListItem = function renderFileListItem(props) {
|
|
|
87
70
|
};
|
|
88
71
|
|
|
89
72
|
return onDragStart;
|
|
90
|
-
}(
|
|
91
|
-
return onDragStart(itemIndex, e);
|
|
92
|
-
}),
|
|
73
|
+
}(e => onDragStart(itemIndex, e)),
|
|
93
74
|
onDragOver: function (_onDragOver) {
|
|
94
75
|
function onDragOver(_x2) {
|
|
95
76
|
return _onDragOver.apply(this, arguments);
|
|
@@ -100,9 +81,7 @@ export var renderFileListItem = function renderFileListItem(props) {
|
|
|
100
81
|
};
|
|
101
82
|
|
|
102
83
|
return onDragOver;
|
|
103
|
-
}(
|
|
104
|
-
return onDragOver(itemIndex, e);
|
|
105
|
-
}),
|
|
84
|
+
}(e => onDragOver(itemIndex, e)),
|
|
106
85
|
onDragEnd: function (_onDragEnd) {
|
|
107
86
|
function onDragEnd(_x3) {
|
|
108
87
|
return _onDragEnd.apply(this, arguments);
|
|
@@ -113,9 +92,7 @@ export var renderFileListItem = function renderFileListItem(props) {
|
|
|
113
92
|
};
|
|
114
93
|
|
|
115
94
|
return onDragEnd;
|
|
116
|
-
}(
|
|
117
|
-
return onDragEnd(itemIndex, e);
|
|
118
|
-
}),
|
|
95
|
+
}(e => onDragEnd(itemIndex, e)),
|
|
119
96
|
onDrop: function (_onDrop) {
|
|
120
97
|
function onDrop(_x4) {
|
|
121
98
|
return _onDrop.apply(this, arguments);
|
|
@@ -126,9 +103,7 @@ export var renderFileListItem = function renderFileListItem(props) {
|
|
|
126
103
|
};
|
|
127
104
|
|
|
128
105
|
return onDrop;
|
|
129
|
-
}(
|
|
130
|
-
return onDrop(itemIndex, e);
|
|
131
|
-
}),
|
|
106
|
+
}(e => onDrop(itemIndex, e)),
|
|
132
107
|
draggable: true,
|
|
133
108
|
role: "presentation"
|
|
134
109
|
}, depthLines, ' ', /*#__PURE__*/React.createElement(FontAwesomeIcon, {
|
|
@@ -169,93 +144,58 @@ export function getMoveOperation(draggedItems, targetItem) {
|
|
|
169
144
|
|
|
170
145
|
var targetPath = getPathFromItem(targetItem);
|
|
171
146
|
|
|
172
|
-
if (draggedItems.some(
|
|
173
|
-
var
|
|
147
|
+
if (draggedItems.some((_ref) => {
|
|
148
|
+
var {
|
|
149
|
+
filename
|
|
150
|
+
} = _ref;
|
|
174
151
|
return FileUtils.getPath(filename) === targetPath;
|
|
175
152
|
})) {
|
|
176
153
|
// Cannot drop if target is one of the dragged items is already in the target folder
|
|
177
154
|
throw new Error('File already in the destination folder');
|
|
178
155
|
}
|
|
179
156
|
|
|
180
|
-
if (draggedItems.some(
|
|
181
|
-
return isDirectory(item) && targetPath.startsWith(FileUtils.makePath(item.filename));
|
|
182
|
-
})) {
|
|
157
|
+
if (draggedItems.some(item => isDirectory(item) && targetPath.startsWith(FileUtils.makePath(item.filename)))) {
|
|
183
158
|
// Cannot drop if target is a child of one of the directories being moved
|
|
184
159
|
throw new Error('Destination folder cannot be a child of a dragged folder');
|
|
185
160
|
}
|
|
186
161
|
|
|
187
162
|
return {
|
|
188
163
|
files: draggedItems,
|
|
189
|
-
targetPath
|
|
164
|
+
targetPath
|
|
190
165
|
};
|
|
191
166
|
}
|
|
192
167
|
/**
|
|
193
168
|
* Component that displays and allows interaction with the file system in the provided FileStorageTable.
|
|
194
169
|
*/
|
|
195
170
|
|
|
196
|
-
export var FileList =
|
|
197
|
-
var
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
_props$overscanCount = props.overscanCount,
|
|
215
|
-
overscanCount = _props$overscanCount === void 0 ? ItemList.DEFAULT_OVERSCAN : _props$overscanCount;
|
|
216
|
-
|
|
217
|
-
var _useState = useState(function () {
|
|
218
|
-
return {
|
|
219
|
-
items: [],
|
|
220
|
-
offset: 0,
|
|
221
|
-
itemCount: 0
|
|
222
|
-
};
|
|
223
|
-
}),
|
|
224
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
225
|
-
loadedViewport = _useState2[0],
|
|
226
|
-
setLoadedViewport = _useState2[1];
|
|
227
|
-
|
|
228
|
-
var _useState3 = useState({
|
|
171
|
+
export var FileList = props => {
|
|
172
|
+
var {
|
|
173
|
+
isMultiSelect = false,
|
|
174
|
+
table,
|
|
175
|
+
onFocusChange = () => undefined,
|
|
176
|
+
onMove,
|
|
177
|
+
onSelect,
|
|
178
|
+
onSelectionChange = () => undefined,
|
|
179
|
+
renderItem = renderFileListItem,
|
|
180
|
+
rowHeight = DEFAULT_ROW_HEIGHT,
|
|
181
|
+
overscanCount = ItemList.DEFAULT_OVERSCAN
|
|
182
|
+
} = props;
|
|
183
|
+
var [loadedViewport, setLoadedViewport] = useState(() => ({
|
|
184
|
+
items: [],
|
|
185
|
+
offset: 0,
|
|
186
|
+
itemCount: 0
|
|
187
|
+
}));
|
|
188
|
+
var [viewport, setViewport] = useState({
|
|
229
189
|
top: 0,
|
|
230
190
|
bottom: 0
|
|
231
|
-
})
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
var _useState5 = useState(),
|
|
237
|
-
_useState6 = _slicedToArray(_useState5, 2),
|
|
238
|
-
dropTargetItem = _useState6[0],
|
|
239
|
-
setDropTargetItem = _useState6[1];
|
|
240
|
-
|
|
241
|
-
var _useState7 = useState(),
|
|
242
|
-
_useState8 = _slicedToArray(_useState7, 2),
|
|
243
|
-
draggedItems = _useState8[0],
|
|
244
|
-
setDraggedItems = _useState8[1];
|
|
245
|
-
|
|
246
|
-
var _useState9 = useState(),
|
|
247
|
-
_useState10 = _slicedToArray(_useState9, 2),
|
|
248
|
-
dragPlaceholder = _useState10[0],
|
|
249
|
-
setDragPlaceholder = _useState10[1];
|
|
250
|
-
|
|
251
|
-
var _useState11 = useState([]),
|
|
252
|
-
_useState12 = _slicedToArray(_useState11, 2),
|
|
253
|
-
selectedRanges = _useState12[0],
|
|
254
|
-
setSelectedRanges = _useState12[1];
|
|
255
|
-
|
|
191
|
+
});
|
|
192
|
+
var [dropTargetItem, setDropTargetItem] = useState();
|
|
193
|
+
var [draggedItems, setDraggedItems] = useState();
|
|
194
|
+
var [dragPlaceholder, setDragPlaceholder] = useState();
|
|
195
|
+
var [selectedRanges, setSelectedRanges] = useState([]);
|
|
256
196
|
var itemList = useRef(null);
|
|
257
197
|
var fileList = useRef(null);
|
|
258
|
-
var getItems = useCallback(
|
|
198
|
+
var getItems = useCallback(ranges => {
|
|
259
199
|
if (ranges.length === 0 || !loadedViewport) {
|
|
260
200
|
return [];
|
|
261
201
|
}
|
|
@@ -274,7 +214,7 @@ export var FileList = function FileList(props) {
|
|
|
274
214
|
|
|
275
215
|
return items;
|
|
276
216
|
}, [loadedViewport]);
|
|
277
|
-
var getItem = useCallback(
|
|
217
|
+
var getItem = useCallback(itemIndex => {
|
|
278
218
|
var items = getItems([[itemIndex, itemIndex]]);
|
|
279
219
|
|
|
280
220
|
if (items.length > 0) {
|
|
@@ -285,7 +225,7 @@ export var FileList = function FileList(props) {
|
|
|
285
225
|
* Get the placeholder text to show when a drag operation is in progress
|
|
286
226
|
*/
|
|
287
227
|
|
|
288
|
-
var getDragPlaceholderText = useCallback(
|
|
228
|
+
var getDragPlaceholderText = useCallback(() => {
|
|
289
229
|
var count = RangeUtils.count(selectedRanges);
|
|
290
230
|
|
|
291
231
|
if (count === 0) {
|
|
@@ -308,7 +248,7 @@ export var FileList = function FileList(props) {
|
|
|
308
248
|
* If an itemIndex is provided, focus that index after the drop.
|
|
309
249
|
*/
|
|
310
250
|
|
|
311
|
-
var dropItems = useCallback(
|
|
251
|
+
var dropItems = useCallback(itemIndex => {
|
|
312
252
|
if (!draggedItems || !dropTargetItem) {
|
|
313
253
|
return;
|
|
314
254
|
}
|
|
@@ -316,10 +256,10 @@ export var FileList = function FileList(props) {
|
|
|
316
256
|
log.debug('dropItems', draggedItems, 'to', itemIndex);
|
|
317
257
|
|
|
318
258
|
try {
|
|
319
|
-
var
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
259
|
+
var {
|
|
260
|
+
files: _files,
|
|
261
|
+
targetPath
|
|
262
|
+
} = getMoveOperation(draggedItems, dropTargetItem);
|
|
323
263
|
onMove(_files, targetPath);
|
|
324
264
|
|
|
325
265
|
if (itemIndex != null) {
|
|
@@ -332,7 +272,7 @@ export var FileList = function FileList(props) {
|
|
|
332
272
|
log.error('Unable to complete move', err);
|
|
333
273
|
}
|
|
334
274
|
}, [draggedItems, dropTargetItem, onMove]);
|
|
335
|
-
var handleSelect = useCallback(
|
|
275
|
+
var handleSelect = useCallback(itemIndex => {
|
|
336
276
|
var item = loadedViewport.items[itemIndex - loadedViewport.offset];
|
|
337
277
|
|
|
338
278
|
if (item !== undefined) {
|
|
@@ -344,7 +284,7 @@ export var FileList = function FileList(props) {
|
|
|
344
284
|
}
|
|
345
285
|
}
|
|
346
286
|
}, [loadedViewport, onSelect, table]);
|
|
347
|
-
var handleItemDragStart = useCallback(
|
|
287
|
+
var handleItemDragStart = useCallback((itemIndex, e) => {
|
|
348
288
|
var _itemList$current2;
|
|
349
289
|
|
|
350
290
|
log.debug2('handleItemDragStart', itemIndex, selectedRanges);
|
|
@@ -366,12 +306,12 @@ export var FileList = function FileList(props) {
|
|
|
366
306
|
e.dataTransfer.effectAllowed = 'move';
|
|
367
307
|
setDragPlaceholder(newDragPlaceholder);
|
|
368
308
|
}, [getDragPlaceholderText, getItems, selectedRanges]);
|
|
369
|
-
var handleItemDragOver = useCallback(
|
|
309
|
+
var handleItemDragOver = useCallback((itemIndex, e) => {
|
|
370
310
|
e.preventDefault();
|
|
371
311
|
log.debug2('handleItemDragOver', e);
|
|
372
312
|
setDropTargetItem(getItem(itemIndex));
|
|
373
313
|
}, [getItem]);
|
|
374
|
-
var handleItemDragEnd = useCallback(
|
|
314
|
+
var handleItemDragEnd = useCallback((itemIndex, e) => {
|
|
375
315
|
log.debug('handleItemDragEnd', itemIndex);
|
|
376
316
|
dragPlaceholder === null || dragPlaceholder === void 0 ? void 0 : dragPlaceholder.remove(); // Drag end is triggered after drop
|
|
377
317
|
// Also drop isn't triggered if drag end is outside of the list
|
|
@@ -380,14 +320,14 @@ export var FileList = function FileList(props) {
|
|
|
380
320
|
setDropTargetItem(undefined);
|
|
381
321
|
setDragPlaceholder(undefined);
|
|
382
322
|
}, [dragPlaceholder]);
|
|
383
|
-
var handleItemDrop = useCallback(
|
|
323
|
+
var handleItemDrop = useCallback((itemIndex, e) => {
|
|
384
324
|
dropItems(itemIndex);
|
|
385
325
|
}, [dropItems]);
|
|
386
|
-
var handleItemDragExit = useCallback(
|
|
326
|
+
var handleItemDragExit = useCallback(() => {
|
|
387
327
|
log.debug2('handleItemDragExit');
|
|
388
328
|
setDropTargetItem(undefined);
|
|
389
329
|
}, []);
|
|
390
|
-
var handleListDragOver = useCallback(
|
|
330
|
+
var handleListDragOver = useCallback(e => {
|
|
391
331
|
if (e.target instanceof Element && e.target.classList.contains(ITEM_LIST_CLASS_NAME)) {
|
|
392
332
|
// Need to prevent default to enable drop
|
|
393
333
|
// https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Drag_operations#droptargets
|
|
@@ -401,13 +341,13 @@ export var FileList = function FileList(props) {
|
|
|
401
341
|
});
|
|
402
342
|
}
|
|
403
343
|
}, []);
|
|
404
|
-
var handleListDrop = useCallback(
|
|
344
|
+
var handleListDrop = useCallback(e => {
|
|
405
345
|
if (e.target instanceof Element && e.target.classList.contains(ITEM_LIST_CLASS_NAME)) {
|
|
406
346
|
log.debug('handleListDrop');
|
|
407
347
|
dropItems();
|
|
408
348
|
}
|
|
409
349
|
}, [dropItems]);
|
|
410
|
-
var handleSelectionChange = useCallback(
|
|
350
|
+
var handleSelectionChange = useCallback(newSelectedRanges => {
|
|
411
351
|
log.debug2('handleSelectionChange', newSelectedRanges);
|
|
412
352
|
|
|
413
353
|
if (newSelectedRanges !== selectedRanges) {
|
|
@@ -418,30 +358,27 @@ export var FileList = function FileList(props) {
|
|
|
418
358
|
onSelectionChange(_selectedItems);
|
|
419
359
|
}
|
|
420
360
|
}, [getItems, onSelectionChange, selectedRanges]);
|
|
421
|
-
var handleFocusChange = useCallback(
|
|
361
|
+
var handleFocusChange = useCallback(focusIndex => {
|
|
422
362
|
log.debug2('handleFocusChange', focusIndex);
|
|
423
363
|
|
|
424
364
|
if (focusIndex != null) {
|
|
425
|
-
var
|
|
426
|
-
_getItems2 = _slicedToArray(_getItems, 1),
|
|
427
|
-
_focusedItem = _getItems2[0];
|
|
428
|
-
|
|
365
|
+
var [_focusedItem] = getItems([[focusIndex, focusIndex]]);
|
|
429
366
|
onFocusChange(_focusedItem);
|
|
430
367
|
} else {
|
|
431
368
|
onFocusChange();
|
|
432
369
|
}
|
|
433
370
|
}, [getItems, onFocusChange]);
|
|
434
|
-
var handleViewportChange = useCallback(
|
|
371
|
+
var handleViewportChange = useCallback((top, bottom) => {
|
|
435
372
|
log.debug('handleViewportChange', top, bottom);
|
|
436
373
|
|
|
437
374
|
if (top !== viewport.top || bottom !== viewport.bottom) {
|
|
438
375
|
setViewport({
|
|
439
|
-
top
|
|
440
|
-
bottom
|
|
376
|
+
top,
|
|
377
|
+
bottom
|
|
441
378
|
});
|
|
442
379
|
}
|
|
443
380
|
}, [viewport]);
|
|
444
|
-
var isDropTargetValid = useMemo(
|
|
381
|
+
var isDropTargetValid = useMemo(() => {
|
|
445
382
|
if (!draggedItems || !dropTargetItem) {
|
|
446
383
|
return false;
|
|
447
384
|
}
|
|
@@ -455,7 +392,7 @@ export var FileList = function FileList(props) {
|
|
|
455
392
|
return false;
|
|
456
393
|
}
|
|
457
394
|
}, [draggedItems, dropTargetItem]);
|
|
458
|
-
useEffect(
|
|
395
|
+
useEffect(() => {
|
|
459
396
|
log.debug('updating table viewport', viewport);
|
|
460
397
|
table === null || table === void 0 ? void 0 : table.setViewport({
|
|
461
398
|
top: Math.max(0, viewport.top - overscanCount),
|
|
@@ -463,48 +400,42 @@ export var FileList = function FileList(props) {
|
|
|
463
400
|
});
|
|
464
401
|
}, [overscanCount, table, viewport]); // Listen for table updates
|
|
465
402
|
|
|
466
|
-
useEffect(
|
|
467
|
-
var listenerRemover = table.onUpdate(
|
|
403
|
+
useEffect(() => {
|
|
404
|
+
var listenerRemover = table.onUpdate(newViewport => {
|
|
468
405
|
setLoadedViewport({
|
|
469
|
-
items: newViewport.items.map(
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
});
|
|
473
|
-
}),
|
|
406
|
+
items: newViewport.items.map(item => _objectSpread(_objectSpread({}, item), {}, {
|
|
407
|
+
itemName: item.basename
|
|
408
|
+
})),
|
|
474
409
|
offset: newViewport.offset,
|
|
475
410
|
itemCount: table.size
|
|
476
411
|
});
|
|
477
412
|
});
|
|
478
|
-
return
|
|
413
|
+
return () => {
|
|
479
414
|
listenerRemover();
|
|
480
415
|
};
|
|
481
416
|
}, [table]); // Expand a folder if hovering over it
|
|
482
417
|
|
|
483
|
-
useEffect(
|
|
418
|
+
useEffect(() => {
|
|
484
419
|
if (dropTargetItem != null && isDirectory(dropTargetItem) && dropTargetItem.filename !== '/') {
|
|
485
|
-
var timeout = setTimeout(
|
|
420
|
+
var timeout = setTimeout(() => {
|
|
486
421
|
if (!dropTargetItem.isExpanded) {
|
|
487
422
|
table === null || table === void 0 ? void 0 : table.setExpanded(dropTargetItem.filename, true);
|
|
488
423
|
}
|
|
489
424
|
}, DRAG_HOVER_TIMEOUT);
|
|
490
|
-
return
|
|
491
|
-
return clearTimeout(timeout);
|
|
492
|
-
};
|
|
425
|
+
return () => clearTimeout(timeout);
|
|
493
426
|
}
|
|
494
427
|
}, [dropTargetItem, table]);
|
|
495
|
-
var renderWrapper = useCallback(
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
}));
|
|
507
|
-
}, [handleItemDragEnd, handleItemDragExit, handleItemDragOver, handleItemDragStart, handleItemDrop, draggedItems, dropTargetItem, isDropTargetValid, renderItem]);
|
|
428
|
+
var renderWrapper = useCallback(itemProps => renderItem(_objectSpread(_objectSpread({}, itemProps), {}, {
|
|
429
|
+
isDragInProgress: draggedItems != null,
|
|
430
|
+
dropTargetItem,
|
|
431
|
+
draggedItems,
|
|
432
|
+
isDropTargetValid,
|
|
433
|
+
onDragStart: handleItemDragStart,
|
|
434
|
+
onDragEnd: handleItemDragEnd,
|
|
435
|
+
onDragOver: handleItemDragOver,
|
|
436
|
+
onDragExit: handleItemDragExit,
|
|
437
|
+
onDrop: handleItemDrop
|
|
438
|
+
})), [handleItemDragEnd, handleItemDragExit, handleItemDragOver, handleItemDragStart, handleItemDrop, draggedItems, dropTargetItem, isDropTargetValid, renderItem]);
|
|
508
439
|
return /*#__PURE__*/React.createElement("div", {
|
|
509
440
|
ref: fileList,
|
|
510
441
|
className: classNames('file-list', {
|