From ec13ebdc7c9d2f68f2e74ae5f7a23cc1be7d208f Mon Sep 17 00:00:00 2001 From: Alf Eaton Date: Fri, 12 Aug 2022 10:54:32 +0100 Subject: [PATCH] Add "Download" item to file tree context menu (#9190) GitOrigin-RevId: af55d782aeaab3acd516a1581d59dd3332109cb8 --- .../file-tree-item/file-tree-item-menu-items.js | 4 ++++ .../file-tree/contexts/file-tree-actionable.js | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/services/web/frontend/js/features/file-tree/components/file-tree-item/file-tree-item-menu-items.js b/services/web/frontend/js/features/file-tree/components/file-tree-item/file-tree-item-menu-items.js index 84e1b24dd4..a439291cea 100644 --- a/services/web/frontend/js/features/file-tree/components/file-tree-item/file-tree-item-menu-items.js +++ b/services/web/frontend/js/features/file-tree/components/file-tree-item/file-tree-item-menu-items.js @@ -15,6 +15,7 @@ function FileTreeItemMenuItems() { startCreatingFolder, startCreatingDocOrFile, startUploadingDocOrFile, + downloadPath, } = useFileTreeActionable() return ( @@ -22,6 +23,9 @@ function FileTreeItemMenuItems() { {canRename ? ( {t('rename')} ) : null} + {downloadPath ? ( + {t('download')} + ) : null} {canDelete ? ( {t('delete')} ) : null} diff --git a/services/web/frontend/js/features/file-tree/contexts/file-tree-actionable.js b/services/web/frontend/js/features/file-tree/contexts/file-tree-actionable.js index 2376148131..76552cdb6a 100644 --- a/services/web/frontend/js/features/file-tree/contexts/file-tree-actionable.js +++ b/services/web/frontend/js/features/file-tree/contexts/file-tree-actionable.js @@ -346,6 +346,17 @@ export function FileTreeActionableProvider({ children }) { } }, []) + // build the path for downloading a single file + const downloadPath = useMemo(() => { + if (selectedEntityIds.size === 1) { + const [selectedEntityId] = selectedEntityIds + const selectedEntity = findInTree(fileTreeData, selectedEntityId) + if (selectedEntity?.type === 'fileRef') { + return `/project/${projectId}/file/${selectedEntityId}` + } + } + }, [fileTreeData, projectId, selectedEntityIds]) + const value = { canDelete: selectedEntityIds.size > 0, canRename: selectedEntityIds.size === 1, @@ -368,6 +379,7 @@ export function FileTreeActionableProvider({ children }) { cancel, droppedFiles, setDroppedFiles, + downloadPath, } return (