diff --git a/apps/roam/src/components/ModifyNodeDialog.tsx b/apps/roam/src/components/ModifyNodeDialog.tsx index 06a0f9958..9fcaefd1f 100644 --- a/apps/roam/src/components/ModifyNodeDialog.tsx +++ b/apps/roam/src/components/ModifyNodeDialog.tsx @@ -31,12 +31,12 @@ import { getNewDiscourseNodeText, getReferencedNodeInFormat, } from "~/utils/formatUtils"; -import createDiscourseNode from "~/utils/createDiscourseNode"; +import createDiscourseNode, { + handleImageCreation, +} from "~/utils/createDiscourseNode"; import { OnloadArgs } from "roamjs-components/types"; import { render as renderToast } from "roamjs-components/components/Toast"; import getPageUidByPageTitle from "roamjs-components/queries/getPageUidByPageTitle"; -import resolveQueryBuilderRef from "~/utils/resolveQueryBuilderRef"; -import runQuery from "~/utils/runQuery"; import posthog from "posthog-js"; export type ModifyNodeDialogMode = "create" | "edit"; @@ -58,6 +58,7 @@ export type ModifyNodeDialogProps = { text: string; uid: string; action: string; + nodeType?: string; }) => Promise; onClose: () => void; }; @@ -273,66 +274,6 @@ const ModifyNodeDialog = ({ onClose(); }, [onClose]); - const addImageToPage = useCallback( - async ({ - pageUid, - imageUrl, - configPageUid, - extensionAPI, - }: { - pageUid: string; - imageUrl: string; - configPageUid: string; - extensionAPI?: OnloadArgs["extensionAPI"]; - }) => { - const discourseNodes = getDiscourseNodes(); - const canvasSettings = Object.fromEntries( - discourseNodes.map((n) => [n.type, { ...n.canvasSettings }]), - ); - const { - "query-builder-alias": qbAlias = "", - "key-image": isKeyImage = "", - "key-image-option": keyImageOption = "", - } = canvasSettings[configPageUid] || {}; - - const createOrUpdateImageBlock = async (imagePlaceholderUid?: string) => { - const imageMarkdown = `![](${imageUrl})`; - if (imagePlaceholderUid) { - await updateBlock({ - uid: imagePlaceholderUid, - text: imageMarkdown, - }); - } else { - await createBlock({ - node: { text: imageMarkdown }, - order: 0, - parentUid: pageUid, - }); - } - }; - - if (!isKeyImage || !extensionAPI) { - await createOrUpdateImageBlock(); - return; - } - - if (keyImageOption === "query-builder") { - const parentUid = resolveQueryBuilderRef({ queryRef: qbAlias }); - const results = await runQuery({ - extensionAPI, - parentUid, - // due to query format - inputs: { NODETEXT: content.text, NODEUID: pageUid }, - }); - const imagePlaceholderUid = results.allProcessedResults[0]?.uid; - await createOrUpdateImageBlock(imagePlaceholderUid); - } else { - await createOrUpdateImageBlock(); - } - }, - [content.text], - ); - const onSubmit = async () => { if (!content.text.trim()) return; if (!selectedNodeType && !isContentLocked) { @@ -358,11 +299,13 @@ const ModifyNodeDialog = ({ if (imageUrl) { const pageUid = content.uid || getPageUidByPageTitle(content.text); if (pageUid) { - await addImageToPage({ + await handleImageCreation({ pageUid, - imageUrl, + discourseNodes: getDiscourseNodes(), configPageUid: selectedNodeType?.type || "", + imageUrl, extensionAPI, + text: content.text, }); } } @@ -371,6 +314,7 @@ const ModifyNodeDialog = ({ text: content.text, uid: content.uid, action: "create", + nodeType: selectedNodeType?.type, }); onClose(); @@ -480,6 +424,7 @@ const ModifyNodeDialog = ({ text: formattedTitle, uid: newPageUid, action: "create", + nodeType: selectedNodeType?.type, }); } else { // Edit mode: update the existing block @@ -515,6 +460,7 @@ const ModifyNodeDialog = ({ text: updatedContent, uid: sourceBlockUid || content.uid, action: "edit", + nodeType: selectedNodeType?.type, }); } onClose(); @@ -592,6 +538,17 @@ const ModifyNodeDialog = ({ + {imageUrl && ( + + )} + {/* Referenced Node Input */} {referencedNode && !isContentLocked && mode === "create" && (