@deephaven/file-explorer 0.29.1-relative-base-url.1 → 0.29.1

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.
@@ -28,7 +28,7 @@ export interface FileListProps {
28
28
  isMultiSelect?: boolean;
29
29
  focusedPath?: string;
30
30
  onFocusChange?: (focusedItem?: FileStorageItem) => void;
31
- onMove: (files: FileStorageItem[], path: string) => void;
31
+ onMove?: (files: FileStorageItem[], path: string) => void;
32
32
  onSelect: (file: FileStorageItem, event: React.SyntheticEvent) => void;
33
33
  onSelectionChange?: (selectedItems: FileStorageItem[]) => void;
34
34
  renderItem?: (props: FileListRenderItemProps) => JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"FileList.d.ts","sourceRoot":"","sources":["../src/FileList.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FileList.d.ts","sourceRoot":"","sources":["../src/FileList.tsx"],"names":[],"mappings":"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"}
package/dist/FileList.js CHANGED
@@ -240,7 +240,7 @@ export function FileList(props) {
240
240
  files: _files,
241
241
  targetPath
242
242
  } = getMoveOperation(draggedItems, dropTargetItem);
243
- onMove(_files, targetPath);
243
+ onMove === null || onMove === void 0 ? void 0 : onMove(_files, targetPath);
244
244
  if (itemIndex != null) {
245
245
  var _itemList$current;
246
246
  setSelectedRanges([[itemIndex, itemIndex]]);
@@ -1 +1 @@
1
- {"version":3,"file":"FileList.js","names":["ItemList","Tooltip","dhPython","vsCode","vsFolder","vsFolderOpened","Log","RangeUtils","FontAwesomeIcon","classNames","React","useCallback","useEffect","useMemo","useRef","useState","isDirectory","FileUtils","MIME_TYPE","log","module","getPathFromItem","file","makePath","filename","getPath","DEFAULT_ROW_HEIGHT","DRAG_HOVER_TIMEOUT","ITEM_LIST_CLASS_NAME","renderFileListItem","props","children","draggedItems","isDragInProgress","isDropTargetValid","isSelected","item","itemIndex","dropTargetItem","onDragStart","onDragOver","onDragEnd","onDrop","isDragged","some","draggedItem","id","itemPath","dropTargetPath","isExactDropTarget","isInDropTarget","isInvalidDropTarget","icon","getItemIcon","depth","getDepth","depthLines","Array","fill","map","value","index","e","basename","placement","isExpanded","mimeType","getMimeType","PYTHON","getMoveOperation","targetItem","length","Error","targetPath","startsWith","files","FileList","isMultiSelect","table","onFocusChange","undefined","onMove","onSelect","onSelectionChange","renderItem","rowHeight","overscanCount","DEFAULT_OVERSCAN","loadedViewport","setLoadedViewport","items","offset","itemCount","viewport","setViewport","top","bottom","setDropTargetItem","setDraggedItems","dragPlaceholder","setDragPlaceholder","selectedRanges","setSelectedRanges","itemList","fileList","getItems","ranges","i","range","j","push","getItem","getDragPlaceholderText","count","dropItems","debug","current","focusItem","err","error","handleSelect","event","setExpanded","handleItemDragStart","debug2","draggedRanges","resetMouseState","newDragPlaceholder","document","createElement","innerHTML","className","body","appendChild","dataTransfer","setDragImage","effectAllowed","handleItemDragOver","preventDefault","handleItemDragEnd","remove","handleItemDrop","handleItemDragExit","handleListDragOver","target","Element","classList","contains","type","handleListDrop","handleSelectionChange","newSelectedRanges","selectedItems","handleFocusChange","focusIndex","focusedItem","handleViewportChange","focusedPath","collapseAll","updateTableViewport","Math","max","setLoadedViewportAndReturnCleanup","listenerRemover","onUpdate","newViewport","itemName","size","expandFolderOnHover","timeout","setTimeout","clearTimeout","renderWrapper","itemProps","onDragExit"],"sources":["../src/FileList.tsx"],"sourcesContent":["import {\n ItemList,\n Range,\n RenderItemProps,\n Tooltip,\n} from '@deephaven/components';\nimport { dhPython, vsCode, vsFolder, vsFolderOpened } from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport { RangeUtils } from '@deephaven/utils';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\nimport classNames from 'classnames';\nimport React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { FileStorageItem, FileStorageTable, isDirectory } from './FileStorage';\nimport './FileList.scss';\nimport FileUtils, { MIME_TYPE } from './FileUtils';\n\nconst log = Log.module('FileList');\n\nexport type LoadedViewport = {\n items: FileStorageItem[];\n offset: number;\n itemCount: number;\n};\n\nexport type ListViewport = {\n top: number;\n bottom: number;\n};\n\nexport type FileListRenderItemProps = RenderItemProps<FileStorageItem> & {\n children?: JSX.Element;\n dropTargetItem?: FileStorageItem;\n draggedItems?: FileStorageItem[];\n isDragInProgress: boolean;\n isDropTargetValid: boolean;\n\n onDragStart(index: number, e: React.DragEvent<HTMLDivElement>): void;\n onDragOver(index: number, e: React.DragEvent<HTMLDivElement>): void;\n onDragEnd(index: number, e: React.DragEvent<HTMLDivElement>): void;\n onDrop(index: number, e: React.DragEvent<HTMLDivElement>): void;\n};\n\nexport interface FileListProps {\n table: FileStorageTable;\n\n isMultiSelect?: boolean;\n focusedPath?: string;\n\n onFocusChange?: (focusedItem?: FileStorageItem) => void;\n onMove: (files: FileStorageItem[], path: string) => void;\n onSelect: (file: FileStorageItem, event: React.SyntheticEvent) => void;\n onSelectionChange?: (selectedItems: FileStorageItem[]) => void;\n\n renderItem?: (props: FileListRenderItemProps) => JSX.Element;\n\n /** Height of each item in the list */\n rowHeight?: number;\n\n overscanCount?: number;\n}\n\nexport const getPathFromItem = (file: FileStorageItem): string =>\n isDirectory(file)\n ? FileUtils.makePath(file.filename)\n : FileUtils.getPath(file.filename);\n\nexport const DEFAULT_ROW_HEIGHT = 26;\n\n// How long you need to hover over a directory before it expands\nexport const DRAG_HOVER_TIMEOUT = 500;\n\nconst ITEM_LIST_CLASS_NAME = 'item-list-scroll-pane';\n\nexport const renderFileListItem = (\n props: FileListRenderItemProps\n): JSX.Element => {\n const {\n children,\n draggedItems,\n isDragInProgress,\n isDropTargetValid,\n isSelected,\n item,\n itemIndex,\n dropTargetItem,\n onDragStart,\n onDragOver,\n onDragEnd,\n onDrop,\n } = props;\n\n const isDragged =\n draggedItems?.some(draggedItem => draggedItem.id === item.id) ?? false;\n const itemPath = getPathFromItem(item);\n const dropTargetPath =\n isDragInProgress && dropTargetItem ? getPathFromItem(dropTargetItem) : null;\n\n const isExactDropTarget =\n isDragInProgress &&\n isDropTargetValid &&\n isDirectory(item) &&\n dropTargetPath === itemPath;\n const isInDropTarget =\n isDragInProgress && isDropTargetValid && dropTargetPath === itemPath;\n const isInvalidDropTarget =\n isDragInProgress && !isDropTargetValid && dropTargetPath === itemPath;\n\n const icon = getItemIcon(item);\n const depth = FileUtils.getDepth(item.filename);\n const depthLines = Array(depth)\n .fill(null)\n .map((value, index) => (\n // eslint-disable-next-line react/no-array-index-key\n <span className=\"file-list-depth-line\" key={index} />\n ));\n\n return (\n <div\n className={classNames(\n 'd-flex w-100 align-items-center',\n 'file-list-item',\n {\n 'is-dragged': isDragged,\n 'is-exact-drop-target': isExactDropTarget,\n 'is-in-drop-target': isInDropTarget,\n 'is-invalid-drop-target': isInvalidDropTarget,\n 'is-selected': isSelected,\n }\n )}\n onDragStart={e => onDragStart(itemIndex, e)}\n onDragOver={e => onDragOver(itemIndex, e)}\n onDragEnd={e => onDragEnd(itemIndex, e)}\n onDrop={e => onDrop(itemIndex, e)}\n draggable\n role=\"presentation\"\n aria-label={item.basename}\n >\n {depthLines}{' '}\n <FontAwesomeIcon icon={icon} className=\"item-icon\" fixedWidth />{' '}\n <span className=\"truncation-wrapper\">\n {children ?? item.basename}\n <Tooltip\n options={{\n placement: 'left',\n }}\n >\n {children ?? item.basename}\n </Tooltip>\n </span>\n </div>\n );\n};\n\n/**\n * Get the icon definition for a file or folder item\n * @param item Item to get the icon for\n * @returns Icon definition to pass in the FontAwesomeIcon icon prop\n */\nexport function getItemIcon(item: FileStorageItem): IconDefinition {\n if (isDirectory(item)) {\n return item.isExpanded ? vsFolderOpened : vsFolder;\n }\n const mimeType = FileUtils.getMimeType(item.basename);\n switch (mimeType) {\n case MIME_TYPE.PYTHON:\n return dhPython;\n default:\n return vsCode;\n }\n}\n\n/**\n * Get the move operation for the current selection and the given target. Throws if the operation is invalid.\n */\nexport function getMoveOperation(\n draggedItems: FileStorageItem[],\n targetItem: FileStorageItem\n): { files: FileStorageItem[]; targetPath: string } {\n if (draggedItems.length === 0 || targetItem == null) {\n throw new Error('No items to move');\n }\n\n const targetPath = getPathFromItem(targetItem);\n if (\n draggedItems.some(\n ({ filename }) => FileUtils.getPath(filename) === targetPath\n )\n ) {\n // Cannot drop if target is one of the dragged items is already in the target folder\n throw new Error('File already in the destination folder');\n }\n if (\n draggedItems.some(\n item =>\n isDirectory(item) &&\n targetPath.startsWith(FileUtils.makePath(item.filename))\n )\n ) {\n // Cannot drop if target is a child of one of the directories being moved\n throw new Error('Destination folder cannot be a child of a dragged folder');\n }\n return { files: draggedItems, targetPath };\n}\n\n/**\n * Component that displays and allows interaction with the file system in the provided FileStorageTable.\n */\nexport function FileList(props: FileListProps): JSX.Element {\n const {\n isMultiSelect = false,\n table,\n onFocusChange = () => undefined,\n onMove,\n onSelect,\n onSelectionChange = () => undefined,\n renderItem = renderFileListItem,\n rowHeight = DEFAULT_ROW_HEIGHT,\n overscanCount = ItemList.DEFAULT_OVERSCAN,\n } = props;\n const [loadedViewport, setLoadedViewport] = useState<LoadedViewport>(() => ({\n items: [],\n offset: 0,\n itemCount: 0,\n }));\n const [viewport, setViewport] = useState<ListViewport>({\n top: 0,\n bottom: 0,\n });\n\n const [dropTargetItem, setDropTargetItem] = useState<FileStorageItem>();\n const [draggedItems, setDraggedItems] = useState<FileStorageItem[]>();\n const [dragPlaceholder, setDragPlaceholder] = useState<HTMLDivElement>();\n const [selectedRanges, setSelectedRanges] = useState([] as Range[]);\n\n const itemList = useRef<ItemList<FileStorageItem>>(null);\n const fileList = useRef<HTMLDivElement>(null);\n\n const getItems = useCallback(\n (ranges: Range[]): FileStorageItem[] => {\n if (ranges.length === 0 || loadedViewport == null) {\n return [];\n }\n\n const items = [] as FileStorageItem[];\n for (let i = 0; i < ranges.length; i += 1) {\n const range = ranges[i];\n for (let j = range[0]; j <= range[1]; j += 1) {\n if (\n j >= loadedViewport.offset &&\n j < loadedViewport.offset + loadedViewport.items.length\n ) {\n items.push(loadedViewport.items[j - loadedViewport.offset]);\n }\n }\n }\n return items;\n },\n [loadedViewport]\n );\n\n const getItem = useCallback(\n (itemIndex: number): FileStorageItem | undefined => {\n const items = getItems([[itemIndex, itemIndex]]);\n if (items.length > 0) {\n return items[0];\n }\n },\n [getItems]\n );\n\n /**\n * Get the placeholder text to show when a drag operation is in progress\n */\n const getDragPlaceholderText = useCallback(() => {\n const count = RangeUtils.count(selectedRanges);\n if (count === 0) {\n return null;\n }\n\n if (count === 1) {\n const index = selectedRanges[0][0];\n const item = getItem(index);\n if (item != null) {\n return item.filename;\n }\n }\n return `${count} items`;\n }, [getItem, selectedRanges]);\n\n /**\n * Drop the currently dragged items at the currently set drop target.\n * If an itemIndex is provided, focus that index after the drop.\n */\n const dropItems = useCallback(\n (itemIndex?: number) => {\n if (!draggedItems || !dropTargetItem) {\n return;\n }\n\n log.debug('dropItems', draggedItems, 'to', itemIndex);\n\n try {\n const { files, targetPath } = getMoveOperation(\n draggedItems,\n dropTargetItem\n );\n onMove(files, targetPath);\n if (itemIndex != null) {\n setSelectedRanges([[itemIndex, itemIndex]]);\n itemList.current?.focusItem(itemIndex);\n }\n } catch (err) {\n log.error('Unable to complete move', err);\n }\n },\n [draggedItems, dropTargetItem, onMove]\n );\n\n const handleSelect = useCallback(\n (itemIndex: number, event: React.SyntheticEvent) => {\n const item = loadedViewport.items[itemIndex - loadedViewport.offset];\n if (item !== undefined) {\n log.debug('handleItemClick', item);\n\n onSelect(item, event);\n if (isDirectory(item)) {\n table?.setExpanded(item.filename, !item.isExpanded);\n }\n }\n },\n [loadedViewport, onSelect, table]\n );\n\n const handleItemDragStart = useCallback(\n (itemIndex: number, e: React.DragEvent<HTMLDivElement>) => {\n log.debug2('handleItemDragStart', itemIndex, selectedRanges);\n\n let draggedRanges = selectedRanges;\n if (!RangeUtils.isSelected(selectedRanges, itemIndex)) {\n draggedRanges = [[itemIndex, itemIndex]];\n setSelectedRanges(draggedRanges);\n }\n\n setDraggedItems(getItems(draggedRanges));\n\n // We need to reset reset the mouse state since we steal the drag\n itemList.current?.resetMouseState();\n\n const newDragPlaceholder = document.createElement('div');\n newDragPlaceholder.innerHTML = `<div class=\"dnd-placeholder-content\">${getDragPlaceholderText()}</div>`;\n newDragPlaceholder.className = 'file-list-dnd-placeholder';\n document.body.appendChild(newDragPlaceholder);\n e.dataTransfer.setDragImage(newDragPlaceholder, 0, 0);\n e.dataTransfer.effectAllowed = 'move';\n setDragPlaceholder(newDragPlaceholder);\n },\n [getDragPlaceholderText, getItems, selectedRanges]\n );\n\n const handleItemDragOver = useCallback(\n (itemIndex: number, e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n\n log.debug2('handleItemDragOver', e);\n setDropTargetItem(getItem(itemIndex));\n },\n [getItem]\n );\n\n const handleItemDragEnd = useCallback(\n (itemIndex: number, e: React.DragEvent<HTMLDivElement>) => {\n log.debug('handleItemDragEnd', itemIndex);\n\n dragPlaceholder?.remove();\n\n // Drag end is triggered after drop\n // Also drop isn't triggered if drag end is outside of the list\n setDraggedItems(undefined);\n setDropTargetItem(undefined);\n setDragPlaceholder(undefined);\n },\n [dragPlaceholder]\n );\n\n const handleItemDrop = useCallback(\n (itemIndex: number, e: React.DragEvent<HTMLDivElement>) => {\n dropItems(itemIndex);\n },\n [dropItems]\n );\n\n const handleItemDragExit = useCallback(() => {\n log.debug2('handleItemDragExit');\n setDropTargetItem(undefined);\n }, []);\n\n const handleListDragOver = useCallback(\n (e: React.DragEvent<HTMLDivElement>) => {\n if (\n e.target instanceof Element &&\n e.target.classList.contains(ITEM_LIST_CLASS_NAME)\n ) {\n // Need to prevent default to enable drop\n // https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Drag_operations#droptargets\n e.preventDefault();\n\n log.debug2('handleListDragOver', e);\n setDropTargetItem({\n type: 'directory',\n filename: '/',\n basename: '/',\n id: '/',\n });\n }\n },\n []\n );\n\n const handleListDrop = useCallback(\n (e: React.DragEvent<HTMLDivElement>) => {\n if (\n e.target instanceof Element &&\n e.target.classList.contains(ITEM_LIST_CLASS_NAME)\n ) {\n log.debug('handleListDrop');\n dropItems();\n }\n },\n [dropItems]\n );\n\n const handleSelectionChange = useCallback(\n newSelectedRanges => {\n log.debug2('handleSelectionChange', newSelectedRanges);\n if (newSelectedRanges !== selectedRanges) {\n setSelectedRanges(newSelectedRanges);\n const selectedItems = getItems(newSelectedRanges);\n onSelectionChange(selectedItems);\n }\n },\n [getItems, onSelectionChange, selectedRanges]\n );\n\n const handleFocusChange = useCallback(\n focusIndex => {\n log.debug2('handleFocusChange', focusIndex);\n if (focusIndex != null) {\n const [focusedItem] = getItems([[focusIndex, focusIndex]]);\n onFocusChange(focusedItem);\n } else {\n onFocusChange();\n }\n },\n [getItems, onFocusChange]\n );\n\n const handleViewportChange = useCallback(\n (top: number, bottom: number) => {\n log.debug('handleViewportChange', top, bottom);\n if (top !== viewport.top || bottom !== viewport.bottom) {\n setViewport({ top, bottom });\n }\n },\n [viewport]\n );\n\n const isDropTargetValid = useMemo(() => {\n if (!draggedItems || !dropTargetItem) {\n return false;\n }\n\n try {\n getMoveOperation(draggedItems, dropTargetItem);\n log.debug('handleValidateDropTarget true');\n return true;\n } catch (e) {\n log.debug('handleValidateDropTarget false');\n return false;\n }\n }, [draggedItems, dropTargetItem]);\n\n const { focusedPath } = props;\n useEffect(() => {\n if (focusedPath !== undefined) {\n if (focusedPath === '/') {\n table.collapseAll();\n } else {\n table.setExpanded(focusedPath, false);\n table.setExpanded(focusedPath, true);\n }\n }\n }, [table, focusedPath]);\n\n useEffect(\n function updateTableViewport() {\n log.debug('updating table viewport', viewport);\n table?.setViewport({\n top: Math.max(0, viewport.top - overscanCount),\n bottom: viewport.bottom + overscanCount,\n });\n },\n [overscanCount, table, viewport]\n );\n\n // Listen for table updates\n useEffect(\n function setLoadedViewportAndReturnCleanup() {\n const listenerRemover = table.onUpdate(newViewport => {\n setLoadedViewport({\n items: newViewport.items.map(item => ({\n ...item,\n itemName: item.basename,\n })),\n offset: newViewport.offset,\n itemCount: table.size,\n });\n });\n return () => {\n listenerRemover();\n };\n },\n [table]\n );\n\n // Expand a folder if hovering over it\n useEffect(\n function expandFolderOnHover() {\n if (\n dropTargetItem != null &&\n isDirectory(dropTargetItem) &&\n dropTargetItem.filename !== '/'\n ) {\n const timeout = setTimeout(() => {\n if (!dropTargetItem.isExpanded) {\n table?.setExpanded(dropTargetItem.filename, true);\n }\n }, DRAG_HOVER_TIMEOUT);\n return () => clearTimeout(timeout);\n }\n },\n [dropTargetItem, table]\n );\n\n const renderWrapper = useCallback(\n itemProps =>\n renderItem({\n ...itemProps,\n isDragInProgress: draggedItems != null,\n dropTargetItem,\n draggedItems,\n isDropTargetValid,\n onDragStart: handleItemDragStart,\n onDragEnd: handleItemDragEnd,\n onDragOver: handleItemDragOver,\n onDragExit: handleItemDragExit,\n onDrop: handleItemDrop,\n }),\n [\n handleItemDragEnd,\n handleItemDragExit,\n handleItemDragOver,\n handleItemDragStart,\n handleItemDrop,\n draggedItems,\n dropTargetItem,\n isDropTargetValid,\n renderItem,\n ]\n );\n\n return (\n <div\n ref={fileList}\n className={classNames('file-list', {\n 'is-dragging': draggedItems != null,\n })}\n onDragOver={handleListDragOver}\n onDrop={handleListDrop}\n >\n <ItemList\n ref={itemList}\n items={loadedViewport.items}\n itemCount={loadedViewport.itemCount}\n offset={loadedViewport.offset}\n onFocusChange={handleFocusChange}\n onSelect={handleSelect}\n onSelectionChange={handleSelectionChange}\n onViewportChange={handleViewportChange}\n selectedRanges={selectedRanges}\n renderItem={renderWrapper}\n rowHeight={rowHeight}\n isMultiSelect={isMultiSelect}\n isDragSelect={false}\n isDeselectOnClick={false}\n />\n </div>\n );\n}\n\nexport default FileList;\n"],"mappings":"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"}
1
+ {"version":3,"file":"FileList.js","names":["ItemList","Tooltip","dhPython","vsCode","vsFolder","vsFolderOpened","Log","RangeUtils","FontAwesomeIcon","classNames","React","useCallback","useEffect","useMemo","useRef","useState","isDirectory","FileUtils","MIME_TYPE","log","module","getPathFromItem","file","makePath","filename","getPath","DEFAULT_ROW_HEIGHT","DRAG_HOVER_TIMEOUT","ITEM_LIST_CLASS_NAME","renderFileListItem","props","children","draggedItems","isDragInProgress","isDropTargetValid","isSelected","item","itemIndex","dropTargetItem","onDragStart","onDragOver","onDragEnd","onDrop","isDragged","some","draggedItem","id","itemPath","dropTargetPath","isExactDropTarget","isInDropTarget","isInvalidDropTarget","icon","getItemIcon","depth","getDepth","depthLines","Array","fill","map","value","index","e","basename","placement","isExpanded","mimeType","getMimeType","PYTHON","getMoveOperation","targetItem","length","Error","targetPath","startsWith","files","FileList","isMultiSelect","table","onFocusChange","undefined","onMove","onSelect","onSelectionChange","renderItem","rowHeight","overscanCount","DEFAULT_OVERSCAN","loadedViewport","setLoadedViewport","items","offset","itemCount","viewport","setViewport","top","bottom","setDropTargetItem","setDraggedItems","dragPlaceholder","setDragPlaceholder","selectedRanges","setSelectedRanges","itemList","fileList","getItems","ranges","i","range","j","push","getItem","getDragPlaceholderText","count","dropItems","debug","current","focusItem","err","error","handleSelect","event","setExpanded","handleItemDragStart","debug2","draggedRanges","resetMouseState","newDragPlaceholder","document","createElement","innerHTML","className","body","appendChild","dataTransfer","setDragImage","effectAllowed","handleItemDragOver","preventDefault","handleItemDragEnd","remove","handleItemDrop","handleItemDragExit","handleListDragOver","target","Element","classList","contains","type","handleListDrop","handleSelectionChange","newSelectedRanges","selectedItems","handleFocusChange","focusIndex","focusedItem","handleViewportChange","focusedPath","collapseAll","updateTableViewport","Math","max","setLoadedViewportAndReturnCleanup","listenerRemover","onUpdate","newViewport","itemName","size","expandFolderOnHover","timeout","setTimeout","clearTimeout","renderWrapper","itemProps","onDragExit"],"sources":["../src/FileList.tsx"],"sourcesContent":["import {\n ItemList,\n Range,\n RenderItemProps,\n Tooltip,\n} from '@deephaven/components';\nimport { dhPython, vsCode, vsFolder, vsFolderOpened } from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport { RangeUtils } from '@deephaven/utils';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\nimport classNames from 'classnames';\nimport React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { FileStorageItem, FileStorageTable, isDirectory } from './FileStorage';\nimport './FileList.scss';\nimport FileUtils, { MIME_TYPE } from './FileUtils';\n\nconst log = Log.module('FileList');\n\nexport type LoadedViewport = {\n items: FileStorageItem[];\n offset: number;\n itemCount: number;\n};\n\nexport type ListViewport = {\n top: number;\n bottom: number;\n};\n\nexport type FileListRenderItemProps = RenderItemProps<FileStorageItem> & {\n children?: JSX.Element;\n dropTargetItem?: FileStorageItem;\n draggedItems?: FileStorageItem[];\n isDragInProgress: boolean;\n isDropTargetValid: boolean;\n\n onDragStart(index: number, e: React.DragEvent<HTMLDivElement>): void;\n onDragOver(index: number, e: React.DragEvent<HTMLDivElement>): void;\n onDragEnd(index: number, e: React.DragEvent<HTMLDivElement>): void;\n onDrop(index: number, e: React.DragEvent<HTMLDivElement>): void;\n};\n\nexport interface FileListProps {\n table: FileStorageTable;\n\n isMultiSelect?: boolean;\n focusedPath?: string;\n\n onFocusChange?: (focusedItem?: FileStorageItem) => void;\n onMove?: (files: FileStorageItem[], path: string) => void;\n onSelect: (file: FileStorageItem, event: React.SyntheticEvent) => void;\n onSelectionChange?: (selectedItems: FileStorageItem[]) => void;\n\n renderItem?: (props: FileListRenderItemProps) => JSX.Element;\n\n /** Height of each item in the list */\n rowHeight?: number;\n\n overscanCount?: number;\n}\n\nexport const getPathFromItem = (file: FileStorageItem): string =>\n isDirectory(file)\n ? FileUtils.makePath(file.filename)\n : FileUtils.getPath(file.filename);\n\nexport const DEFAULT_ROW_HEIGHT = 26;\n\n// How long you need to hover over a directory before it expands\nexport const DRAG_HOVER_TIMEOUT = 500;\n\nconst ITEM_LIST_CLASS_NAME = 'item-list-scroll-pane';\n\nexport const renderFileListItem = (\n props: FileListRenderItemProps\n): JSX.Element => {\n const {\n children,\n draggedItems,\n isDragInProgress,\n isDropTargetValid,\n isSelected,\n item,\n itemIndex,\n dropTargetItem,\n onDragStart,\n onDragOver,\n onDragEnd,\n onDrop,\n } = props;\n\n const isDragged =\n draggedItems?.some(draggedItem => draggedItem.id === item.id) ?? false;\n const itemPath = getPathFromItem(item);\n const dropTargetPath =\n isDragInProgress && dropTargetItem ? getPathFromItem(dropTargetItem) : null;\n\n const isExactDropTarget =\n isDragInProgress &&\n isDropTargetValid &&\n isDirectory(item) &&\n dropTargetPath === itemPath;\n const isInDropTarget =\n isDragInProgress && isDropTargetValid && dropTargetPath === itemPath;\n const isInvalidDropTarget =\n isDragInProgress && !isDropTargetValid && dropTargetPath === itemPath;\n\n const icon = getItemIcon(item);\n const depth = FileUtils.getDepth(item.filename);\n const depthLines = Array(depth)\n .fill(null)\n .map((value, index) => (\n // eslint-disable-next-line react/no-array-index-key\n <span className=\"file-list-depth-line\" key={index} />\n ));\n\n return (\n <div\n className={classNames(\n 'd-flex w-100 align-items-center',\n 'file-list-item',\n {\n 'is-dragged': isDragged,\n 'is-exact-drop-target': isExactDropTarget,\n 'is-in-drop-target': isInDropTarget,\n 'is-invalid-drop-target': isInvalidDropTarget,\n 'is-selected': isSelected,\n }\n )}\n onDragStart={e => onDragStart(itemIndex, e)}\n onDragOver={e => onDragOver(itemIndex, e)}\n onDragEnd={e => onDragEnd(itemIndex, e)}\n onDrop={e => onDrop(itemIndex, e)}\n draggable\n role=\"presentation\"\n aria-label={item.basename}\n >\n {depthLines}{' '}\n <FontAwesomeIcon icon={icon} className=\"item-icon\" fixedWidth />{' '}\n <span className=\"truncation-wrapper\">\n {children ?? item.basename}\n <Tooltip\n options={{\n placement: 'left',\n }}\n >\n {children ?? item.basename}\n </Tooltip>\n </span>\n </div>\n );\n};\n\n/**\n * Get the icon definition for a file or folder item\n * @param item Item to get the icon for\n * @returns Icon definition to pass in the FontAwesomeIcon icon prop\n */\nexport function getItemIcon(item: FileStorageItem): IconDefinition {\n if (isDirectory(item)) {\n return item.isExpanded ? vsFolderOpened : vsFolder;\n }\n const mimeType = FileUtils.getMimeType(item.basename);\n switch (mimeType) {\n case MIME_TYPE.PYTHON:\n return dhPython;\n default:\n return vsCode;\n }\n}\n\n/**\n * Get the move operation for the current selection and the given target. Throws if the operation is invalid.\n */\nexport function getMoveOperation(\n draggedItems: FileStorageItem[],\n targetItem: FileStorageItem\n): { files: FileStorageItem[]; targetPath: string } {\n if (draggedItems.length === 0 || targetItem == null) {\n throw new Error('No items to move');\n }\n\n const targetPath = getPathFromItem(targetItem);\n if (\n draggedItems.some(\n ({ filename }) => FileUtils.getPath(filename) === targetPath\n )\n ) {\n // Cannot drop if target is one of the dragged items is already in the target folder\n throw new Error('File already in the destination folder');\n }\n if (\n draggedItems.some(\n item =>\n isDirectory(item) &&\n targetPath.startsWith(FileUtils.makePath(item.filename))\n )\n ) {\n // Cannot drop if target is a child of one of the directories being moved\n throw new Error('Destination folder cannot be a child of a dragged folder');\n }\n return { files: draggedItems, targetPath };\n}\n\n/**\n * Component that displays and allows interaction with the file system in the provided FileStorageTable.\n */\nexport function FileList(props: FileListProps): JSX.Element {\n const {\n isMultiSelect = false,\n table,\n onFocusChange = () => undefined,\n onMove,\n onSelect,\n onSelectionChange = () => undefined,\n renderItem = renderFileListItem,\n rowHeight = DEFAULT_ROW_HEIGHT,\n overscanCount = ItemList.DEFAULT_OVERSCAN,\n } = props;\n const [loadedViewport, setLoadedViewport] = useState<LoadedViewport>(() => ({\n items: [],\n offset: 0,\n itemCount: 0,\n }));\n const [viewport, setViewport] = useState<ListViewport>({\n top: 0,\n bottom: 0,\n });\n\n const [dropTargetItem, setDropTargetItem] = useState<FileStorageItem>();\n const [draggedItems, setDraggedItems] = useState<FileStorageItem[]>();\n const [dragPlaceholder, setDragPlaceholder] = useState<HTMLDivElement>();\n const [selectedRanges, setSelectedRanges] = useState([] as Range[]);\n\n const itemList = useRef<ItemList<FileStorageItem>>(null);\n const fileList = useRef<HTMLDivElement>(null);\n\n const getItems = useCallback(\n (ranges: Range[]): FileStorageItem[] => {\n if (ranges.length === 0 || loadedViewport == null) {\n return [];\n }\n\n const items = [] as FileStorageItem[];\n for (let i = 0; i < ranges.length; i += 1) {\n const range = ranges[i];\n for (let j = range[0]; j <= range[1]; j += 1) {\n if (\n j >= loadedViewport.offset &&\n j < loadedViewport.offset + loadedViewport.items.length\n ) {\n items.push(loadedViewport.items[j - loadedViewport.offset]);\n }\n }\n }\n return items;\n },\n [loadedViewport]\n );\n\n const getItem = useCallback(\n (itemIndex: number): FileStorageItem | undefined => {\n const items = getItems([[itemIndex, itemIndex]]);\n if (items.length > 0) {\n return items[0];\n }\n },\n [getItems]\n );\n\n /**\n * Get the placeholder text to show when a drag operation is in progress\n */\n const getDragPlaceholderText = useCallback(() => {\n const count = RangeUtils.count(selectedRanges);\n if (count === 0) {\n return null;\n }\n\n if (count === 1) {\n const index = selectedRanges[0][0];\n const item = getItem(index);\n if (item != null) {\n return item.filename;\n }\n }\n return `${count} items`;\n }, [getItem, selectedRanges]);\n\n /**\n * Drop the currently dragged items at the currently set drop target.\n * If an itemIndex is provided, focus that index after the drop.\n */\n const dropItems = useCallback(\n (itemIndex?: number) => {\n if (!draggedItems || !dropTargetItem) {\n return;\n }\n\n log.debug('dropItems', draggedItems, 'to', itemIndex);\n\n try {\n const { files, targetPath } = getMoveOperation(\n draggedItems,\n dropTargetItem\n );\n onMove?.(files, targetPath);\n if (itemIndex != null) {\n setSelectedRanges([[itemIndex, itemIndex]]);\n itemList.current?.focusItem(itemIndex);\n }\n } catch (err) {\n log.error('Unable to complete move', err);\n }\n },\n [draggedItems, dropTargetItem, onMove]\n );\n\n const handleSelect = useCallback(\n (itemIndex: number, event: React.SyntheticEvent) => {\n const item = loadedViewport.items[itemIndex - loadedViewport.offset];\n if (item !== undefined) {\n log.debug('handleItemClick', item);\n\n onSelect(item, event);\n if (isDirectory(item)) {\n table?.setExpanded(item.filename, !item.isExpanded);\n }\n }\n },\n [loadedViewport, onSelect, table]\n );\n\n const handleItemDragStart = useCallback(\n (itemIndex: number, e: React.DragEvent<HTMLDivElement>) => {\n log.debug2('handleItemDragStart', itemIndex, selectedRanges);\n\n let draggedRanges = selectedRanges;\n if (!RangeUtils.isSelected(selectedRanges, itemIndex)) {\n draggedRanges = [[itemIndex, itemIndex]];\n setSelectedRanges(draggedRanges);\n }\n\n setDraggedItems(getItems(draggedRanges));\n\n // We need to reset reset the mouse state since we steal the drag\n itemList.current?.resetMouseState();\n\n const newDragPlaceholder = document.createElement('div');\n newDragPlaceholder.innerHTML = `<div class=\"dnd-placeholder-content\">${getDragPlaceholderText()}</div>`;\n newDragPlaceholder.className = 'file-list-dnd-placeholder';\n document.body.appendChild(newDragPlaceholder);\n e.dataTransfer.setDragImage(newDragPlaceholder, 0, 0);\n e.dataTransfer.effectAllowed = 'move';\n setDragPlaceholder(newDragPlaceholder);\n },\n [getDragPlaceholderText, getItems, selectedRanges]\n );\n\n const handleItemDragOver = useCallback(\n (itemIndex: number, e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n\n log.debug2('handleItemDragOver', e);\n setDropTargetItem(getItem(itemIndex));\n },\n [getItem]\n );\n\n const handleItemDragEnd = useCallback(\n (itemIndex: number, e: React.DragEvent<HTMLDivElement>) => {\n log.debug('handleItemDragEnd', itemIndex);\n\n dragPlaceholder?.remove();\n\n // Drag end is triggered after drop\n // Also drop isn't triggered if drag end is outside of the list\n setDraggedItems(undefined);\n setDropTargetItem(undefined);\n setDragPlaceholder(undefined);\n },\n [dragPlaceholder]\n );\n\n const handleItemDrop = useCallback(\n (itemIndex: number, e: React.DragEvent<HTMLDivElement>) => {\n dropItems(itemIndex);\n },\n [dropItems]\n );\n\n const handleItemDragExit = useCallback(() => {\n log.debug2('handleItemDragExit');\n setDropTargetItem(undefined);\n }, []);\n\n const handleListDragOver = useCallback(\n (e: React.DragEvent<HTMLDivElement>) => {\n if (\n e.target instanceof Element &&\n e.target.classList.contains(ITEM_LIST_CLASS_NAME)\n ) {\n // Need to prevent default to enable drop\n // https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Drag_operations#droptargets\n e.preventDefault();\n\n log.debug2('handleListDragOver', e);\n setDropTargetItem({\n type: 'directory',\n filename: '/',\n basename: '/',\n id: '/',\n });\n }\n },\n []\n );\n\n const handleListDrop = useCallback(\n (e: React.DragEvent<HTMLDivElement>) => {\n if (\n e.target instanceof Element &&\n e.target.classList.contains(ITEM_LIST_CLASS_NAME)\n ) {\n log.debug('handleListDrop');\n dropItems();\n }\n },\n [dropItems]\n );\n\n const handleSelectionChange = useCallback(\n newSelectedRanges => {\n log.debug2('handleSelectionChange', newSelectedRanges);\n if (newSelectedRanges !== selectedRanges) {\n setSelectedRanges(newSelectedRanges);\n const selectedItems = getItems(newSelectedRanges);\n onSelectionChange(selectedItems);\n }\n },\n [getItems, onSelectionChange, selectedRanges]\n );\n\n const handleFocusChange = useCallback(\n focusIndex => {\n log.debug2('handleFocusChange', focusIndex);\n if (focusIndex != null) {\n const [focusedItem] = getItems([[focusIndex, focusIndex]]);\n onFocusChange(focusedItem);\n } else {\n onFocusChange();\n }\n },\n [getItems, onFocusChange]\n );\n\n const handleViewportChange = useCallback(\n (top: number, bottom: number) => {\n log.debug('handleViewportChange', top, bottom);\n if (top !== viewport.top || bottom !== viewport.bottom) {\n setViewport({ top, bottom });\n }\n },\n [viewport]\n );\n\n const isDropTargetValid = useMemo(() => {\n if (!draggedItems || !dropTargetItem) {\n return false;\n }\n\n try {\n getMoveOperation(draggedItems, dropTargetItem);\n log.debug('handleValidateDropTarget true');\n return true;\n } catch (e) {\n log.debug('handleValidateDropTarget false');\n return false;\n }\n }, [draggedItems, dropTargetItem]);\n\n const { focusedPath } = props;\n useEffect(() => {\n if (focusedPath !== undefined) {\n if (focusedPath === '/') {\n table.collapseAll();\n } else {\n table.setExpanded(focusedPath, false);\n table.setExpanded(focusedPath, true);\n }\n }\n }, [table, focusedPath]);\n\n useEffect(\n function updateTableViewport() {\n log.debug('updating table viewport', viewport);\n table?.setViewport({\n top: Math.max(0, viewport.top - overscanCount),\n bottom: viewport.bottom + overscanCount,\n });\n },\n [overscanCount, table, viewport]\n );\n\n // Listen for table updates\n useEffect(\n function setLoadedViewportAndReturnCleanup() {\n const listenerRemover = table.onUpdate(newViewport => {\n setLoadedViewport({\n items: newViewport.items.map(item => ({\n ...item,\n itemName: item.basename,\n })),\n offset: newViewport.offset,\n itemCount: table.size,\n });\n });\n return () => {\n listenerRemover();\n };\n },\n [table]\n );\n\n // Expand a folder if hovering over it\n useEffect(\n function expandFolderOnHover() {\n if (\n dropTargetItem != null &&\n isDirectory(dropTargetItem) &&\n dropTargetItem.filename !== '/'\n ) {\n const timeout = setTimeout(() => {\n if (!dropTargetItem.isExpanded) {\n table?.setExpanded(dropTargetItem.filename, true);\n }\n }, DRAG_HOVER_TIMEOUT);\n return () => clearTimeout(timeout);\n }\n },\n [dropTargetItem, table]\n );\n\n const renderWrapper = useCallback(\n itemProps =>\n renderItem({\n ...itemProps,\n isDragInProgress: draggedItems != null,\n dropTargetItem,\n draggedItems,\n isDropTargetValid,\n onDragStart: handleItemDragStart,\n onDragEnd: handleItemDragEnd,\n onDragOver: handleItemDragOver,\n onDragExit: handleItemDragExit,\n onDrop: handleItemDrop,\n }),\n [\n handleItemDragEnd,\n handleItemDragExit,\n handleItemDragOver,\n handleItemDragStart,\n handleItemDrop,\n draggedItems,\n dropTargetItem,\n isDropTargetValid,\n renderItem,\n ]\n );\n\n return (\n <div\n ref={fileList}\n className={classNames('file-list', {\n 'is-dragging': draggedItems != null,\n })}\n onDragOver={handleListDragOver}\n onDrop={handleListDrop}\n >\n <ItemList\n ref={itemList}\n items={loadedViewport.items}\n itemCount={loadedViewport.itemCount}\n offset={loadedViewport.offset}\n onFocusChange={handleFocusChange}\n onSelect={handleSelect}\n onSelectionChange={handleSelectionChange}\n onViewportChange={handleViewportChange}\n selectedRanges={selectedRanges}\n renderItem={renderWrapper}\n rowHeight={rowHeight}\n isMultiSelect={isMultiSelect}\n isDragSelect={false}\n isDeselectOnClick={false}\n />\n </div>\n );\n}\n\nexport default FileList;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FileListContainer.d.ts","sourceRoot":"","sources":["../src/FileListContainer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAM9D,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAe,MAAM,eAAe,CAAC;AAE/E,OAAO,qBAAqB,CAAC;AAI7B,MAAM,WAAW,sBAAsB;IACrC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,EAAE,gBAAgB,CAAC;IAExB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;IAC9C,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5D,QAAQ,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,cAAc,KAAK,IAAI,CAAC;IACvE,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3E,iBAAiB,CAAC,EAAE,CAAC,aAAa,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;IAE/D,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,GAAG,CAAC,OAAO,CAgM5E;yBAhMe,iBAAiB;;;AAoMjC,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"FileListContainer.d.ts","sourceRoot":"","sources":["../src/FileListContainer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAM9D,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAe,MAAM,eAAe,CAAC;AAE/E,OAAO,qBAAqB,CAAC;AAI7B,MAAM,WAAW,sBAAsB;IACrC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,EAAE,gBAAgB,CAAC;IAExB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;IAC9C,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5D,QAAQ,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,cAAc,KAAK,IAAI,CAAC;IACvE,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3E,iBAAiB,CAAC,EAAE,CAAC,aAAa,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;IAE/D,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,GAAG,CAAC,OAAO,CA8L5E;yBA9Le,iBAAiB;;;AAkMjC,eAAe,iBAAiB,CAAC"}
@@ -4,6 +4,7 @@ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key i
4
4
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
5
5
  function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
6
6
  import { ContextActions } from '@deephaven/components';
7
+ import { assertNotNull } from '@deephaven/utils';
7
8
  import React, { useCallback, useMemo, useState } from 'react';
8
9
  import FileList, { renderFileListItem, DEFAULT_ROW_HEIGHT } from "./FileList.js";
9
10
  import { isDirectory } from "./FileStorage.js";
@@ -23,7 +24,7 @@ export function FileListContainer(props) {
23
24
  onCreateFolder,
24
25
  onCopy,
25
26
  onDelete,
26
- onMove = () => undefined,
27
+ onMove,
27
28
  onRename,
28
29
  onSelect,
29
30
  onSelectionChange,
@@ -126,10 +127,8 @@ export function FileListContainer(props) {
126
127
  return result;
127
128
  }, [handleCopyAction, handleDeleteAction, handleNewFileAction, handleNewFolderAction, handleRenameAction, focusedItem, onCopy, onCreateFile, onCreateFolder, onDelete, onRename, selectedItems, renameItem]);
128
129
  var validateRenameItem = useCallback(newName => {
129
- if (renameItem) {
130
- return validateRename(renameItem, newName);
131
- }
132
- return Promise.reject(new Error('No rename item'));
130
+ assertNotNull(renameItem);
131
+ return validateRename(renameItem, newName);
133
132
  }, [renameItem, validateRename]);
134
133
  var renderItem = useCallback(itemProps => {
135
134
  var {
@@ -1 +1 @@
1
- {"version":3,"file":"FileListContainer.js","names":["ContextActions","React","useCallback","useMemo","useState","FileList","renderFileListItem","DEFAULT_ROW_HEIGHT","isDirectory","SHORTCUTS","FileUtils","FileListItemEditor","FileListContainer","props","isMultiSelect","focusedPath","showContextMenu","onCreateFile","onCreateFolder","onCopy","onDelete","onMove","undefined","onRename","onSelect","onSelectionChange","table","rowHeight","validateRename","Promise","resolve","renameItem","setRenameItem","selectedItems","setSelectedItems","focusedItem","setFocusedItem","handleSelectionChange","newSelectedItems","handleFocusChange","newFocusedItem","handleCopyAction","handleDeleteAction","length","handleNewFileAction","handleNewFolderAction","getPath","filename","handleRenameAction","handleRenameCancel","handleRenameSubmit","newName","actions","result","push","title","description","action","group","groups","medium","low","disabled","shortcut","FILE_EXPLORER","DELETE","RENAME","validateRenameItem","reject","Error","renderItem","itemProps","item","children","displayName"],"sources":["../src/FileListContainer.tsx"],"sourcesContent":["import { ContextAction, ContextActions } from '@deephaven/components';\nimport React, { useCallback, useMemo, useState } from 'react';\nimport FileList, {\n renderFileListItem,\n DEFAULT_ROW_HEIGHT,\n FileListRenderItemProps,\n} from './FileList';\nimport { FileStorageItem, FileStorageTable, isDirectory } from './FileStorage';\nimport SHORTCUTS from './FileExplorerShortcuts';\nimport './FileExplorer.scss';\nimport FileUtils from './FileUtils';\nimport FileListItemEditor from './FileListItemEditor';\n\nexport interface FileListContainerProps {\n showContextMenu?: boolean;\n table: FileStorageTable;\n\n isMultiSelect?: boolean;\n focusedPath?: string;\n\n onCreateFile?: (path?: string) => void;\n onCreateFolder?: (path?: string) => void;\n onCopy?: (file: FileStorageItem) => void;\n onDelete?: (files: FileStorageItem[]) => void;\n onMove?: (files: FileStorageItem[], path: string) => void;\n onRename?: (file: FileStorageItem, newName: string) => void;\n onSelect: (file: FileStorageItem, event: React.SyntheticEvent) => void;\n validateRename?: (file: FileStorageItem, newName: string) => Promise<void>;\n onSelectionChange?: (selectedItems: FileStorageItem[]) => void;\n\n /** Height of each item in the list */\n rowHeight?: number;\n}\n\n/**\n * Component that displays and allows interaction with the file system in the provided FileStorage.\n */\nexport function FileListContainer(props: FileListContainerProps): JSX.Element {\n const {\n isMultiSelect = false,\n focusedPath,\n showContextMenu = false,\n onCreateFile,\n onCreateFolder,\n onCopy,\n onDelete,\n onMove = () => undefined,\n onRename,\n onSelect,\n onSelectionChange,\n table,\n rowHeight = DEFAULT_ROW_HEIGHT,\n validateRename = () => Promise.resolve(),\n } = props;\n const [renameItem, setRenameItem] = useState<FileStorageItem>();\n const [selectedItems, setSelectedItems] = useState([] as FileStorageItem[]);\n const [focusedItem, setFocusedItem] = useState<FileStorageItem>();\n\n const handleSelectionChange = useCallback(\n newSelectedItems => {\n setSelectedItems(newSelectedItems);\n onSelectionChange?.(newSelectedItems);\n },\n [onSelectionChange]\n );\n\n const handleFocusChange = useCallback(newFocusedItem => {\n setFocusedItem(newFocusedItem);\n }, []);\n\n const handleCopyAction = useCallback(() => {\n if (focusedItem) {\n onCopy?.(focusedItem);\n }\n }, [focusedItem, onCopy]);\n\n const handleDeleteAction = useCallback(() => {\n if (selectedItems.length > 0) {\n onDelete?.(selectedItems);\n }\n }, [onDelete, selectedItems]);\n\n const handleNewFileAction = useCallback(() => {\n onCreateFile?.();\n }, [onCreateFile]);\n\n const handleNewFolderAction = useCallback(() => {\n if (focusedItem) {\n onCreateFolder?.(FileUtils.getPath(focusedItem.filename));\n }\n }, [focusedItem, onCreateFolder]);\n\n const handleRenameAction = useCallback(() => {\n if (focusedItem) {\n setRenameItem(focusedItem);\n }\n }, [focusedItem]);\n\n const handleRenameCancel = useCallback((): void => {\n setRenameItem(undefined);\n }, []);\n\n const handleRenameSubmit = useCallback(\n (newName: string): void => {\n if (renameItem) {\n onRename?.(renameItem, newName);\n setRenameItem(undefined);\n }\n },\n [onRename, renameItem]\n );\n\n const actions = useMemo(() => {\n if (renameItem) {\n // While renaming, we don't want to enable any of the context actions or it may interfere with renaming input\n return [];\n }\n\n const result = [] as ContextAction[];\n if (onCreateFile) {\n result.push({\n title: 'New File',\n description: 'Create new file',\n action: handleNewFileAction,\n group: ContextActions.groups.medium,\n });\n }\n if (onCreateFolder) {\n result.push({\n title: 'New Folder',\n description: 'Create new folder',\n action: handleNewFolderAction,\n group: ContextActions.groups.medium,\n });\n }\n if (onCopy) {\n result.push({\n title: 'Copy',\n description: 'Copy',\n action: handleCopyAction,\n group: ContextActions.groups.low,\n disabled: focusedItem == null || isDirectory(focusedItem),\n });\n }\n if (onDelete && selectedItems.length > 0) {\n result.push({\n title: 'Delete',\n description: 'Delete',\n shortcut: SHORTCUTS.FILE_EXPLORER.DELETE,\n action: handleDeleteAction,\n group: ContextActions.groups.low,\n });\n }\n if (onRename) {\n result.push({\n title: 'Rename',\n description: 'Rename',\n shortcut: SHORTCUTS.FILE_EXPLORER.RENAME,\n action: handleRenameAction,\n group: ContextActions.groups.low,\n disabled: focusedItem == null,\n });\n }\n return result;\n }, [\n handleCopyAction,\n handleDeleteAction,\n handleNewFileAction,\n handleNewFolderAction,\n handleRenameAction,\n focusedItem,\n onCopy,\n onCreateFile,\n onCreateFolder,\n onDelete,\n onRename,\n selectedItems,\n renameItem,\n ]);\n\n const validateRenameItem = useCallback(\n (newName: string): Promise<void> => {\n if (renameItem) {\n return validateRename(renameItem, newName);\n }\n return Promise.reject(new Error('No rename item'));\n },\n [renameItem, validateRename]\n );\n\n const renderItem = useCallback(\n (itemProps: FileListRenderItemProps): JSX.Element => {\n const { item } = itemProps;\n if (renameItem && renameItem.filename === item.filename) {\n return renderFileListItem({\n ...itemProps,\n children: (\n <FileListItemEditor\n item={item}\n validate={validateRenameItem}\n onSubmit={handleRenameSubmit}\n onCancel={handleRenameCancel}\n />\n ),\n });\n }\n return renderFileListItem(itemProps);\n },\n [handleRenameCancel, handleRenameSubmit, renameItem, validateRenameItem]\n );\n\n return (\n <div className=\"file-list-container\">\n {table != null && (\n <FileList\n onMove={onMove}\n onSelect={onSelect}\n onSelectionChange={handleSelectionChange}\n onFocusChange={handleFocusChange}\n renderItem={renderItem}\n rowHeight={rowHeight}\n table={table}\n isMultiSelect={isMultiSelect}\n focusedPath={focusedPath}\n />\n )}\n {showContextMenu && <ContextActions actions={actions} />}\n </div>\n );\n}\n\nFileListContainer.displayName = 'FileListContainer';\n\nexport default FileListContainer;\n"],"mappings":"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"}
1
+ {"version":3,"file":"FileListContainer.js","names":["ContextActions","assertNotNull","React","useCallback","useMemo","useState","FileList","renderFileListItem","DEFAULT_ROW_HEIGHT","isDirectory","SHORTCUTS","FileUtils","FileListItemEditor","FileListContainer","props","isMultiSelect","focusedPath","showContextMenu","onCreateFile","onCreateFolder","onCopy","onDelete","onMove","onRename","onSelect","onSelectionChange","table","rowHeight","validateRename","Promise","resolve","renameItem","setRenameItem","selectedItems","setSelectedItems","focusedItem","setFocusedItem","handleSelectionChange","newSelectedItems","handleFocusChange","newFocusedItem","handleCopyAction","handleDeleteAction","length","handleNewFileAction","handleNewFolderAction","getPath","filename","handleRenameAction","handleRenameCancel","undefined","handleRenameSubmit","newName","actions","result","push","title","description","action","group","groups","medium","low","disabled","shortcut","FILE_EXPLORER","DELETE","RENAME","validateRenameItem","renderItem","itemProps","item","children","displayName"],"sources":["../src/FileListContainer.tsx"],"sourcesContent":["import { ContextAction, ContextActions } from '@deephaven/components';\nimport { assertNotNull } from '@deephaven/utils';\nimport React, { useCallback, useMemo, useState } from 'react';\nimport FileList, {\n renderFileListItem,\n DEFAULT_ROW_HEIGHT,\n FileListRenderItemProps,\n} from './FileList';\nimport { FileStorageItem, FileStorageTable, isDirectory } from './FileStorage';\nimport SHORTCUTS from './FileExplorerShortcuts';\nimport './FileExplorer.scss';\nimport FileUtils from './FileUtils';\nimport FileListItemEditor from './FileListItemEditor';\n\nexport interface FileListContainerProps {\n showContextMenu?: boolean;\n table: FileStorageTable;\n\n isMultiSelect?: boolean;\n focusedPath?: string;\n\n onCreateFile?: (path?: string) => void;\n onCreateFolder?: (path?: string) => void;\n onCopy?: (file: FileStorageItem) => void;\n onDelete?: (files: FileStorageItem[]) => void;\n onMove?: (files: FileStorageItem[], path: string) => void;\n onRename?: (file: FileStorageItem, newName: string) => void;\n onSelect: (file: FileStorageItem, event: React.SyntheticEvent) => void;\n validateRename?: (file: FileStorageItem, newName: string) => Promise<void>;\n onSelectionChange?: (selectedItems: FileStorageItem[]) => void;\n\n /** Height of each item in the list */\n rowHeight?: number;\n}\n\n/**\n * Component that displays and allows interaction with the file system in the provided FileStorage.\n */\nexport function FileListContainer(props: FileListContainerProps): JSX.Element {\n const {\n isMultiSelect = false,\n focusedPath,\n showContextMenu = false,\n onCreateFile,\n onCreateFolder,\n onCopy,\n onDelete,\n onMove,\n onRename,\n onSelect,\n onSelectionChange,\n table,\n rowHeight = DEFAULT_ROW_HEIGHT,\n validateRename = () => Promise.resolve(),\n } = props;\n const [renameItem, setRenameItem] = useState<FileStorageItem>();\n const [selectedItems, setSelectedItems] = useState([] as FileStorageItem[]);\n const [focusedItem, setFocusedItem] = useState<FileStorageItem>();\n\n const handleSelectionChange = useCallback(\n newSelectedItems => {\n setSelectedItems(newSelectedItems);\n onSelectionChange?.(newSelectedItems);\n },\n [onSelectionChange]\n );\n\n const handleFocusChange = useCallback(newFocusedItem => {\n setFocusedItem(newFocusedItem);\n }, []);\n\n const handleCopyAction = useCallback(() => {\n if (focusedItem) {\n onCopy?.(focusedItem);\n }\n }, [focusedItem, onCopy]);\n\n const handleDeleteAction = useCallback(() => {\n if (selectedItems.length > 0) {\n onDelete?.(selectedItems);\n }\n }, [onDelete, selectedItems]);\n\n const handleNewFileAction = useCallback(() => {\n onCreateFile?.();\n }, [onCreateFile]);\n\n const handleNewFolderAction = useCallback(() => {\n if (focusedItem) {\n onCreateFolder?.(FileUtils.getPath(focusedItem.filename));\n }\n }, [focusedItem, onCreateFolder]);\n\n const handleRenameAction = useCallback(() => {\n if (focusedItem) {\n setRenameItem(focusedItem);\n }\n }, [focusedItem]);\n\n const handleRenameCancel = useCallback((): void => {\n setRenameItem(undefined);\n }, []);\n\n const handleRenameSubmit = useCallback(\n (newName: string): void => {\n if (renameItem) {\n onRename?.(renameItem, newName);\n setRenameItem(undefined);\n }\n },\n [onRename, renameItem]\n );\n\n const actions = useMemo(() => {\n if (renameItem) {\n // While renaming, we don't want to enable any of the context actions or it may interfere with renaming input\n return [];\n }\n\n const result = [] as ContextAction[];\n if (onCreateFile) {\n result.push({\n title: 'New File',\n description: 'Create new file',\n action: handleNewFileAction,\n group: ContextActions.groups.medium,\n });\n }\n if (onCreateFolder) {\n result.push({\n title: 'New Folder',\n description: 'Create new folder',\n action: handleNewFolderAction,\n group: ContextActions.groups.medium,\n });\n }\n if (onCopy) {\n result.push({\n title: 'Copy',\n description: 'Copy',\n action: handleCopyAction,\n group: ContextActions.groups.low,\n disabled: focusedItem == null || isDirectory(focusedItem),\n });\n }\n if (onDelete && selectedItems.length > 0) {\n result.push({\n title: 'Delete',\n description: 'Delete',\n shortcut: SHORTCUTS.FILE_EXPLORER.DELETE,\n action: handleDeleteAction,\n group: ContextActions.groups.low,\n });\n }\n if (onRename) {\n result.push({\n title: 'Rename',\n description: 'Rename',\n shortcut: SHORTCUTS.FILE_EXPLORER.RENAME,\n action: handleRenameAction,\n group: ContextActions.groups.low,\n disabled: focusedItem == null,\n });\n }\n return result;\n }, [\n handleCopyAction,\n handleDeleteAction,\n handleNewFileAction,\n handleNewFolderAction,\n handleRenameAction,\n focusedItem,\n onCopy,\n onCreateFile,\n onCreateFolder,\n onDelete,\n onRename,\n selectedItems,\n renameItem,\n ]);\n\n const validateRenameItem = useCallback(\n (newName: string): Promise<void> => {\n assertNotNull(renameItem);\n return validateRename(renameItem, newName);\n },\n [renameItem, validateRename]\n );\n\n const renderItem = useCallback(\n (itemProps: FileListRenderItemProps): JSX.Element => {\n const { item } = itemProps;\n if (renameItem && renameItem.filename === item.filename) {\n return renderFileListItem({\n ...itemProps,\n children: (\n <FileListItemEditor\n item={item}\n validate={validateRenameItem}\n onSubmit={handleRenameSubmit}\n onCancel={handleRenameCancel}\n />\n ),\n });\n }\n return renderFileListItem(itemProps);\n },\n [handleRenameCancel, handleRenameSubmit, renameItem, validateRenameItem]\n );\n\n return (\n <div className=\"file-list-container\">\n {table != null && (\n <FileList\n onMove={onMove}\n onSelect={onSelect}\n onSelectionChange={handleSelectionChange}\n onFocusChange={handleFocusChange}\n renderItem={renderItem}\n rowHeight={rowHeight}\n table={table}\n isMultiSelect={isMultiSelect}\n focusedPath={focusedPath}\n />\n )}\n {showContextMenu && <ContextActions actions={actions} />}\n </div>\n );\n}\n\nFileListContainer.displayName = 'FileListContainer';\n\nexport default FileListContainer;\n"],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import { DirectoryStorageItem, FileStorageItem } from './FileStorage';
2
+ /**
3
+ * Make a file name with prefix 'testfile'
4
+ * @param index Number of the file
5
+ * @returns A string with prefix 'testfile' followed by index
6
+ */
7
+ export declare function makeFileName(index?: number): string;
8
+ /**
9
+ * Make a directory name with prefix 'testdir'
10
+ * @param index Number of the directory
11
+ * @returns A string with prefix 'testdir' followed by index
12
+ */
13
+ export declare function makeDirName(index?: number): string;
14
+ /**
15
+ * Make a file object
16
+ * @param basename The basename of the file
17
+ * @param path The path of the file
18
+ * @returns A FileStorageItem object
19
+ */
20
+ export declare function makeFile(basename: string, path?: string): FileStorageItem;
21
+ /**
22
+ * Make files from 0 to and not including count
23
+ * @param count The number of files to create (0 to count - 1). Defaults to 5
24
+ * @returns An array of FileStorageItems
25
+ */
26
+ export declare function makeFiles(count?: number): FileStorageItem[];
27
+ /**
28
+ * Make a directory object
29
+ * @param basename The basename of the directory
30
+ * @param path The path of the directory
31
+ * @returns A DirectoryStorageItem object
32
+ */
33
+ export declare function makeDirectory(basename: string, path?: string): DirectoryStorageItem;
34
+ /**
35
+ * Make directories from 0 to and not including count
36
+ * @param count The number of directories to create (0 to count - 1). Defaults to 5
37
+ * @returns An array of DirectoryStorageItems
38
+ */
39
+ export declare function makeDirectories(count?: number): DirectoryStorageItem[];
40
+ /**
41
+ * Make a nested file
42
+ * @param directories The nested directories in order
43
+ * @param fileNum Number of the file
44
+ * @returns A FileStorageItem
45
+ */
46
+ export declare function makeNested(directories: number[], fileNum: number): FileStorageItem;
47
+ declare const _default: {
48
+ makeFileName: typeof makeFileName;
49
+ makeFile: typeof makeFile;
50
+ makeFiles: typeof makeFiles;
51
+ makeDirName: typeof makeDirName;
52
+ makeDirectory: typeof makeDirectory;
53
+ makeDirectories: typeof makeDirectories;
54
+ makeNested: typeof makeNested;
55
+ };
56
+ export default _default;
57
+ //# sourceMappingURL=FileTestUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileTestUtils.d.ts","sourceRoot":"","sources":["../src/FileTestUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEtE;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,SAAI,GAAG,MAAM,CAE9C;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,SAAI,GAAG,MAAM,CAE7C;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,SAAM,GAAG,eAAe,CAQtE;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,SAAI,qBAMlC;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,IAAI,SAAM,GACT,oBAAoB,CAStB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,SAAI,0BAMxC;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,WAAW,EAAE,MAAM,EAAE,EACrB,OAAO,EAAE,MAAM,GACd,eAAe,CAKjB;;;;;;;;;;AAED,wBAQE"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Make a file name with prefix 'testfile'
3
+ * @param index Number of the file
4
+ * @returns A string with prefix 'testfile' followed by index
5
+ */
6
+ export function makeFileName() {
7
+ var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
8
+ return "testfile".concat(index);
9
+ }
10
+
11
+ /**
12
+ * Make a directory name with prefix 'testdir'
13
+ * @param index Number of the directory
14
+ * @returns A string with prefix 'testdir' followed by index
15
+ */
16
+ export function makeDirName() {
17
+ var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
18
+ return "testdir".concat(index);
19
+ }
20
+
21
+ /**
22
+ * Make a file object
23
+ * @param basename The basename of the file
24
+ * @param path The path of the file
25
+ * @returns A FileStorageItem object
26
+ */
27
+ export function makeFile(basename) {
28
+ var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '/';
29
+ var filename = "".concat(path).concat(basename);
30
+ return {
31
+ basename,
32
+ filename,
33
+ type: 'file',
34
+ id: filename
35
+ };
36
+ }
37
+
38
+ /**
39
+ * Make files from 0 to and not including count
40
+ * @param count The number of files to create (0 to count - 1). Defaults to 5
41
+ * @returns An array of FileStorageItems
42
+ */
43
+ export function makeFiles() {
44
+ var count = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 5;
45
+ var result = [];
46
+ for (var i = 0; i < count; i += 1) {
47
+ result.push(makeFile(makeFileName(i)));
48
+ }
49
+ return result;
50
+ }
51
+
52
+ /**
53
+ * Make a directory object
54
+ * @param basename The basename of the directory
55
+ * @param path The path of the directory
56
+ * @returns A DirectoryStorageItem object
57
+ */
58
+ export function makeDirectory(basename) {
59
+ var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '/';
60
+ var filename = "".concat(path).concat(basename);
61
+ return {
62
+ basename,
63
+ filename,
64
+ type: 'directory',
65
+ id: filename,
66
+ isExpanded: false
67
+ };
68
+ }
69
+
70
+ /**
71
+ * Make directories from 0 to and not including count
72
+ * @param count The number of directories to create (0 to count - 1). Defaults to 5
73
+ * @returns An array of DirectoryStorageItems
74
+ */
75
+ export function makeDirectories() {
76
+ var count = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 5;
77
+ var result = [];
78
+ for (var i = 0; i < count; i += 1) {
79
+ result.push(makeDirectory("testdir".concat(i)));
80
+ }
81
+ return result;
82
+ }
83
+
84
+ /**
85
+ * Make a nested file
86
+ * @param directories The nested directories in order
87
+ * @param fileNum Number of the file
88
+ * @returns A FileStorageItem
89
+ */
90
+ export function makeNested(directories, fileNum) {
91
+ var basename = "/".concat(directories.map(directory => makeDirName(directory)).join('/'), "/");
92
+ return makeFile(makeFileName(fileNum), basename);
93
+ }
94
+ export default {
95
+ makeFileName,
96
+ makeFile,
97
+ makeFiles,
98
+ makeDirName,
99
+ makeDirectory,
100
+ makeDirectories,
101
+ makeNested
102
+ };
103
+ //# sourceMappingURL=FileTestUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileTestUtils.js","names":["makeFileName","index","makeDirName","makeFile","basename","path","filename","type","id","makeFiles","count","result","i","push","makeDirectory","isExpanded","makeDirectories","makeNested","directories","fileNum","map","directory","join"],"sources":["../src/FileTestUtils.ts"],"sourcesContent":["import { DirectoryStorageItem, FileStorageItem } from './FileStorage';\n\n/**\n * Make a file name with prefix 'testfile'\n * @param index Number of the file\n * @returns A string with prefix 'testfile' followed by index\n */\nexport function makeFileName(index = 0): string {\n return `testfile${index}`;\n}\n\n/**\n * Make a directory name with prefix 'testdir'\n * @param index Number of the directory\n * @returns A string with prefix 'testdir' followed by index\n */\nexport function makeDirName(index = 0): string {\n return `testdir${index}`;\n}\n\n/**\n * Make a file object\n * @param basename The basename of the file\n * @param path The path of the file\n * @returns A FileStorageItem object\n */\nexport function makeFile(basename: string, path = '/'): FileStorageItem {\n const filename = `${path}${basename}`;\n return {\n basename,\n filename,\n type: 'file',\n id: filename,\n };\n}\n\n/**\n * Make files from 0 to and not including count\n * @param count The number of files to create (0 to count - 1). Defaults to 5\n * @returns An array of FileStorageItems\n */\nexport function makeFiles(count = 5) {\n const result: FileStorageItem[] = [];\n for (let i = 0; i < count; i += 1) {\n result.push(makeFile(makeFileName(i)));\n }\n return result;\n}\n\n/**\n * Make a directory object\n * @param basename The basename of the directory\n * @param path The path of the directory\n * @returns A DirectoryStorageItem object\n */\nexport function makeDirectory(\n basename: string,\n path = '/'\n): DirectoryStorageItem {\n const filename = `${path}${basename}`;\n return {\n basename,\n filename,\n type: 'directory',\n id: filename,\n isExpanded: false,\n };\n}\n\n/**\n * Make directories from 0 to and not including count\n * @param count The number of directories to create (0 to count - 1). Defaults to 5\n * @returns An array of DirectoryStorageItems\n */\nexport function makeDirectories(count = 5) {\n const result: DirectoryStorageItem[] = [];\n for (let i = 0; i < count; i += 1) {\n result.push(makeDirectory(`testdir${i}`));\n }\n return result;\n}\n\n/**\n * Make a nested file\n * @param directories The nested directories in order\n * @param fileNum Number of the file\n * @returns A FileStorageItem\n */\nexport function makeNested(\n directories: number[],\n fileNum: number\n): FileStorageItem {\n const basename = `/${directories\n .map(directory => makeDirName(directory))\n .join('/')}/`;\n return makeFile(makeFileName(fileNum), basename);\n}\n\nexport default {\n makeFileName,\n makeFile,\n makeFiles,\n makeDirName,\n makeDirectory,\n makeDirectories,\n makeNested,\n};\n"],"mappings":"AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,YAAY,GAAoB;EAAA,IAAnBC,KAAK,uEAAG,CAAC;EACpC,yBAAkBA,KAAK;AACzB;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,WAAW,GAAoB;EAAA,IAAnBD,KAAK,uEAAG,CAAC;EACnC,wBAAiBA,KAAK;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASE,QAAQ,CAACC,QAAgB,EAA+B;EAAA,IAA7BC,IAAI,uEAAG,GAAG;EACnD,IAAMC,QAAQ,aAAMD,IAAI,SAAGD,QAAQ,CAAE;EACrC,OAAO;IACLA,QAAQ;IACRE,QAAQ;IACRC,IAAI,EAAE,MAAM;IACZC,EAAE,EAAEF;EACN,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,SAAS,GAAY;EAAA,IAAXC,KAAK,uEAAG,CAAC;EACjC,IAAMC,MAAyB,GAAG,EAAE;EACpC,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,KAAK,EAAEE,CAAC,IAAI,CAAC,EAAE;IACjCD,MAAM,CAACE,IAAI,CAACV,QAAQ,CAACH,YAAY,CAACY,CAAC,CAAC,CAAC,CAAC;EACxC;EACA,OAAOD,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,aAAa,CAC3BV,QAAgB,EAEM;EAAA,IADtBC,IAAI,uEAAG,GAAG;EAEV,IAAMC,QAAQ,aAAMD,IAAI,SAAGD,QAAQ,CAAE;EACrC,OAAO;IACLA,QAAQ;IACRE,QAAQ;IACRC,IAAI,EAAE,WAAW;IACjBC,EAAE,EAAEF,QAAQ;IACZS,UAAU,EAAE;EACd,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,eAAe,GAAY;EAAA,IAAXN,KAAK,uEAAG,CAAC;EACvC,IAAMC,MAA8B,GAAG,EAAE;EACzC,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,KAAK,EAAEE,CAAC,IAAI,CAAC,EAAE;IACjCD,MAAM,CAACE,IAAI,CAACC,aAAa,kBAAWF,CAAC,EAAG,CAAC;EAC3C;EACA,OAAOD,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASM,UAAU,CACxBC,WAAqB,EACrBC,OAAe,EACE;EACjB,IAAMf,QAAQ,cAAOc,WAAW,CAC7BE,GAAG,CAACC,SAAS,IAAInB,WAAW,CAACmB,SAAS,CAAC,CAAC,CACxCC,IAAI,CAAC,GAAG,CAAC,MAAG;EACf,OAAOnB,QAAQ,CAACH,YAAY,CAACmB,OAAO,CAAC,EAAEf,QAAQ,CAAC;AAClD;AAEA,eAAe;EACbJ,YAAY;EACZG,QAAQ;EACRM,SAAS;EACTP,WAAW;EACXY,aAAa;EACbE,eAAe;EACfC;AACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/file-explorer",
3
- "version": "0.29.1-relative-base-url.1+f874780",
3
+ "version": "0.29.1",
4
4
  "description": "Deephaven File Explorer React component",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -22,11 +22,11 @@
22
22
  "build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
23
23
  },
24
24
  "dependencies": {
25
- "@deephaven/components": "^0.29.1-relative-base-url.1+f874780",
26
- "@deephaven/icons": "^0.29.1-relative-base-url.1+f874780",
27
- "@deephaven/log": "^0.29.1-relative-base-url.1+f874780",
28
- "@deephaven/storage": "^0.29.1-relative-base-url.1+f874780",
29
- "@deephaven/utils": "^0.29.1-relative-base-url.1+f874780",
25
+ "@deephaven/components": "^0.29.0",
26
+ "@deephaven/icons": "^0.29.0",
27
+ "@deephaven/log": "^0.29.0",
28
+ "@deephaven/storage": "^0.29.0",
29
+ "@deephaven/utils": "^0.29.0",
30
30
  "@fortawesome/fontawesome-svg-core": "^6.2.1",
31
31
  "@fortawesome/react-fontawesome": "^0.2.0",
32
32
  "classnames": "^2.3.1",
@@ -37,7 +37,8 @@
37
37
  "react": "^17.0.0"
38
38
  },
39
39
  "devDependencies": {
40
- "@deephaven/tsconfig": "^0.29.1-relative-base-url.1+f874780"
40
+ "@deephaven/mocks": "^0.29.0",
41
+ "@deephaven/tsconfig": "^0.29.0"
41
42
  },
42
43
  "files": [
43
44
  "dist"
@@ -45,5 +46,5 @@
45
46
  "publishConfig": {
46
47
  "access": "public"
47
48
  },
48
- "gitHead": "f8747806f55cc747e5bc89c7c8084da8ba3077b1"
49
+ "gitHead": "805bb370c539a8ec51b204740b6dba188fb6b5db"
49
50
  }