/** * Copyright (c) 2023-present Plane Software, Inc. and contributors * SPDX-License-Identifier: AGPL-3.0-only * See the LICENSE file for details. */ import type { AxiosRequestConfig } from "axios"; import axios from "axios"; // plane services import type { TFileUploadRequest } from "@plane/services"; // services import { APIService } from "@/services/api.service"; export class FileUploadService extends APIService { private cancelSource: any; constructor() { super(""); } // BB-PATCH: dispatches on payload.method (PUT for fork default, POST kept // for upstream-Plane parity). See packages/services/src/file/helper.ts. async uploadFile( payload: TFileUploadRequest, uploadProgressHandler?: AxiosRequestConfig["onUploadProgress"] ): Promise { this.cancelSource = axios.CancelToken.source(); return this.request({ method: payload.method, url: payload.url, data: payload.body, headers: payload.headers, cancelToken: this.cancelSource.token, withCredentials: false, onUploadProgress: uploadProgressHandler, }) .then((response) => response?.data) .catch((error) => { if (axios.isCancel(error)) { console.log(error.message); } else { throw error?.response?.data; } }); } cancelUpload() { this.cancelSource.cancel("Upload canceled"); } }