[WIKI-181] chore: editor extension storage utility code split (#7071)

* chore: storage extension code split

* chore: use storage extension utility
This commit is contained in:
Aaryan Khandelwal 2025-05-19 13:12:52 +05:30 committed by GitHub
parent e48b2da623
commit 2a2feaf88e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 22 additions and 24 deletions

View file

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

View file

@ -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<string, UploadEntity>;
deletedImageSet: Map<string, boolean>;
@ -55,7 +55,7 @@ export const CustomImageExtension = (props: TFileHandler) => {
validation: { maxFileSize },
} = props;
return Image.extend<Record<string, unknown>, UploadImageExtensionStorage>({
return Image.extend<Record<string, unknown>, CustomImageExtensionStorage>({
name: "imageComponent",
selectable: true,
group: "block",

View file

@ -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<Record<string, unknown>, UploadImageExtensionStorage>({
return Image.extend<Record<string, unknown>, CustomImageExtensionStorage>({
name: "imageComponent",
selectable: false,
group: "block",

View file

@ -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 = <K extends ExtensionNames>(
export const getExtensionStorage = <K extends keyof ExtensionStorageMap>(
editor: Editor,
extensionName: K
): ExtensionStorageMap[K] => editor.storage[extensionName];