Skip to content

Commit d5deabb

Browse files
committed
Fix shared template creation flow
1 parent d79a736 commit d5deabb

2 files changed

Lines changed: 76 additions & 63 deletions

File tree

apps/roam/src/utils/createDiscourseNode.ts

Lines changed: 67 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,6 @@ import runQuery from "./runQuery";
1313
import updateBlock from "roamjs-components/writes/updateBlock";
1414
import posthog from "posthog-js";
1515

16-
export const hasSmartBlockSyntax = (node: RoamBasicNode): boolean => {
17-
if (node.text.includes("<%")) return true;
18-
if (node.children) return node.children.some(hasSmartBlockSyntax);
19-
return false;
20-
};
21-
2216
const handleImageCreation = async ({
2317
pageUid,
2418
discourseNodes,
@@ -82,22 +76,74 @@ const handleImageCreation = async ({
8276

8377
export const createBlocksFromTemplate = async ({
8478
templateNode,
85-
parentUid,
79+
pageUid,
80+
discourseNodes,
81+
configPageUid,
82+
imageUrl,
83+
extensionAPI,
84+
text,
8685
}: {
8786
templateNode: RoamBasicNode;
88-
parentUid: string;
87+
pageUid: string;
88+
discourseNodes: ReturnType<typeof getDiscourseNodes>;
89+
configPageUid: string;
90+
imageUrl?: string;
91+
extensionAPI?: OnloadArgs["extensionAPI"];
92+
text: string;
8993
}) => {
90-
const existingChildren = getFullTreeByParentUid(parentUid).children || [];
91-
const lastOrder = existingChildren.length;
92-
await Promise.all(
93-
stripUid(templateNode.children).map((node, order) =>
94-
createBlock({
95-
node,
96-
order: lastOrder + order,
97-
parentUid,
98-
}),
99-
),
100-
);
94+
const createBlocksFromTemplate = async () => {
95+
await Promise.all(
96+
stripUid(templateNode.children).map(({ uid, ...node }, order) =>
97+
createBlock({
98+
node,
99+
order,
100+
parentUid: pageUid,
101+
}),
102+
),
103+
);
104+
105+
// Add image to page if imageUrl is provided
106+
await handleImageCreation({
107+
pageUid,
108+
discourseNodes,
109+
configPageUid,
110+
imageUrl,
111+
extensionAPI,
112+
text,
113+
});
114+
};
115+
116+
const hasSmartBlockSyntax = (node: RoamBasicNode) => {
117+
if (node.text.includes("<%")) return true;
118+
if (node.children) return node.children.some(hasSmartBlockSyntax);
119+
return false;
120+
};
121+
const useSmartBlocks = hasSmartBlockSyntax(templateNode);
122+
123+
if (useSmartBlocks && !window.roamjs?.extension?.smartblocks) {
124+
renderToast({
125+
content:
126+
"This template requires SmartBlocks. Enable SmartBlocks in Roam Depot to use this template.",
127+
id: "smartblocks-extension-disabled",
128+
intent: "warning",
129+
});
130+
await createBlocksFromTemplate();
131+
} else if (useSmartBlocks && window.roamjs?.extension?.smartblocks) {
132+
window.roamjs.extension.smartblocks?.triggerSmartblock({
133+
srcUid: templateNode.uid,
134+
targetUid: pageUid,
135+
});
136+
await handleImageCreation({
137+
pageUid,
138+
discourseNodes,
139+
configPageUid,
140+
imageUrl,
141+
extensionAPI,
142+
text,
143+
});
144+
} else {
145+
await createBlocksFromTemplate();
146+
}
101147
};
102148

103149
type Props = {
@@ -188,25 +234,8 @@ const createDiscourseNode = async ({
188234
key: "template",
189235
});
190236

191-
const useSmartBlocks = hasSmartBlockSyntax(templateNode);
192-
193-
if (useSmartBlocks && !window.roamjs?.extension?.smartblocks) {
194-
renderToast({
195-
content:
196-
"This template requires SmartBlocks. Enable SmartBlocks in Roam Depot to use this template.",
197-
id: "smartblocks-extension-disabled",
198-
intent: "warning",
199-
});
200-
await createBlocksFromTemplate({ templateNode, parentUid: pageUid });
201-
} else if (useSmartBlocks && window.roamjs?.extension?.smartblocks) {
202-
window.roamjs.extension.smartblocks?.triggerSmartblock({
203-
srcUid: templateNode.uid,
204-
targetUid: pageUid,
205-
});
206-
} else {
207-
await createBlocksFromTemplate({ templateNode, parentUid: pageUid });
208-
}
209-
await handleImageCreation({
237+
await createBlocksFromTemplate({
238+
templateNode,
210239
pageUid,
211240
discourseNodes,
212241
configPageUid,

apps/roam/src/utils/registerCommandPaletteCommands.ts

Lines changed: 9 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,7 @@ import {
2020
onPageRefObserverChange,
2121
} from "./pageRefObserverHandlers";
2222
import findDiscourseNode from "~/utils/findDiscourseNode";
23-
import {
24-
hasSmartBlockSyntax,
25-
createBlocksFromTemplate,
26-
} from "~/utils/createDiscourseNode";
23+
import { createBlocksFromTemplate } from "~/utils/createDiscourseNode";
2724
import getFullTreeByParentUid from "roamjs-components/queries/getFullTreeByParentUid";
2825
import getSubTree from "roamjs-components/util/getSubTree";
2926
import { HIDE_METADATA_KEY } from "~/data/userSettings";
@@ -172,27 +169,14 @@ export const convertPageToNodeFromCommand = (
172169
const nodeTree = getFullTreeByParentUid(configPageUid).children;
173170
const templateNode = getSubTree({ tree: nodeTree, key: "template" });
174171
if (templateNode.children.length > 0) {
175-
const useSmartBlocks = hasSmartBlockSyntax(templateNode);
176-
177-
if (useSmartBlocks && window.roamjs?.extension?.smartblocks) {
178-
void window.roamjs.extension.smartblocks?.triggerSmartblock({
179-
srcUid: templateNode.uid,
180-
targetUid: pageUid,
181-
});
182-
} else {
183-
if (useSmartBlocks) {
184-
renderToast({
185-
content:
186-
"This template requires SmartBlocks. Enable SmartBlocks in Roam Depot to use this template.",
187-
id: "smartblocks-extension-disabled",
188-
intent: "warning",
189-
});
190-
}
191-
await createBlocksFromTemplate({
192-
templateNode,
193-
parentUid: pageUid,
194-
});
195-
}
172+
await createBlocksFromTemplate({
173+
templateNode,
174+
pageUid,
175+
discourseNodes: getDiscourseNodes(),
176+
configPageUid,
177+
extensionAPI,
178+
text: formattedTitle,
179+
});
196180
}
197181

198182
return pageUid;

0 commit comments

Comments
 (0)