plane/apps/space/helpers/editor.helper.ts
2025-07-29 19:10:39 +05:30

66 lines
1.8 KiB
TypeScript

// plane imports
import { MAX_FILE_SIZE } from "@plane/constants";
import { TFileHandler } from "@plane/editor";
import { SitesFileService } from "@plane/services";
import { getFileURL } from "@plane/utils";
// services
const sitesFileService = new SitesFileService();
/**
* @description generate the file source using assetId
* @param {string} anchor
*/
export const getEditorAssetSrc = (anchor: string, assetId: string): string | undefined => {
const url = getFileURL(`/api/public/assets/v2/anchor/${anchor}/${assetId}/`);
return url;
};
type TArgs = {
anchor: string;
uploadFile: TFileHandler["upload"];
workspaceId: string;
};
/**
* @description this function returns the file handler required by the editors
* @param {TArgs} args
*/
export const getEditorFileHandlers = (args: TArgs): TFileHandler => {
const { anchor, uploadFile, workspaceId } = args;
const getAssetSrc = async (path: string) => {
if (!path) return "";
if (path?.startsWith("http")) {
return path;
} else {
return getEditorAssetSrc(anchor, path) ?? "";
}
};
return {
checkIfAssetExists: async () => true,
assetsUploadStatus: {},
getAssetDownloadSrc: getAssetSrc,
getAssetSrc: getAssetSrc,
upload: uploadFile,
delete: async (src: string) => {
if (src?.startsWith("http")) {
await sitesFileService.deleteOldEditorAsset(workspaceId, src);
} else {
await sitesFileService.deleteNewAsset(getEditorAssetSrc(anchor, src) ?? "");
}
},
cancel: sitesFileService.cancelUpload,
restore: async (src: string) => {
if (src?.startsWith("http")) {
await sitesFileService.restoreOldEditorAsset(workspaceId, src);
} else {
await sitesFileService.restoreNewAsset(anchor, src);
}
},
validation: {
maxFileSize: MAX_FILE_SIZE,
},
};
};