diff --git a/src/admin/components/forms/field-types/RichText/injectVoid.ts b/src/admin/components/forms/field-types/RichText/elements/injectVoid.ts similarity index 100% rename from src/admin/components/forms/field-types/RichText/injectVoid.ts rename to src/admin/components/forms/field-types/RichText/elements/injectVoid.ts diff --git a/src/admin/components/forms/field-types/RichText/isLastSelectedElementEmpty.ts b/src/admin/components/forms/field-types/RichText/elements/isLastSelectedElementEmpty.ts similarity index 100% rename from src/admin/components/forms/field-types/RichText/isLastSelectedElementEmpty.ts rename to src/admin/components/forms/field-types/RichText/elements/isLastSelectedElementEmpty.ts diff --git a/src/admin/components/forms/field-types/RichText/elements/link/utilities.tsx b/src/admin/components/forms/field-types/RichText/elements/link/utilities.tsx index 7478ba74de..f6f2f5b1e8 100644 --- a/src/admin/components/forms/field-types/RichText/elements/link/utilities.tsx +++ b/src/admin/components/forms/field-types/RichText/elements/link/utilities.tsx @@ -1,41 +1,37 @@ import { Editor, Transforms, Range, Element } from 'slate'; - -export const isLinkActive = (editor: Editor): boolean => { - const [link] = Editor.nodes(editor, { match: (n) => Element.isElement(n) && n.type === 'link' }); - return !!link; -}; +import isElementActive from '../isActive'; export const unwrapLink = (editor: Editor): void => { Transforms.unwrapNodes(editor, { match: (n) => Element.isElement(n) && n.type === 'link' }); }; -export const wrapLink = (editor, url?: string, newTab?: boolean): void => { - if (isLinkActive(editor)) { - unwrapLink(editor); - } - +export const wrapLink = (editor: Editor, url?: string, newTab?: boolean): void => { const { selection, blurSelection } = editor; if (blurSelection) { Transforms.select(editor, blurSelection); } - const selectionToUse = selection || blurSelection; - - const isCollapsed = selectionToUse && Range.isCollapsed(selectionToUse); - - const link = { - type: 'link', - url, - newTab, - children: isCollapsed ? [{ text: url }] : [], - }; - - if (isCollapsed) { - Transforms.insertNodes(editor, link); + if (isElementActive(editor, 'link')) { + unwrapLink(editor); } else { - Transforms.wrapNodes(editor, link, { split: true }); - Transforms.collapse(editor, { edge: 'end' }); + const selectionToUse = selection || blurSelection; + + const isCollapsed = selectionToUse && Range.isCollapsed(selectionToUse); + + const link = { + type: 'link', + url, + newTab, + children: isCollapsed ? [{ text: url }] : [], + }; + + if (isCollapsed) { + Transforms.insertNodes(editor, link); + } else { + Transforms.wrapNodes(editor, link, { split: true }); + Transforms.collapse(editor, { edge: 'end' }); + } } }; diff --git a/src/admin/components/forms/field-types/RichText/elements/relationship/Button/index.tsx b/src/admin/components/forms/field-types/RichText/elements/relationship/Button/index.tsx index e1ee606d52..26064141b8 100644 --- a/src/admin/components/forms/field-types/RichText/elements/relationship/Button/index.tsx +++ b/src/admin/components/forms/field-types/RichText/elements/relationship/Button/index.tsx @@ -12,7 +12,7 @@ import Submit from '../../../../../Submit'; import X from '../../../../../../icons/X'; import Fields from './Fields'; import { requests } from '../../../../../../../api'; -import { injectVoidElement } from '../../../injectVoid'; +import { injectVoidElement } from '../../injectVoid'; import './index.scss'; diff --git a/src/admin/components/forms/field-types/RichText/elements/upload/Button/index.tsx b/src/admin/components/forms/field-types/RichText/elements/upload/Button/index.tsx index 0f875f0d9d..d5ce011dd0 100644 --- a/src/admin/components/forms/field-types/RichText/elements/upload/Button/index.tsx +++ b/src/admin/components/forms/field-types/RichText/elements/upload/Button/index.tsx @@ -16,7 +16,7 @@ import MinimalTemplate from '../../../../../../templates/Minimal'; import Button from '../../../../../../elements/Button'; import { SanitizedCollectionConfig } from '../../../../../../../../collections/config/types'; import PerPage from '../../../../../../elements/PerPage'; -import { injectVoidElement } from '../../../injectVoid'; +import { injectVoidElement } from '../../injectVoid'; import './index.scss'; import '../addSwapModals.scss';