diff --git a/src/components/FileViewer/FileViewer.tsx b/src/components/FileViewer/FileViewer.tsx index fc6b3765..b9a5d928 100644 --- a/src/components/FileViewer/FileViewer.tsx +++ b/src/components/FileViewer/FileViewer.tsx @@ -206,20 +206,15 @@ export default function FileViewer() { const downloadTickedFiles = async () => { if (!tickedFiles) return; - const missedDirectories: string[] = []; + for (const file of tickedFiles) { + const timeout = file?.file_type == 'Directory' ? 60000 : 5000; if (file.file_type === 'Directory') { - missedDirectories.push(file.path); - } else if (file.file_type === 'File') { - downloadInstanceFile(instance.uuid, file); - tickFile(file, false); + toast.info('Zipping directory for download...'); } - } - if (missedDirectories.length > 0) { - const missedDirectoriesString = missedDirectories.join(', '); - toast.error( - `Downloading a directory is not supported. The following directories were not downloaded: ${missedDirectoriesString}` - ); + + downloadInstanceFile(instance.uuid, file, timeout); + tickFile(file, false); } }; diff --git a/src/utils/apis.ts b/src/utils/apis.ts index 98ba7e50..a68c2f77 100644 --- a/src/utils/apis.ts +++ b/src/utils/apis.ts @@ -120,19 +120,21 @@ export const deleteInstanceDirectory = async ( export const requestInstanceFileUrl = async ( uuid: string, - file: ClientFile + file: ClientFile, + timeout = 5000, ): Promise => { const tokenResponse = await axiosWrapper({ method: 'get', url: `/instance/${uuid}/fs/${Base64.encode(file.path, true)}/url`, + timeout: timeout, }); return axios.defaults.baseURL + `/file/${tokenResponse}`; }; -export const downloadInstanceFile = async (uuid: string, file: ClientFile) => { +export const downloadInstanceFile = async (uuid: string, file: ClientFile, timeout = 5000) => { // TODO handle errors - window.open(await requestInstanceFileUrl(uuid, file), '_blank'); + window.open(await requestInstanceFileUrl(uuid, file, timeout), '_blank'); }; export const uploadInstanceFiles = async (