Client: Shared: ExportRoomIndex: Add error handling. Add typescript

This commit is contained in:
Aleksandr Lushkin 2024-06-05 17:19:10 +02:00
parent 3e3d15f715
commit ee89a8a40b
5 changed files with 46 additions and 18 deletions

View File

@ -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 = (
<>
<Link
@ -468,7 +466,7 @@ const SectionHeaderContent = (props) => {
target="_blank"
href={urlWithProxy}
>
{fileName}
{result.fileName}
</Link>
&nbsp;
<Text as="span" fontSize="12px">

View File

@ -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);
}

View File

@ -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<TExportRoomIndexTask>;
}
export function getExportRoomIndexProgress() {
return request({
method: "get",
url: `files/rooms/indexexport`,
});
}) as Promise<TExportRoomIndexTask>;
}

View File

@ -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;
};

View File

@ -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,
}