diff --git a/packages/pl-api/lib/features.ts b/packages/pl-api/lib/features.ts index bf2cc57e7..fea3e7a2a 100644 --- a/packages/pl-api/lib/features.ts +++ b/packages/pl-api/lib/features.ts @@ -536,6 +536,13 @@ const getFeatures = (instance: Instance) => { circles: instance.api_versions['kmyblue_circle_history.fedibird.pl-api'] >= 1, + composeAllowHeadings: any([ + v.software !== PLEROMA && v.software !== AKKOMA, + instance.pleroma.metadata.markup.allow_headings, + ]), + + composeAllowInlineImages: instance.pleroma.metadata.markup.allow_inline_images, + /** * Mastodon's newer solution for direct messaging. * @see {@link https://docs.joinmastodon.org/methods/conversations/} diff --git a/packages/pl-fe/src/features/compose/editor/nodes/index.ts b/packages/pl-fe/src/features/compose/editor/nodes/index.ts index 1daec172c..2dc899238 100644 --- a/packages/pl-fe/src/features/compose/editor/nodes/index.ts +++ b/packages/pl-fe/src/features/compose/editor/nodes/index.ts @@ -11,7 +11,7 @@ import { ListItemNode, ListNode } from '@lexical/list'; import { HorizontalRuleNode } from '@lexical/react/LexicalHorizontalRuleNode'; import { HeadingNode, QuoteNode } from '@lexical/rich-text'; -import { useInstance } from 'pl-fe/hooks/use-instance'; +import { useFeatures } from 'pl-fe/hooks/use-features'; import { EmojiNode } from './emoji-node'; import { ImageNode } from './image-node'; @@ -20,7 +20,7 @@ import { MentionNode } from './mention-node'; import type { Klass, LexicalNode } from 'lexical'; const useNodes = (isWysiwyg?: boolean) => { - const instance = useInstance(); + const { composeAllowHeadings, composeAllowInlineImages } = useFeatures(); const nodes: Array> = [ AutoLinkNode, @@ -41,8 +41,8 @@ const useNodes = (isWysiwyg?: boolean) => { ); } - if (instance.pleroma.metadata.markup.allow_headings) nodes.push(HeadingNode); - if (instance.pleroma.metadata.markup.allow_inline_images) nodes.push(ImageNode); + if (composeAllowHeadings) nodes.push(HeadingNode); + if (composeAllowInlineImages) nodes.push(ImageNode); return nodes; }; diff --git a/packages/pl-fe/src/features/compose/editor/plugins/floating-block-type-toolbar-plugin.tsx b/packages/pl-fe/src/features/compose/editor/plugins/floating-block-type-toolbar-plugin.tsx index 96dc90568..d3014c34b 100644 --- a/packages/pl-fe/src/features/compose/editor/plugins/floating-block-type-toolbar-plugin.tsx +++ b/packages/pl-fe/src/features/compose/editor/plugins/floating-block-type-toolbar-plugin.tsx @@ -24,6 +24,7 @@ import { defineMessages, useIntl } from 'react-intl'; import { uploadFile } from 'pl-fe/actions/compose'; import { useAppDispatch } from 'pl-fe/hooks/use-app-dispatch'; +import { useFeatures } from 'pl-fe/hooks/use-features'; import { useInstance } from 'pl-fe/hooks/use-instance'; import { $createImageNode } from '../nodes/image-node'; @@ -101,9 +102,7 @@ const BlockTypeFloatingToolbar = ({ }): JSX.Element => { const intl = useIntl(); const popupCharStylesEditorRef = useRef(null); - const instance = useInstance(); - - const allowInlineImages = instance.pleroma.metadata.markup.allow_inline_images; + const { composeAllowInlineImages } = useFeatures(); const updateBlockTypeFloatingToolbar = useCallback(() => { const selection = $getSelection(); @@ -202,7 +201,7 @@ const BlockTypeFloatingToolbar = ({ > {editor.isEditable() && ( <> - {allowInlineImages && } + {composeAllowInlineImages && } { - const instance = useInstance(); + const { composeAllowHeadings } = useFeatures(); const [showDropDown, setShowDropDown] = useState(false); @@ -200,7 +200,7 @@ const BlockTypeDropdown = ({ editor, anchorElem, blockType, icon }: { active={blockType === 'paragraph'} icon={blockTypeToIcon.paragraph} /> - {instance.pleroma.metadata.markup.allow_headings === true && ( + {composeAllowHeadings && ( <> formatHeading('h1')}