🐛 Fix download button (#172)

* Fix on context menu for folder

* Make it works for My Drive

* Fix downloading folder in the shared view

---------

Co-authored-by: Anton SHEPILOV <ashepilov@linagora.com>
This commit is contained in:
Greemty
2023-08-30 15:10:54 +02:00
committed by GitHub
parent 74df7e1f71
commit 1eb0df97f1
11 changed files with 5680 additions and 6842 deletions
@@ -130,11 +130,10 @@ export class DriveApiClient {
}
static async getDownloadZipUrl(companyId: string, ids: string[]) {
const { token } = await DriveApiClient.getDownloadToken(companyId, ids);
// const { token } = await DriveApiClient.getDownloadToken(companyId, ids);
return Api.route(
`/internal/services/documents/v1/companies/${companyId}/item/download/zip` +
`?items=${ids.join(',')}&token=${token}` +
appendTdriveToken(true),
`?items=${ids.join(',')}`
);
}
@@ -1,4 +1,4 @@
import { ChevronDownIcon, DotsHorizontalIcon } from '@heroicons/react/outline';
import { ChevronDownIcon } from '@heroicons/react/outline';
import { Button } from '@atoms/button/button';
import { Base, BaseSmall, Subtitle, Title } from '@atoms/text';
import Menu from '@components/menus/menu';
@@ -62,7 +62,7 @@ export default memo(
const companyId = useRouterCompany();
const role = user ? (user?.companies || []).find(company => company?.company.id === companyId)?.role : "member";
setTdriveTabToken(tdriveTabContextToken || null);
const [filter, setFilter] = useRecoilState(SharedWithMeFilterState);
const [filter, __] = useRecoilState(SharedWithMeFilterState);
const { viewId } = useRouteState();
const [parentId, _setParentId] = useRecoilState(
DriveCurrentFolderAtom({ context: context, initialFolderId: viewId || initialParentId || 'user_'+user?.id }),
@@ -18,7 +18,7 @@ import { DriveItem, DriveItemDetails } from '@features/drive/types';
import { ToasterService } from '@features/global/services/toaster-service';
import { copyToClipboard } from '@features/global/utils/CopyClipboard';
import { SharedWithMeFilterState } from '@features/drive/state/shared-with-me-filter';
import { getCurrentUserList, getUser } from '@features/users/hooks/use-user-list';
import { getCurrentUserList } from '@features/users/hooks/use-user-list';
import _ from 'lodash';
import Languages from 'features/global/services/languages-service';
@@ -43,6 +43,9 @@ export const useOnBuildContextMenu = (children: DriveItem[], initialParentId?: s
const setPropertiesModalState = useSetRecoilState(PropertiesModalAtom);
const setUsersModalState = useSetRecoilState(UsersModalAtom);
const { open: preview } = useDrivePreview();
function getIdsFromArray(arr: DriveItem[]): string[] {
return arr.map((obj) => obj.id);
}
return useCallback(
async (parent?: Partial<DriveItemDetails> | null, item?: DriveItem) => {
@@ -74,7 +77,14 @@ export const useOnBuildContextMenu = (children: DriveItem[], initialParentId?: s
{
type: 'menu',
text: Languages.t('components.item_context_menu.download'),
onClick: () => download(item.last_version_cache.file_metadata.external_id),
onClick: () => {
if (item.is_directory) {
downloadZip([item!.id]);
console.log(item!.id);
} else {
download(item.last_version_cache.file_metadata.external_id);
}
}
},
{ type: 'separator' },
{
@@ -253,7 +263,18 @@ export const useOnBuildContextMenu = (children: DriveItem[], initialParentId?: s
type: 'menu',
text: Languages.t('components.item_context_menu.download_folder'),
hide: inTrash,
onClick: () => downloadZip([parent.item!.id]),
onClick: () => {
if (parent.children && parent.children.length > 0) {
const idsFromArray = getIdsFromArray(parent.children);
console.log("Download zip file with docs: " + idsFromArray);
downloadZip(idsFromArray);
} else if (parent.item) {
console.log("Download folder itself");
download(parent.item.last_version_cache.file_metadata.external_id);
} else {
console.error("Very strange, everything is null, you are trying to download undefined");
}
},
},
{
type: 'menu',
@@ -310,7 +331,6 @@ export const useOnBuildContextMenu = (children: DriveItem[], initialParentId?: s
setCreationModalState,
setVersionModal,
setAccessModalState,
setUsersModalState,
setPropertiesModalState,
],
);
@@ -454,7 +474,6 @@ export const useOnBuildFileContextMenu = () => {
const { open: preview } = useDrivePreview();
return useCallback(
(item: DriveItem) => {
console.log(item);
const menuItems = [
{
type: 'menu',
@@ -1,7 +1,6 @@
import { useCallback, useEffect, useState } from 'react';
import { ChevronDownIcon, ChevronUpIcon, DotsHorizontalIcon } from '@heroicons/react/outline';
import { ChevronDownIcon, DotsHorizontalIcon } from '@heroicons/react/outline';
import { Button } from '@atoms/button/button';
import { Base, BaseSmall, Title } from '@atoms/text';
import { Title } from '@atoms/text';
import Menu from '@components/menus/menu';
import { useRecoilState } from 'recoil';
import {
@@ -17,7 +16,7 @@ import Languages from '@features/global/services/languages-service';
export const SharedFilesTable = () => {
const { driveItems, loading } = useSharedWithMeDriveItems();
const [filter, setFilter] = useRecoilState(SharedWithMeFilterState);
const [filter] = useRecoilState(SharedWithMeFilterState);
// FILTER HOOKS
const buildFileTypeContextMenu = useOnBuildFileTypeContextMenu();
@@ -26,7 +25,7 @@ export const SharedFilesTable = () => {
const buildDateContextMenu = useOnBuildDateContextMenu();
const fileAddedDate = (timestamp: number) => {
const [formattedDate, formattedTime] = new Date(timestamp).toLocaleString().split(', ');
const [formattedDate] = new Date(timestamp).toLocaleString().split(', ');
return formattedDate;
};
return (