@deephaven/file-explorer 0.24.1-beta.0 → 0.24.1-beta.3
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.d.ts.map +1 -1
- package/dist/FileList.js +0 -5
- package/dist/FileList.js.map +1 -1
- package/package.json +8 -8
package/dist/FileList.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileList.d.ts","sourceRoot":"","sources":["../src/FileList.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,eAAe,EAEhB,MAAM,uBAAuB,CAAC;AAK/B,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAEnE,OAAO,KAMN,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAe,MAAM,eAAe,CAAC;AAC/E,OAAO,iBAAiB,CAAC;AAKzB,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,eAAe,CAAC,eAAe,CAAC,GAAG;IACvE,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC;IACjC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iBAAiB,EAAE,OAAO,CAAC;IAE3B,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IACrE,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IACpE,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IACnE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;CACjE,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,gBAAgB,CAAC;IAExB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,aAAa,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,eAAe,KAAK,IAAI,CAAC;IACxD,MAAM,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,QAAQ,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,cAAc,KAAK,IAAI,CAAC;IACvE,iBAAiB,CAAC,EAAE,CAAC,aAAa,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;IAE/D,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC;IAE7D,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,eAAe,SAAU,eAAe,KAAG,MAGlB,CAAC;AAEvC,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAGrC,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAItC,eAAO,MAAM,kBAAkB,UACtB,uBAAuB,KAC7B,
|
|
1
|
+
{"version":3,"file":"FileList.d.ts","sourceRoot":"","sources":["../src/FileList.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,eAAe,EAEhB,MAAM,uBAAuB,CAAC;AAK/B,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAEnE,OAAO,KAMN,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAe,MAAM,eAAe,CAAC;AAC/E,OAAO,iBAAiB,CAAC;AAKzB,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,eAAe,CAAC,eAAe,CAAC,GAAG;IACvE,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC;IACjC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iBAAiB,EAAE,OAAO,CAAC;IAE3B,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IACrE,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IACpE,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IACnE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;CACjE,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,gBAAgB,CAAC;IAExB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,aAAa,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,eAAe,KAAK,IAAI,CAAC;IACxD,MAAM,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,QAAQ,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,cAAc,KAAK,IAAI,CAAC;IACvE,iBAAiB,CAAC,EAAE,CAAC,aAAa,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;IAE/D,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC;IAE7D,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,eAAe,SAAU,eAAe,KAAG,MAGlB,CAAC;AAEvC,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAGrC,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAItC,eAAO,MAAM,kBAAkB,UACtB,uBAAuB,KAC7B,WA4EF,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,cAAc,CAWjE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,eAAe,EAAE,EAC/B,UAAU,EAAE,eAAe,GAC1B;IAAE,KAAK,EAAE,eAAe,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAyBlD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,GAAG,CAAC,OAAO,CAsY1D;AAED,eAAe,QAAQ,CAAC"}
|
package/dist/FileList.js
CHANGED
|
@@ -104,11 +104,6 @@ export var renderFileListItem = props => {
|
|
|
104
104
|
className: "truncation-wrapper"
|
|
105
105
|
}, children !== null && children !== void 0 ? children : item.basename, /*#__PURE__*/React.createElement(Tooltip, {
|
|
106
106
|
options: {
|
|
107
|
-
modifiers: {
|
|
108
|
-
preventOverflow: {
|
|
109
|
-
boundariesElement: 'window'
|
|
110
|
-
}
|
|
111
|
-
},
|
|
112
107
|
placement: 'left'
|
|
113
108
|
}
|
|
114
109
|
}, children !== null && children !== void 0 ? children : item.basename)));
|
package/dist/FileList.js.map
CHANGED
|
@@ -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","modifiers","preventOverflow","boundariesElement","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 modifiers: { preventOverflow: { boundariesElement: 'window' } },\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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/file-explorer",
|
|
3
|
-
"version": "0.24.1-beta.
|
|
3
|
+
"version": "0.24.1-beta.3+c65f268",
|
|
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.24.1-beta.
|
|
26
|
-
"@deephaven/icons": "^0.24.1-beta.
|
|
27
|
-
"@deephaven/log": "^0.24.1-beta.
|
|
28
|
-
"@deephaven/storage": "^0.24.1-beta.
|
|
29
|
-
"@deephaven/utils": "^0.24.1-beta.
|
|
25
|
+
"@deephaven/components": "^0.24.1-beta.3+c65f268",
|
|
26
|
+
"@deephaven/icons": "^0.24.1-beta.3+c65f268",
|
|
27
|
+
"@deephaven/log": "^0.24.1-beta.3+c65f268",
|
|
28
|
+
"@deephaven/storage": "^0.24.1-beta.3+c65f268",
|
|
29
|
+
"@deephaven/utils": "^0.24.1-beta.3+c65f268",
|
|
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,7 @@
|
|
|
37
37
|
"react": "^17.0.0"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"@deephaven/tsconfig": "^0.24.1-beta.
|
|
40
|
+
"@deephaven/tsconfig": "^0.24.1-beta.3+c65f268"
|
|
41
41
|
},
|
|
42
42
|
"files": [
|
|
43
43
|
"dist"
|
|
@@ -45,5 +45,5 @@
|
|
|
45
45
|
"publishConfig": {
|
|
46
46
|
"access": "public"
|
|
47
47
|
},
|
|
48
|
-
"gitHead": "
|
|
48
|
+
"gitHead": "c65f268e3b426948dc3569d1c393eb18c3b14cf4"
|
|
49
49
|
}
|