diff --git a/packages/editor/src/ce/extensions/document-extensions.tsx b/packages/editor/src/ce/extensions/document-extensions.tsx index 35d7c0f3dee..445f5e0f809 100644 --- a/packages/editor/src/ce/extensions/document-extensions.tsx +++ b/packages/editor/src/ce/extensions/document-extensions.tsx @@ -1,5 +1,6 @@ import { HocuspocusProvider } from "@hocuspocus/provider"; import { Extensions } from "@tiptap/core"; +import { AnyExtension } from "@tiptap/core"; import { SlashCommands } from "@/extensions"; // plane editor types import { TIssueEmbedConfig } from "@/plane-editor/types"; @@ -13,15 +14,24 @@ type Props = { userDetails: TUserDetails; }; +type ExtensionConfig = { + isEnabled: (disabledExtensions: TExtensions[]) => boolean; + getExtension: (props: Props) => AnyExtension; +}; + +const extensionRegistry: ExtensionConfig[] = [ + { + isEnabled: (disabledExtensions) => !disabledExtensions.includes("slash-commands"), + getExtension: () => SlashCommands({}), + }, +]; + export const DocumentEditorAdditionalExtensions = (_props: Props) => { - const { disabledExtensions } = _props; - const extensions: Extensions = disabledExtensions?.includes("slash-commands") - ? [] - : [ - SlashCommands({ - disabledExtensions, - }), - ]; + const { disabledExtensions = [] } = _props; + + const documentExtensions = extensionRegistry + .filter((config) => config.isEnabled(disabledExtensions)) + .map((config) => config.getExtension(_props)); - return extensions; + return documentExtensions; }; diff --git a/packages/editor/src/ce/extensions/slash-commands.tsx b/packages/editor/src/ce/extensions/slash-commands.tsx index 6eabee08238..faefa74523c 100644 --- a/packages/editor/src/ce/extensions/slash-commands.tsx +++ b/packages/editor/src/ce/extensions/slash-commands.tsx @@ -4,7 +4,7 @@ import { TSlashCommandAdditionalOption } from "@/extensions"; import { TExtensions } from "@/types"; type Props = { - disabledExtensions: TExtensions[]; + disabledExtensions?: TExtensions[]; }; export const coreEditorAdditionalSlashCommandOptions = (props: Props): TSlashCommandAdditionalOption[] => { diff --git a/packages/editor/src/core/extensions/slash-commands/command-items-list.tsx b/packages/editor/src/core/extensions/slash-commands/command-items-list.tsx index 1efb729019f..034d3d89786 100644 --- a/packages/editor/src/core/extensions/slash-commands/command-items-list.tsx +++ b/packages/editor/src/core/extensions/slash-commands/command-items-list.tsx @@ -39,11 +39,11 @@ import { setText, } from "@/helpers/editor-commands"; // types -import { CommandProps, ISlashCommandItem, TExtensions, TSlashCommandSectionKeys } from "@/types"; +import { CommandProps, ISlashCommandItem, TSlashCommandSectionKeys } from "@/types"; // plane editor extensions import { coreEditorAdditionalSlashCommandOptions } from "@/plane-editor/extensions"; // local types -import { TSlashCommandAdditionalOption } from "./root"; +import { TExtensionProps } from "./root"; export type TSlashCommandSection = { key: TSlashCommandSectionKeys; @@ -51,13 +51,8 @@ export type TSlashCommandSection = { items: ISlashCommandItem[]; }; -type TArgs = { - additionalOptions?: TSlashCommandAdditionalOption[]; - disabledExtensions: TExtensions[]; -}; - export const getSlashCommandFilteredSections = - (args: TArgs) => + (args: TExtensionProps) => ({ query }: { query: string }): TSlashCommandSection[] => { const { additionalOptions, disabledExtensions } = args; const SLASH_COMMAND_SECTIONS: TSlashCommandSection[] = [ diff --git a/packages/editor/src/core/extensions/slash-commands/root.tsx b/packages/editor/src/core/extensions/slash-commands/root.tsx index 5e12c997f0f..28aaebb8527 100644 --- a/packages/editor/src/core/extensions/slash-commands/root.tsx +++ b/packages/editor/src/core/extensions/slash-commands/root.tsx @@ -103,9 +103,9 @@ const renderItems = () => { }; }; -type TExtensionProps = { +export type TExtensionProps = { additionalOptions?: TSlashCommandAdditionalOption[]; - disabledExtensions: TExtensions[]; + disabledExtensions?: TExtensions[]; }; export const SlashCommands = (props: TExtensionProps) =>