@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/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 './FileStorage';
14
+ import { isDirectory } from "./FileStorage.js";
27
15
  import "./FileList.css";
28
- import FileUtils, { MIME_TYPE } from './FileUtils';
16
+ import FileUtils, { MIME_TYPE } from "./FileUtils.js";
29
17
  var log = Log.module('FileList');
30
- export var getPathFromItem = function getPathFromItem(file) {
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 = function renderFileListItem(props) {
23
+ export var renderFileListItem = props => {
38
24
  var _draggedItems$some;
39
25
 
40
- var children = props.children,
41
- draggedItems = props.draggedItems,
42
- isDragInProgress = props.isDragInProgress,
43
- isDropTargetValid = props.isDropTargetValid,
44
- isSelected = props.isSelected,
45
- item = props.item,
46
- itemIndex = props.itemIndex,
47
- dropTargetItem = props.dropTargetItem,
48
- onDragStart = props.onDragStart,
49
- onDragOver = props.onDragOver,
50
- onDragEnd = props.onDragEnd,
51
- onDrop = props.onDrop;
52
- var isDragged = (_draggedItems$some = draggedItems === null || draggedItems === void 0 ? void 0 : draggedItems.some(function (draggedItem) {
53
- return draggedItem.id === item.id;
54
- })) !== null && _draggedItems$some !== void 0 ? _draggedItems$some : false;
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(function (value, index) {
63
- return (
64
- /*#__PURE__*/
65
- // eslint-disable-next-line react/no-array-index-key
66
- React.createElement("span", {
67
- className: "file-list-depth-line",
68
- key: index
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
- }(function (e) {
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
- }(function (e) {
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
- }(function (e) {
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
- }(function (e) {
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(function (_ref) {
173
- var filename = _ref.filename;
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(function (item) {
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: 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 = function FileList(props) {
197
- var _props$isMultiSelect = props.isMultiSelect,
198
- isMultiSelect = _props$isMultiSelect === void 0 ? false : _props$isMultiSelect,
199
- table = props.table,
200
- _props$onFocusChange = props.onFocusChange,
201
- onFocusChange = _props$onFocusChange === void 0 ? function () {
202
- return undefined;
203
- } : _props$onFocusChange,
204
- onMove = props.onMove,
205
- onSelect = props.onSelect,
206
- _props$onSelectionCha = props.onSelectionChange,
207
- onSelectionChange = _props$onSelectionCha === void 0 ? function () {
208
- return undefined;
209
- } : _props$onSelectionCha,
210
- _props$renderItem = props.renderItem,
211
- renderItem = _props$renderItem === void 0 ? renderFileListItem : _props$renderItem,
212
- _props$rowHeight = props.rowHeight,
213
- rowHeight = _props$rowHeight === void 0 ? DEFAULT_ROW_HEIGHT : _props$rowHeight,
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
- _useState4 = _slicedToArray(_useState3, 2),
233
- viewport = _useState4[0],
234
- setViewport = _useState4[1];
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(function (ranges) {
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(function (itemIndex) {
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(function () {
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(function (itemIndex) {
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 _getMoveOperation = getMoveOperation(draggedItems, dropTargetItem),
320
- _files = _getMoveOperation.files,
321
- targetPath = _getMoveOperation.targetPath;
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(function (itemIndex) {
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(function (itemIndex, e) {
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(function (itemIndex, e) {
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(function (itemIndex, e) {
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(function (itemIndex, e) {
323
+ var handleItemDrop = useCallback((itemIndex, e) => {
384
324
  dropItems(itemIndex);
385
325
  }, [dropItems]);
386
- var handleItemDragExit = useCallback(function () {
326
+ var handleItemDragExit = useCallback(() => {
387
327
  log.debug2('handleItemDragExit');
388
328
  setDropTargetItem(undefined);
389
329
  }, []);
390
- var handleListDragOver = useCallback(function (e) {
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(function (e) {
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(function (newSelectedRanges) {
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(function (focusIndex) {
361
+ var handleFocusChange = useCallback(focusIndex => {
422
362
  log.debug2('handleFocusChange', focusIndex);
423
363
 
424
364
  if (focusIndex != null) {
425
- var _getItems = getItems([[focusIndex, focusIndex]]),
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(function (top, bottom) {
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: top,
440
- bottom: bottom
376
+ top,
377
+ bottom
441
378
  });
442
379
  }
443
380
  }, [viewport]);
444
- var isDropTargetValid = useMemo(function () {
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(function () {
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(function () {
467
- var listenerRemover = table.onUpdate(function (newViewport) {
403
+ useEffect(() => {
404
+ var listenerRemover = table.onUpdate(newViewport => {
468
405
  setLoadedViewport({
469
- items: newViewport.items.map(function (item) {
470
- return _objectSpread(_objectSpread({}, item), {}, {
471
- itemName: item.basename
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 function () {
413
+ return () => {
479
414
  listenerRemover();
480
415
  };
481
416
  }, [table]); // Expand a folder if hovering over it
482
417
 
483
- useEffect(function () {
418
+ useEffect(() => {
484
419
  if (dropTargetItem != null && isDirectory(dropTargetItem) && dropTargetItem.filename !== '/') {
485
- var timeout = setTimeout(function () {
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 function () {
491
- return clearTimeout(timeout);
492
- };
425
+ return () => clearTimeout(timeout);
493
426
  }
494
427
  }, [dropTargetItem, table]);
495
- var renderWrapper = useCallback(function (itemProps) {
496
- return renderItem(_objectSpread(_objectSpread({}, itemProps), {}, {
497
- isDragInProgress: draggedItems != null,
498
- dropTargetItem: dropTargetItem,
499
- draggedItems: draggedItems,
500
- isDropTargetValid: isDropTargetValid,
501
- onDragStart: handleItemDragStart,
502
- onDragEnd: handleItemDragEnd,
503
- onDragOver: handleItemDragOver,
504
- onDragExit: handleItemDragExit,
505
- onDrop: handleItemDrop
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', {