diff --git a/packages/editor/src/ce/types/storage.ts b/packages/editor/src/ce/types/storage.ts new file mode 100644 index 000000000..4e106738b --- /dev/null +++ b/packages/editor/src/ce/types/storage.ts @@ -0,0 +1,13 @@ +import { HeadingExtensionStorage } from "@/extensions"; +import { CustomImageExtensionStorage } from "@/extensions/custom-image"; +import { CustomLinkStorage } from "@/extensions/custom-link"; +import { MentionExtensionStorage } from "@/extensions/mentions"; +import { ImageExtensionStorage } from "@/plugins/image"; + +export type ExtensionStorageMap = { + imageComponent: CustomImageExtensionStorage; + image: ImageExtensionStorage; + link: CustomLinkStorage; + headingList: HeadingExtensionStorage; + mention: MentionExtensionStorage; +}; diff --git a/packages/editor/src/core/extensions/custom-image/custom-image.ts b/packages/editor/src/core/extensions/custom-image/custom-image.ts index a9a69fa60..11586bf86 100644 --- a/packages/editor/src/core/extensions/custom-image/custom-image.ts +++ b/packages/editor/src/core/extensions/custom-image/custom-image.ts @@ -8,6 +8,7 @@ import { ACCEPTED_IMAGE_MIME_TYPES } from "@/constants/config"; import { CustomImageNode } from "@/extensions/custom-image"; // helpers import { isFileValid } from "@/helpers/file"; +import { getExtensionStorage } from "@/helpers/get-extension-storage"; import { insertEmptyParagraphAtNodeBoundaries } from "@/helpers/insert-empty-paragraph-at-node-boundary"; // plugins import { TrackImageDeletionPlugin, TrackImageRestorationPlugin } from "@/plugins/image"; @@ -32,10 +33,9 @@ declare module "@tiptap/core" { } } -export const getImageComponentImageFileMap = (editor: Editor) => - (editor.storage.imageComponent as UploadImageExtensionStorage | undefined)?.fileMap; +export const getImageComponentImageFileMap = (editor: Editor) => getExtensionStorage(editor, "imageComponent")?.fileMap; -export interface UploadImageExtensionStorage { +export interface CustomImageExtensionStorage { assetsUploadStatus: TFileHandler["assetsUploadStatus"]; fileMap: Map; deletedImageSet: Map; @@ -55,7 +55,7 @@ export const CustomImageExtension = (props: TFileHandler) => { validation: { maxFileSize }, } = props; - return Image.extend, UploadImageExtensionStorage>({ + return Image.extend, CustomImageExtensionStorage>({ name: "imageComponent", selectable: true, group: "block", diff --git a/packages/editor/src/core/extensions/custom-image/read-only-custom-image.ts b/packages/editor/src/core/extensions/custom-image/read-only-custom-image.ts index 0d8a7cc55..51b758898 100644 --- a/packages/editor/src/core/extensions/custom-image/read-only-custom-image.ts +++ b/packages/editor/src/core/extensions/custom-image/read-only-custom-image.ts @@ -2,14 +2,14 @@ import { mergeAttributes } from "@tiptap/core"; import { Image } from "@tiptap/extension-image"; import { ReactNodeViewRenderer } from "@tiptap/react"; // components -import { CustomImageNode, UploadImageExtensionStorage } from "@/extensions/custom-image"; +import { CustomImageNode, CustomImageExtensionStorage } from "@/extensions/custom-image"; // types import { TReadOnlyFileHandler } from "@/types"; export const CustomReadOnlyImageExtension = (props: TReadOnlyFileHandler) => { const { getAssetSrc, restore: restoreImageFn } = props; - return Image.extend, UploadImageExtensionStorage>({ + return Image.extend, CustomImageExtensionStorage>({ name: "imageComponent", selectable: false, group: "block", diff --git a/packages/editor/src/core/helpers/get-extension-storage.ts b/packages/editor/src/core/helpers/get-extension-storage.ts index 0107f8425..86db93e18 100644 --- a/packages/editor/src/core/helpers/get-extension-storage.ts +++ b/packages/editor/src/core/helpers/get-extension-storage.ts @@ -1,23 +1,8 @@ import { Editor } from "@tiptap/core"; -import { - CustomLinkStorage, - HeadingExtensionStorage, - MentionExtensionStorage, - UploadImageExtensionStorage, -} from "@/extensions"; -import { ImageExtensionStorage } from "@/plugins/image"; +// plane editor types +import { ExtensionStorageMap } from "@/plane-editor/types/storage"; -type ExtensionNames = "imageComponent" | "image" | "link" | "headingList" | "mention"; - -interface ExtensionStorageMap { - imageComponent: UploadImageExtensionStorage; - image: ImageExtensionStorage; - link: CustomLinkStorage; - headingList: HeadingExtensionStorage; - mention: MentionExtensionStorage; -} - -export const getExtensionStorage = ( +export const getExtensionStorage = ( editor: Editor, extensionName: K ): ExtensionStorageMap[K] => editor.storage[extensionName];