diff --git a/packages/editor/src/ce/extensions/document-extensions.tsx b/packages/editor/src/ce/extensions/document-extensions.tsx new file mode 100644 index 000000000..efb6618db --- /dev/null +++ b/packages/editor/src/ce/extensions/document-extensions.tsx @@ -0,0 +1,41 @@ +import { LayersIcon } from "lucide-react"; +import { SlashCommand } from "@/extensions"; +// hooks +import { TFileHandler } from "@/hooks/use-editor"; +// plane editor types +import { TIssueEmbedConfig } from "@/plane-editor/types"; +// types +import { ISlashCommandItem } from "@/types"; + +type Props = { + fileHandler: TFileHandler; + issueEmbedConfig: TIssueEmbedConfig | undefined; +}; + +export const DocumentEditorAdditionalExtensions = (props: Props) => { + const { fileHandler } = props; + + const slashCommandAdditionalOptions: ISlashCommandItem[] = [ + { + key: "issue_embed", + title: "Issue embed", + description: "Embed an issue from the project.", + searchTerms: ["issue", "link", "embed"], + icon: , + command: ({ editor, range }) => { + editor + .chain() + .focus() + .insertContentAt( + range, + "

#issue_

" + ) + .run(); + }, + }, + ]; + + const extensions = [SlashCommand(fileHandler.upload, slashCommandAdditionalOptions)]; + + return extensions; +}; diff --git a/packages/editor/src/ce/extensions/index.ts b/packages/editor/src/ce/extensions/index.ts new file mode 100644 index 000000000..4a975b8c5 --- /dev/null +++ b/packages/editor/src/ce/extensions/index.ts @@ -0,0 +1 @@ +export * from "./document-extensions"; diff --git a/packages/editor/src/core/hooks/use-document-editor.ts b/packages/editor/src/core/hooks/use-document-editor.ts index 5ab5bc08f..706e10225 100644 --- a/packages/editor/src/core/hooks/use-document-editor.ts +++ b/packages/editor/src/core/hooks/use-document-editor.ts @@ -4,9 +4,11 @@ import { EditorProps } from "@tiptap/pm/view"; import { IndexeddbPersistence } from "y-indexeddb"; import * as Y from "yjs"; // extensions -import { DragAndDrop, IssueWidget, SlashCommand } from "@/extensions"; +import { DragAndDrop, IssueWidget } from "@/extensions"; // hooks import { TFileHandler, useEditor } from "@/hooks/use-editor"; +// plane editor extensions +import { DocumentEditorAdditionalExtensions } from "@/plane-editor/extensions"; // plane editor provider import { CollaborationProvider } from "@/plane-editor/providers"; // plane editor types @@ -85,7 +87,6 @@ export const useDocumentEditor = (props: DocumentEditorProps) => { forwardedRef, mentionHandler, extensions: [ - SlashCommand(fileHandler.upload), DragAndDrop(setHideDragHandleFunction), embedHandler?.issue && IssueWidget({ @@ -94,6 +95,10 @@ export const useDocumentEditor = (props: DocumentEditorProps) => { Collaboration.configure({ document: provider.document, }), + ...DocumentEditorAdditionalExtensions({ + fileHandler, + issueEmbedConfig: embedHandler?.issue, + }), ], placeholder, tabIndex, diff --git a/packages/editor/src/ee/extensions/index.ts b/packages/editor/src/ee/extensions/index.ts new file mode 100644 index 000000000..1c59af5c6 --- /dev/null +++ b/packages/editor/src/ee/extensions/index.ts @@ -0,0 +1 @@ +export * from "src/ce/extensions";