From 16f7f3d3d4e6fd42cdfa6f6a08f219a924dd8d99 Mon Sep 17 00:00:00 2001 From: Aleksandr Lushkin Date: Thu, 30 May 2024 16:40:42 +0200 Subject: [PATCH] Client: Shared: Add export index layout with fake api --- packages/client/public/locales/en/Files.json | 2 ++ .../src/pages/Home/Section/Header/index.js | 36 +++++++++++++++++++ .../client/src/store/ContextOptionsStore.js | 9 +++++ packages/shared/api/rooms/index.ts | 4 +++ 4 files changed, 51 insertions(+) diff --git a/packages/client/public/locales/en/Files.json b/packages/client/public/locales/en/Files.json index 27da37e0a6..014c7ff0d5 100644 --- a/packages/client/public/locales/en/Files.json +++ b/packages/client/public/locales/en/Files.json @@ -67,9 +67,11 @@ "EnableLink": "Enable link", "EnableNotifications": "Enable notifications", "ExcludeSubfolders": "Exclude subfolders", + "ExportRoomIndex": "Export room index", "FavoritesEmptyContainerDescription": "To mark files as favorites or remove them from this list, use the context menu.", "FileContents": "File contents", "FileDownloadingIsRestricted": "File downloading is restricted in this room.", + "FileExportedToMyDocuments": "file exported to My Documents", "FileRemoved": "File moved to Trash", "FileRenamed": "The document '{{oldTitle}}' is renamed to '{{newTitle}}'", "FilesWillAppearHere": "Files and folders added to the room will appear here.", diff --git a/packages/client/src/pages/Home/Section/Header/index.js b/packages/client/src/pages/Home/Section/Header/index.js index f833fd8c15..bfe3e5acdd 100644 --- a/packages/client/src/pages/Home/Section/Header/index.js +++ b/packages/client/src/pages/Home/Section/Header/index.js @@ -62,6 +62,8 @@ import { tablet, mobile, Consumer, getLogoUrl } from "@docspace/shared/utils"; import { toastr } from "@docspace/shared/components/toast"; import { TableGroupMenu } from "@docspace/shared/components/table"; +import { Link } from "@docspace/shared/components/link"; +import { Text } from "@docspace/shared/components/text"; import { Events, RoomsType, @@ -290,6 +292,7 @@ const SectionHeaderContent = (props) => { startUpload, getFolderModel, onCreateRoom, + onClickExportRoomIndex, } = props; const navigate = useNavigate(); @@ -441,6 +444,26 @@ const SectionHeaderContent = (props) => { toastr.success(t("Translations:LinkCopySuccess")); }; + const onExportRoomIndex = async () => { + const fileTitle = await onClickExportRoomIndex(selectedFolder); + + if (!fileTitle) return; + + const toastMessage = ( + <> + + {fileTitle} + +   + + {t("Files:FileExportedToMyDocuments")} + + + ); + + toastr.success(toastMessage); + }; + const onDeleteRoomInArchive = () => { setSelection([selectedFolder]); deleteRooms(t); @@ -468,6 +491,7 @@ const SectionHeaderContent = (props) => { haveLinksRight, isPublicRoom, isFrame, + isVDRRoomType, } = props; const isArchive = selectedFolder.rootFolderType === FolderType.Archive; @@ -628,6 +652,14 @@ const SectionHeaderContent = (props) => { onClick: onToggleInfoPanel, disabled: !isRoom, }, + { + id: "header_option_export-room-index", + key: "export-room-index", + label: t("Files:ExportRoomIndex"), + icon: DownloadReactSvgUrl, + onClick: onExportRoomIndex, + disabled: !isVDRRoomType, + }, { id: "header_option_separator-2", key: "separator-2", @@ -1166,6 +1198,7 @@ export default inject( const isPublicRoomType = roomType === RoomsType.PublicRoom; const isCustomRoomType = roomType === RoomsType.CustomRoom; const isFormRoomType = roomType === RoomsType.FormRoom; + const isVDRRoomType = roomType === RoomsType.VirtualDataRoom; const { onClickEditRoom, @@ -1177,6 +1210,7 @@ export default inject( onCreateAndCopySharedLink, getFolderModel, onCreateRoom, + onClickExportRoomIndex, } = contextOptionsStore; const canRestoreAll = isArchiveFolder && roomsForRestore.length > 0; @@ -1304,6 +1338,7 @@ export default inject( onShowInfoPanel, onClickArchive, onCopyLink, + onClickExportRoomIndex, isEmptyArchive, canRestoreAll, @@ -1315,6 +1350,7 @@ export default inject( isPublicRoomType, isCustomRoomType, isFormRoomType, + isVDRRoomType, isPublicRoom, primaryLink, getPrimaryLink, diff --git a/packages/client/src/store/ContextOptionsStore.js b/packages/client/src/store/ContextOptionsStore.js index 5ab84d03f8..bd6ec4be58 100644 --- a/packages/client/src/store/ContextOptionsStore.js +++ b/packages/client/src/store/ContextOptionsStore.js @@ -892,6 +892,15 @@ class ContextOptionsStore { this.filesActionsStore.setMuteAction(action, item, t); }; + onClickExportRoomIndex = async (room) => { + try { + await api.rooms.exportRoomIndex(room.id); + return `${room.title}_index.xlsx`; + } catch (e) { + toastr.error(e); + } + }; + onClickRemoveFromRecent = (item) => { this.filesActionsStore.removeFilesFromRecent([item.id]); }; diff --git a/packages/shared/api/rooms/index.ts b/packages/shared/api/rooms/index.ts index f13f4356fc..befa78bb79 100644 --- a/packages/shared/api/rooms/index.ts +++ b/packages/shared/api/rooms/index.ts @@ -477,3 +477,7 @@ export function resetRoomQuota(roomIds) { return request(options); } + +export function exportRoomIndex(roomId: number) { + return new Promise((resolve) => setTimeout(() => resolve(), 1000)); +}