17289: Splits context menu actions set to avoid showing 'Download' on dirs.
authorLucas Di Pentima <lucas@di-pentima.com.ar>
Wed, 28 Apr 2021 21:31:34 +0000 (18:31 -0300)
committerLucas Di Pentima <lucas@di-pentima.com.ar>
Wed, 28 Apr 2021 21:31:34 +0000 (18:31 -0300)
Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima <lucas@di-pentima.com.ar>

src/index.tsx
src/views-components/collection-panel-files/collection-panel-files.ts
src/views-components/context-menu/action-sets/collection-files-action-set.ts
src/views-components/context-menu/action-sets/collection-files-item-action-set.ts
src/views-components/context-menu/actions/collection-copy-to-clipboard-action.tsx
src/views-components/context-menu/actions/collection-file-viewer-action.tsx
src/views-components/context-menu/actions/download-collection-file-action.tsx
src/views-components/context-menu/context-menu.tsx

index e691c5d2433d8ee4f9ec40a0783a7b8943ede938..7803c6b7d77c34c56ef76c648dbfcb21a372817f 100644 (file)
@@ -25,7 +25,7 @@ import { filterGroupActionSet, projectActionSet, readOnlyProjectActionSet } from
 import { resourceActionSet } from '~/views-components/context-menu/action-sets/resource-action-set';
 import { favoriteActionSet } from "~/views-components/context-menu/action-sets/favorite-action-set";
 import { collectionFilesActionSet, readOnlyCollectionFilesActionSet } from '~/views-components/context-menu/action-sets/collection-files-action-set';
-import { collectionFilesItemActionSet, readOnlyCollectionFilesItemActionSet } from '~/views-components/context-menu/action-sets/collection-files-item-action-set';
+import { collectionDirectoryItemActionSet, collectionFileItemActionSet, readOnlyCollectionDirectoryItemActionSet, readOnlyCollectionFileItemActionSet } from '~/views-components/context-menu/action-sets/collection-files-item-action-set';
 import { collectionFilesNotSelectedActionSet } from '~/views-components/context-menu/action-sets/collection-files-not-selected-action-set';
 import { collectionActionSet, collectionAdminActionSet, oldCollectionVersionActionSet, readOnlyCollectionActionSet } from '~/views-components/context-menu/action-sets/collection-action-set';
 import { processActionSet } from '~/views-components/context-menu/action-sets/process-action-set';
@@ -74,8 +74,10 @@ addMenuActionSet(ContextMenuKind.FAVORITE, favoriteActionSet);
 addMenuActionSet(ContextMenuKind.COLLECTION_FILES, collectionFilesActionSet);
 addMenuActionSet(ContextMenuKind.READONLY_COLLECTION_FILES, readOnlyCollectionFilesActionSet);
 addMenuActionSet(ContextMenuKind.COLLECTION_FILES_NOT_SELECTED, collectionFilesNotSelectedActionSet);
-addMenuActionSet(ContextMenuKind.COLLECTION_FILES_ITEM, collectionFilesItemActionSet);
-addMenuActionSet(ContextMenuKind.READONLY_COLLECTION_FILES_ITEM, readOnlyCollectionFilesItemActionSet);
+addMenuActionSet(ContextMenuKind.COLLECTION_DIRECTORY_ITEM, collectionDirectoryItemActionSet);
+addMenuActionSet(ContextMenuKind.READONLY_COLLECTION_DIRECTORY_ITEM, readOnlyCollectionDirectoryItemActionSet);
+addMenuActionSet(ContextMenuKind.COLLECTION_FILE_ITEM, collectionFileItemActionSet);
+addMenuActionSet(ContextMenuKind.READONLY_COLLECTION_FILE_ITEM, readOnlyCollectionFileItemActionSet);
 addMenuActionSet(ContextMenuKind.COLLECTION, collectionActionSet);
 addMenuActionSet(ContextMenuKind.READONLY_COLLECTION, readOnlyCollectionActionSet);
 addMenuActionSet(ContextMenuKind.OLD_VERSION_COLLECTION, oldCollectionVersionActionSet);
index 91420edb52e19932b7e5ea29756f1bdb5a3fb504..ddd59ea6ac282ce897947eeced45637ff68b09bb 100644 (file)
@@ -55,12 +55,17 @@ const mapDispatchToProps = (dispatch: Dispatch): Pick<CollectionPanelFilesProps,
         dispatch(collectionPanelFilesAction.TOGGLE_COLLECTION_FILE_SELECTION({ id: item.id }));
     },
     onItemMenuOpen: (event, item, isWritable) => {
+        const isDirectory = item.data.type === 'directory';
         dispatch<any>(openContextMenu(
             event,
             {
                 menuKind: isWritable
-                    ? ContextMenuKind.COLLECTION_FILES_ITEM
-                    : ContextMenuKind.READONLY_COLLECTION_FILES_ITEM,
+                    ? isDirectory
+                        ? ContextMenuKind.COLLECTION_DIRECTORY_ITEM
+                        : ContextMenuKind.COLLECTION_FILE_ITEM
+                    : isDirectory
+                        ? ContextMenuKind.READONLY_COLLECTION_DIRECTORY_ITEM
+                        : ContextMenuKind.READONLY_COLLECTION_FILE_ITEM,
                 kind: ResourceKind.COLLECTION,
                 name: item.data.name,
                 uuid: item.id,
index 7e885615d07c453c8cb39190d9b1e664cc1f787a..03cfdb9bb8f806e52fa42394f38fc23bb2b08dcc 100644 (file)
@@ -5,8 +5,8 @@
 import { ContextMenuActionSet } from "~/views-components/context-menu/context-menu-action-set";
 import { collectionPanelFilesAction, openMultipleFilesRemoveDialog } from "~/store/collection-panel/collection-panel-files/collection-panel-files-actions";
 import { openCollectionPartialCopyDialog, openCollectionPartialCopyToSelectedCollectionDialog } from '~/store/collections/collection-partial-copy-actions';
-// import { DownloadCollectionFileAction } from "~/views-components/context-menu/actions/download-collection-file-action";
 
+// These action sets are used on the multi-select actions button.
 export const readOnlyCollectionFilesActionSet: ContextMenuActionSet = [[
     {
         name: "Select all",
@@ -20,10 +20,6 @@ export const readOnlyCollectionFilesActionSet: ContextMenuActionSet = [[
             dispatch(collectionPanelFilesAction.UNSELECT_ALL_COLLECTION_FILES());
         }
     },
-    // { // Disabled for now as we need to create backend version of this feature which will be less buggy
-    //     component: DownloadCollectionFileAction,
-    //     execute: () => { return; }
-    // },
     {
         name: "Create a new collection with selected",
         execute: dispatch => {
index bfbdec610e23eeab39fa094b7a198666573036d1..64b29e436f6563241f90c96d6e71d480a21a4207 100644 (file)
@@ -9,11 +9,7 @@ import { openFileRemoveDialog, openRenameFileDialog } from '~/store/collection-p
 import { CollectionFileViewerAction } from '~/views-components/context-menu/actions/collection-file-viewer-action';
 import { CollectionCopyToClipboardAction } from "../actions/collection-copy-to-clipboard-action";
 
-export const readOnlyCollectionFilesItemActionSet: ContextMenuActionSet = [[
-    {
-        component: DownloadCollectionFileAction,
-        execute: () => { return; }
-    },
+export const readOnlyCollectionDirectoryItemActionSet: ContextMenuActionSet = [[
     {
         component: CollectionFileViewerAction,
         execute: () => { return; },
@@ -24,7 +20,15 @@ export const readOnlyCollectionFilesItemActionSet: ContextMenuActionSet = [[
     }
 ]];
 
-export const collectionFilesItemActionSet: ContextMenuActionSet = readOnlyCollectionFilesItemActionSet.concat([[
+export const readOnlyCollectionFileItemActionSet: ContextMenuActionSet = [[
+    {
+        component: DownloadCollectionFileAction,
+        execute: () => { return; }
+    },
+    ...readOnlyCollectionDirectoryItemActionSet.reduce((prev, next) => prev.concat(next), []),
+]];
+
+const writableActionSet: ContextMenuActionSet = [[
     {
         name: "Rename",
         icon: RenameIcon,
@@ -42,4 +46,19 @@ export const collectionFilesItemActionSet: ContextMenuActionSet = readOnlyCollec
             dispatch<any>(openFileRemoveDialog(resource.uuid));
         }
     }
-]]);
\ No newline at end of file
+]];
+
+export const collectionDirectoryItemActionSet: ContextMenuActionSet = readOnlyCollectionDirectoryItemActionSet.concat(writableActionSet);
+
+// export const collectionDirectoryItemActionSet: ContextMenuActionSet = [[
+//     ...readOnlyCollectionDirectoryItemActionSet.reduce((prev, next) => prev.concat(next), []),
+//     ...writableActionSet.reduce((prev, next) => prev.concat(next), []),
+// ]];
+
+// export const collectionFileItemActionSet: ContextMenuActionSet = [[
+//     ...readOnlyCollectionFileItemActionSet.reduce((prev, next) => prev.concat(next), []),
+//     ...writableActionSet.reduce((prev, next) => prev.concat(next), []),
+// ]];
+
+
+export const collectionFileItemActionSet: ContextMenuActionSet = readOnlyCollectionFileItemActionSet.concat(writableActionSet);
\ No newline at end of file
index 4fc11fb25902388b48950e5a9e8138372967b6b9..e8518d1f78054b4fa0d8423a04f040a7c22a39d7 100644 (file)
@@ -12,9 +12,11 @@ const mapStateToProps = (state: RootState) => {
     const { resource } = state.contextMenu;
     const currentCollectionUuid = state.collectionPanel.item ? state.collectionPanel.item.uuid : '';
     const { keepWebServiceUrl } = state.auth.config;
-    if (resource && (
-        resource.menuKind === ContextMenuKind.COLLECTION_FILES_ITEM ||
-        resource.menuKind === ContextMenuKind.READONLY_COLLECTION_FILES_ITEM)) {
+    if (resource && [
+        ContextMenuKind.COLLECTION_FILE_ITEM,
+        ContextMenuKind.READONLY_COLLECTION_FILE_ITEM,
+        ContextMenuKind.COLLECTION_DIRECTORY_ITEM,
+        ContextMenuKind.READONLY_COLLECTION_DIRECTORY_ITEM ].indexOf(resource.menuKind as ContextMenuKind) > -1) {
         const file = getNodeValue(resource.uuid)(state.collectionPanelFiles);
         if (file) {
             return {
index aba355346bdbdf5fa9398a08d3faa53cd963818c..7d25f1cfc18a00d0f380cf4e2480cb18f34fd7c8 100644 (file)
@@ -12,9 +12,11 @@ import { getInlineFileUrl, sanitizeToken } from "./helpers";
 const mapStateToProps = (state: RootState) => {
     const { resource } = state.contextMenu;
     const currentCollectionUuid = state.collectionPanel.item ? state.collectionPanel.item.uuid : '';
-    if (resource && (
-        resource.menuKind === ContextMenuKind.COLLECTION_FILES_ITEM ||
-        resource.menuKind === ContextMenuKind.READONLY_COLLECTION_FILES_ITEM)) {
+    if (resource && [
+        ContextMenuKind.COLLECTION_FILE_ITEM,
+        ContextMenuKind.READONLY_COLLECTION_FILE_ITEM,
+        ContextMenuKind.COLLECTION_DIRECTORY_ITEM,
+        ContextMenuKind.READONLY_COLLECTION_DIRECTORY_ITEM ].indexOf(resource.menuKind as ContextMenuKind) > -1) {
         const file = getNodeValue(resource.uuid)(state.collectionPanelFiles);
         if (file) {
             const fileUrl = sanitizeToken(getInlineFileUrl(
index e1986d3cd338454551cc46b9563405d097257ab2..3af98c4eaad49ad6fbaa58a7817f34ee725a73ea 100644 (file)
@@ -13,9 +13,11 @@ import { sanitizeToken } from "./helpers";
 const mapStateToProps = (state: RootState) => {
     const { resource } = state.contextMenu;
     const currentCollectionUuid = state.collectionPanel.item ? state.collectionPanel.item.uuid : '';
-    if (resource && (
-        resource.menuKind === ContextMenuKind.COLLECTION_FILES_ITEM ||
-        resource.menuKind === ContextMenuKind.READONLY_COLLECTION_FILES_ITEM)) {
+    if (resource && [
+        ContextMenuKind.COLLECTION_FILE_ITEM,
+        ContextMenuKind.READONLY_COLLECTION_FILE_ITEM,
+        ContextMenuKind.COLLECTION_DIRECTORY_ITEM,
+        ContextMenuKind.READONLY_COLLECTION_DIRECTORY_ITEM ].indexOf(resource.menuKind as ContextMenuKind) > -1) {
         const file = getNodeValue(resource.uuid)(state.collectionPanelFiles);
         if (file) {
             return {
index ee87d71a37d84da65a8f0594cf1cfe3130a97fc3..26e38f1996cd701dd15d6edde2512984b86aa663 100644 (file)
@@ -76,8 +76,10 @@ export enum ContextMenuKind {
     TRASH = "Trash",
     COLLECTION_FILES = "CollectionFiles",
     READONLY_COLLECTION_FILES = "ReadOnlyCollectionFiles",
-    COLLECTION_FILES_ITEM = "CollectionFilesItem",
-    READONLY_COLLECTION_FILES_ITEM = "ReadOnlyCollectionFilesItem",
+    COLLECTION_FILE_ITEM = "CollectionFileItem",
+    COLLECTION_DIRECTORY_ITEM = "CollectionDirectoryItem",
+    READONLY_COLLECTION_FILE_ITEM = "ReadOnlyCollectionFileItem",
+    READONLY_COLLECTION_DIRECTORY_ITEM = "ReadOnlyCollectionDirectoryItem",
     COLLECTION_FILES_NOT_SELECTED = "CollectionFilesNotSelected",
     COLLECTION = 'Collection',
     COLLECTION_ADMIN = 'CollectionAdmin',