From ee89a8a40bfa937d0d7ad7e120424f842ee9460a Mon Sep 17 00:00:00 2001 From: Aleksandr Lushkin Date: Wed, 5 Jun 2024 17:19:10 +0200 Subject: [PATCH] Client: Shared: ExportRoomIndex: Add error handling. Add typescript --- .../src/pages/Home/Section/Header/index.js | 10 ++++----- .../client/src/store/ContextOptionsStore.js | 22 ++++++++++++------- packages/shared/api/rooms/index.ts | 6 ++--- packages/shared/api/rooms/types.ts | 18 ++++++++++++++- packages/shared/enums/index.ts | 8 +++++++ 5 files changed, 46 insertions(+), 18 deletions(-) diff --git a/packages/client/src/pages/Home/Section/Header/index.js b/packages/client/src/pages/Home/Section/Header/index.js index acbf40ada7..effb230d44 100644 --- a/packages/client/src/pages/Home/Section/Header/index.js +++ b/packages/client/src/pages/Home/Section/Header/index.js @@ -450,16 +450,14 @@ const SectionHeaderContent = (props) => { try { showLoader(); - const { fileName, fileUrl } = - await onClickExportRoomIndex(selectedFolder); + const result = await onClickExportRoomIndex(selectedFolder?.id); + if (!result) return; const urlWithProxy = combineUrl( window.DocSpaceConfig?.proxy?.url, - fileUrl, + result.fileUrl, ); - if (!fileName) return; - const toastMessage = ( <> { target="_blank" href={urlWithProxy} > - {fileName} + {result.fileName}   diff --git a/packages/client/src/store/ContextOptionsStore.js b/packages/client/src/store/ContextOptionsStore.js index 0d3c188f36..063e890ae1 100644 --- a/packages/client/src/store/ContextOptionsStore.js +++ b/packages/client/src/store/ContextOptionsStore.js @@ -104,6 +104,7 @@ import { UrlActionType, EmployeeType, FilesSelectorFilterTypes, + ExportRoomIndexTaskStatus, } from "@docspace/shared/enums"; import FilesFilter from "@docspace/shared/api/files/filter"; import { getFileLink, getFolderLink } from "@docspace/shared/api/files"; @@ -913,8 +914,6 @@ class ContextOptionsStore { while (!isCompleted) { res = await this.checkExportRoomIndexProgress(); - console.log("res", res); - if (res?.isCompleted) { isCompleted = true; } @@ -923,18 +922,25 @@ class ContextOptionsStore { return res; }; - onClickExportRoomIndex = async (room) => { + onClickExportRoomIndex = async (roomId) => { try { - let res = await api.rooms.exportRoomIndex(room.id); + let res = await api.rooms.exportRoomIndex(roomId); if (!res.isCompleted) { res = await this.loopExportRoomIndexStatusChecking(); } - return { - fileName: res.resultFileName, - fileUrl: res.resultFileUrl, - }; + if (res.status === ExportRoomIndexTaskStatus.Failed) { + toastr.error(res.error); + return; + } + + if (res.status === ExportRoomIndexTaskStatus.Completed) { + return { + fileName: res.resultFileName, + fileUrl: res.resultFileUrl, + }; + } } catch (e) { toastr.error(e); } diff --git a/packages/shared/api/rooms/index.ts b/packages/shared/api/rooms/index.ts index e9a641f2d4..dd5b6e4c23 100644 --- a/packages/shared/api/rooms/index.ts +++ b/packages/shared/api/rooms/index.ts @@ -35,7 +35,7 @@ import { toUrlParams, } from "../../utils/common"; import RoomsFilter from "./filter"; -import { TGetRooms } from "./types"; +import { TExportRoomIndexTask, TGetRooms } from "./types"; export async function getRooms(filter: RoomsFilter, signal?: AbortSignal) { let params; @@ -482,12 +482,12 @@ export function exportRoomIndex(roomId: number) { return request({ method: "post", url: `files/rooms/${roomId}/indexexport`, - }); + }) as Promise; } export function getExportRoomIndexProgress() { return request({ method: "get", url: `files/rooms/indexexport`, - }); + }) as Promise; } diff --git a/packages/shared/api/rooms/types.ts b/packages/shared/api/rooms/types.ts index 5c442a6d33..e2a309b9b5 100644 --- a/packages/shared/api/rooms/types.ts +++ b/packages/shared/api/rooms/types.ts @@ -25,7 +25,12 @@ // International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode import { TFile, TFolder } from "../files/types"; -import { FolderType, RoomsType, ShareAccessRights } from "../../enums"; +import { + ExportRoomIndexTaskStatus, + FolderType, + RoomsType, + ShareAccessRights, +} from "../../enums"; import { TCreatedBy, TPathParts } from "../../types"; export type TLogo = { @@ -91,3 +96,14 @@ export type TGetRooms = { total: number; new: number; }; + +export type TExportRoomIndexTask = { + id: string; + error: string; + percentage: number; + isCompleted: boolean; + status: ExportRoomIndexTaskStatus; + resultFileId: number; + resultFileName: string; + resultFileUrl: string; +}; diff --git a/packages/shared/enums/index.ts b/packages/shared/enums/index.ts index 198a9adac0..e0de7a04e4 100644 --- a/packages/shared/enums/index.ts +++ b/packages/shared/enums/index.ts @@ -579,3 +579,11 @@ export const enum LDAPCertificateProblem { CertUntrustedCa = -2146762478, CertUnrecognizedError = -2146762477, } + +export const enum ExportRoomIndexTaskStatus { + Created = 0, + Running = 1, + Completed = 2, + Canceled = 3, + Failed = 4, +}