X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/53347c91f7168053224aed479c8f21e75e78893d..44821dc84765936ce99fa2d760ef683281f0a578:/src/views-components/context-menu/actions/download-action.tsx

diff --git a/src/views-components/context-menu/actions/download-action.tsx b/src/views-components/context-menu/actions/download-action.tsx
index 2ec7fe1c73..352f84bd58 100644
--- a/src/views-components/context-menu/actions/download-action.tsx
+++ b/src/views-components/context-menu/actions/download-action.tsx
@@ -2,34 +2,40 @@
 //
 // SPDX-License-Identifier: AGPL-3.0
 
-import * as React from "react";
-import { ListItemIcon, ListItemText, ListItem } from "@material-ui/core";
-import { DownloadIcon } from "../../../components/icon/icon";
-import * as JSZip from "jszip";
-import * as FileSaver from 'file-saver';
+import React from 'react';
+import { ListItemIcon, ListItemText, ListItem } from '@material-ui/core';
+import { DownloadIcon } from '../../../components/icon/icon';
+import JSZip from 'jszip';
+import FileSaver from 'file-saver';
 import axios from 'axios';
 
 export const DownloadAction = (props: { href?: any, download?: any, onClick?: () => void, kind?: string, currentCollectionUuid?: string; }) => {
     const downloadProps = props.download ? { download: props.download } : {};
 
     const createZip = (fileUrls: string[], download: string[]) => {
-        const zip = new JSZip();
         let id = 1;
-        fileUrls.map((href: string) => {
+        const zip = new JSZip();
+        const filteredFileUrls = fileUrls
+            .filter((href: string) => {
+                const letter = href.split('').pop();
+                return letter !== '/';
+            });
+
+        filteredFileUrls.forEach((href: string) => {
             axios.get(href).then(response => response).then(({ data }: any) => {
                 const splittedByDot = href.split('.');
                 if (splittedByDot[splittedByDot.length - 1] !== 'json') {
-                    if (fileUrls.length === id) {
-                        zip.file(download[id-1], data);
+                    if (filteredFileUrls.length === id) {
+                        zip.file(download[id - 1], data);
                         zip.generateAsync({ type: 'blob' }).then((content) => {
                             FileSaver.saveAs(content, `download-${props.currentCollectionUuid}.zip`);
                         });
                     } else {
-                        zip.file(download[id-1], data);
+                        zip.file(download[id - 1], data);
                         zip.generateAsync({ type: 'blob' });
                     }
                 } else {
-                    zip.file(download[id-1], JSON.stringify(data));
+                    zip.file(download[id - 1], JSON.stringify(data));
                     zip.generateAsync({ type: 'blob' });
                 }
                 id++;
@@ -40,7 +46,7 @@ export const DownloadAction = (props: { href?: any, download?: any, onClick?: ()
     return props.href || props.kind === 'files'
         ? <a
             style={{ textDecoration: 'none' }}
-            href={props.kind === 'files' ? null : props.href}
+            href={props.kind === 'files' ? undefined : `${props.href}&disposition=attachment`}
             onClick={props.onClick}
             {...downloadProps}>
             <ListItem button onClick={() => props.kind === 'files' ? createZip(props.href, props.download) : undefined}>
