diff --git a/apps/roam/src/components/ModifyNodeDialog.tsx b/apps/roam/src/components/ModifyNodeDialog.tsx index d949717e2..7353555b0 100644 --- a/apps/roam/src/components/ModifyNodeDialog.tsx +++ b/apps/roam/src/components/ModifyNodeDialog.tsx @@ -50,6 +50,7 @@ export type ModifyNodeDialogProps = { text: string; uid: string; action: string; + nodeType: string; }) => Promise; onClose: () => void; }; @@ -333,6 +334,7 @@ const ModifyNodeDialog = ({ text: content.text, uid: content.uid, action: "create", + nodeType: selectedNodeType.type, }); onClose(); @@ -441,6 +443,7 @@ const ModifyNodeDialog = ({ text: formattedTitle, uid: newPageUid, action: "create", + nodeType: selectedNodeType.type, }); } else { // Edit mode: update the existing block @@ -477,6 +480,7 @@ const ModifyNodeDialog = ({ text: updatedContent, uid: sourceBlockUid || content.uid, action: "edit", + nodeType: selectedNodeType.type, }); } onClose(); diff --git a/apps/roam/src/components/canvas/DiscourseNodeUtil.tsx b/apps/roam/src/components/canvas/DiscourseNodeUtil.tsx index 67e048dbf..9f0090729 100644 --- a/apps/roam/src/components/canvas/DiscourseNodeUtil.tsx +++ b/apps/roam/src/components/canvas/DiscourseNodeUtil.tsx @@ -499,7 +499,7 @@ export class BaseDiscourseNodeUtil extends BaseBoxShapeUtil : undefined, extensionAPI, includeDefaultNodes: true, - onSuccess: async ({ text, uid, action }) => { + onSuccess: async ({ text, uid, action, nodeType }) => { if (action === "edit") { if (isPageUid(shape.props.uid)) await window.roamAlphaAPI.updatePage({ @@ -511,7 +511,10 @@ export class BaseDiscourseNodeUtil extends BaseBoxShapeUtil // Node creation is handled by ModifyNodeDialog - no fallback needed here void setSizeAndImgPropsLocal({ text, uid }); - this.updateProps(shape.id, shape.type, { + + // Update shape type if it has changed (e.g., user changed from Claim to Hypothesis during creation) + const finalShapeType = nodeType || shape.type; + this.updateProps(shape.id, finalShapeType, { title: text, uid, }); diff --git a/apps/roam/src/components/canvas/uiOverrides.tsx b/apps/roam/src/components/canvas/uiOverrides.tsx index b63cde1d2..25a6e4783 100644 --- a/apps/roam/src/components/canvas/uiOverrides.tsx +++ b/apps/roam/src/components/canvas/uiOverrides.tsx @@ -73,9 +73,11 @@ export const getOnSelectForShape = ({ extensionAPI, includeDefaultNodes: true, imageUrl, - onSuccess: async ({ text, uid }) => { + onSuccess: async ({ text, uid, nodeType: selectedNodeType }) => { editor.deleteShapes([shape.id]); + // Use the selected node type from the dialog, which may have changed during creation + const finalNodeType = selectedNodeType || nodeType; const { h, w, @@ -83,12 +85,12 @@ export const getOnSelectForShape = ({ } = await calcCanvasNodeSizeAndImg({ nodeText: text, extensionAPI, - nodeType, + nodeType: finalNodeType, uid, }); editor.createShapes([ { - type: nodeType, + type: finalNodeType, id: createShapeId(), props: { uid, diff --git a/apps/roam/src/utils/renderNodeTagPopup.tsx b/apps/roam/src/utils/renderNodeTagPopup.tsx index f4b6af103..7b8ad0ac5 100644 --- a/apps/roam/src/utils/renderNodeTagPopup.tsx +++ b/apps/roam/src/utils/renderNodeTagPopup.tsx @@ -91,7 +91,7 @@ export const renderNodeTagPopupButton = ( nodeType: matchedNode.type, initialValue: { text: cleanedBlockText, uid: "" }, initialReferencedNode, - onSuccess: async () => { + onSuccess: async ({ nodeType }) => { // Success is handled by the dialog itself }, onClose: () => {},