diff --git a/apps/client/src/features/editor/components/pdf/pdf-menu.tsx b/apps/client/src/features/editor/components/pdf/pdf-menu.tsx index 538fc34c..2104bfbc 100644 --- a/apps/client/src/features/editor/components/pdf/pdf-menu.tsx +++ b/apps/client/src/features/editor/components/pdf/pdf-menu.tsx @@ -8,13 +8,10 @@ import { } from "@/features/editor/components/table/types/types.ts"; import { ActionIcon, Tooltip } from "@mantine/core"; import { - IconDownload, IconPaperclip, IconTrash, } from "@tabler/icons-react"; import { useTranslation } from "react-i18next"; -import { getFileUrl } from "@/lib/config.ts"; -import { isInternalFileUrl } from "@docmost/editor-ext"; import classes from "../common/toolbar-menu.module.css"; export function PdfMenu({ editor }: EditorMenuProps) { @@ -40,11 +37,15 @@ export function PdfMenu({ editor }: EditorMenuProps) { const shouldShow = useCallback( ({ state }: ShouldShowProps) => { - if (!state) { + if (!state || !editor.isActive("pdf")) { return false; } - return editor.isActive("pdf") && editor.getAttributes("pdf").src; + const { selection } = state; + const dom = editor.view.nodeDOM(selection.from) as HTMLElement | null; + if (!dom) return false; + + return !!dom.querySelector("[data-pdf-error]"); }, [editor], ); @@ -71,15 +72,6 @@ export function PdfMenu({ editor }: EditorMenuProps) { }; }, [editor]); - const handleDownload = useCallback(() => { - if (!editorState?.src || !isInternalFileUrl(editorState.src)) return; - const url = getFileUrl(editorState.src); - const a = document.createElement("a"); - a.href = url; - a.download = ""; - a.click(); - }, [editorState?.src]); - const handleConvertToAttachment = useCallback(() => { if (!editorState?.src) return; @@ -124,17 +116,6 @@ export function PdfMenu({ editor }: EditorMenuProps) { shouldShow={shouldShow} >
- - - - - - { + if (!src) return; + const pos = getPos(); + if (pos === undefined) return; + const currentNode = editor.state.doc.nodeAt(pos); + if (!currentNode || currentNode.type.name !== "pdf") return; + + editor + .chain() + .insertContentAt( + { from: pos, to: pos + currentNode.nodeSize }, + { + type: "attachment", + attrs: { + url: currentNode.attrs.src, + name: currentNode.attrs.name, + attachmentId: currentNode.attrs.attachmentId, + size: currentNode.attrs.size, + mime: "application/pdf", + }, + }, + ) + .run(); + }, [editor, src, getPos]); + + const handleDelete = useCallback(() => { + const pos = getPos(); + if (pos === undefined) return; + editor.commands.setNodeSelection(pos); + editor.commands.deleteSelection(); + }, [editor, getPos]); + if (!src || !safeSrc) { return ( @@ -54,7 +90,7 @@ export default function PdfView(props: NodeViewProps) { if (hasError) { return ( -
+
{t("Failed to load PDF")} @@ -99,7 +135,32 @@ export default function PdfView(props: NodeViewProps) { } }} /> - {!selected &&
} + {editor.isEditable && ( +
+ + + + + + + + + + +
+ )}
diff --git a/apps/client/src/features/editor/components/slash-menu/menu-items.ts b/apps/client/src/features/editor/components/slash-menu/menu-items.ts index 92bfb056..58228ed9 100644 --- a/apps/client/src/features/editor/components/slash-menu/menu-items.ts +++ b/apps/client/src/features/editor/components/slash-menu/menu-items.ts @@ -427,7 +427,7 @@ const CommandGroups: SlashMenuGroupedItemsType = { editor.chain().focus().deleteRange(range).setDrawio().run(), }, { - title: "Excalidraw diagram (Whiteboard)", + title: "Excalidraw (Whiteboard)", description: "Draw and sketch excalidraw diagrams", searchTerms: ["diagrams", "draw", "sketch", "whiteboard"], icon: IconExcalidraw,