From 0f684b4c6bfeaf9d6678f9e49b814db6d920c8fa Mon Sep 17 00:00:00 2001 From: Marc-Antoine Parent Date: Fri, 19 Dec 2025 11:43:14 -0500 Subject: [PATCH 1/3] eng-1164 ability to add canvas to clipboard --- apps/roam/src/components/canvas/Clipboard.tsx | 2 +- apps/roam/src/utils/getAllReferencesOnPage.ts | 56 +++++++++++++++++++ apps/roam/src/utils/hyde.ts | 18 +----- 3 files changed, 58 insertions(+), 18 deletions(-) create mode 100644 apps/roam/src/utils/getAllReferencesOnPage.ts diff --git a/apps/roam/src/components/canvas/Clipboard.tsx b/apps/roam/src/components/canvas/Clipboard.tsx index dfa438dca..adc490ad7 100644 --- a/apps/roam/src/components/canvas/Clipboard.tsx +++ b/apps/roam/src/components/canvas/Clipboard.tsx @@ -39,7 +39,7 @@ import { useAtom } from "@tldraw/state"; import AutocompleteInput from "roamjs-components/components/AutocompleteInput"; import { Result } from "roamjs-components/types/query-builder"; import fuzzy from "fuzzy"; -import { getAllReferencesOnPage } from "~/utils/hyde"; +import getAllReferencesOnPage from "~/utils/getAllReferencesOnPage"; import isDiscourseNode from "~/utils/isDiscourseNode"; import { DiscourseNodeShape, diff --git a/apps/roam/src/utils/getAllReferencesOnPage.ts b/apps/roam/src/utils/getAllReferencesOnPage.ts new file mode 100644 index 000000000..73c71f074 --- /dev/null +++ b/apps/roam/src/utils/getAllReferencesOnPage.ts @@ -0,0 +1,56 @@ +import getExtensionAPI from "roamjs-components/util/extensionApiContext"; +import normalizePageTitle from "roamjs-components/queries/normalizePageTitle"; + +// getExtensionAPI(); + +const getAllReferencesOnPage = async ( + pageTitle: string, +): Promise<{ uid: string; text: string }[]> => { + pageTitle = normalizePageTitle(pageTitle); + let referencedPages: Array<[string, string]> = []; + if (pageTitle.startsWith("Canvas/")) { + const oldCanvasContent = window.roamAlphaAPI.data.fast.q( + `[:find ?uid ?title + :where + [?c :node/title "${pageTitle}"] + [?c :block/props ?props] + [(get ?props :roamjs-query-builder) ?rqb] + [(get ?rqb :tldraw) [[?k ?v]]] + [(get ?v :props) ?shape-props] + [(get ?shape-props :uid) ?uid] + [?n :block/uid ?uid] + [?n :node/title ?title] + ]`, + ) as Array<[string, string]>; + const newCanvasContent = window.roamAlphaAPI.data.fast.q( + `[:find ?uid ?title + :where + [?c :node/title "${pageTitle}"] + [?c :block/props ?props] + [(get ?props :roamjs-query-builder) ?rqb] + [(get ?rqb :tldraw) ?tldraw] + [(get ?tldraw :store) [[?k ?v]]] + [(get ?v :props) ?shape-props] + [(get ?shape-props :uid) ?uid] + [?n :block/uid ?uid] + [?n :node/title ?title] + ]`, + ) as Array<[string, string]>; + referencedPages = [...oldCanvasContent, ...newCanvasContent]; + } else { + referencedPages = (await Promise.resolve( + window.roamAlphaAPI.data.backend.q( + `[:find ?uid ?text + :where + [?page :node/title "${pageTitle}"] + [?b :block/page ?page] + [?b :block/refs ?refPage] + [?refPage :block/uid ?uid] + [?refPage :node/title ?text]]`, + ), + )) as Array<[string, string]>; + } + return referencedPages.map(([uid, text]) => ({ uid, text })); +}; + +export default getAllReferencesOnPage; diff --git a/apps/roam/src/utils/hyde.ts b/apps/roam/src/utils/hyde.ts index 361d38725..73d229981 100644 --- a/apps/roam/src/utils/hyde.ts +++ b/apps/roam/src/utils/hyde.ts @@ -6,6 +6,7 @@ import { nextApiRoot } from "@repo/utils/execContext"; import { DiscourseNode } from "./getDiscourseNodes"; import getExtensionAPI from "roamjs-components/util/extensionApiContext"; import { getNodesByType } from "@repo/database/lib/queries"; +import getAllReferencesOnPage from "./getAllReferencesOnPage"; type ApiEmbeddingResponse = { data: Array<{ @@ -391,23 +392,6 @@ export const extractPagesFromParentBlock = async ( return results.map(([uid, title]) => ({ uid, text: title })); }; -export const getAllReferencesOnPage = async ( - pageTitle: string, -): Promise<{ uid: string; text: string }[]> => { - const referencedPages = (await Promise.resolve( - window.roamAlphaAPI.data.backend.q( - `[:find ?uid ?text - :where - [?page :node/title "${normalizePageTitle(pageTitle)}"] - [?b :block/page ?page] - [?b :block/refs ?refPage] - [?refPage :block/uid ?uid] - [?refPage :node/title ?text]]`, - ), - )) as Array<[string, string]>; - return referencedPages.map(([uid, text]) => ({ uid, text })); -}; - export type PerformHydeSearchParams = { useAllPagesForSuggestions: boolean; selectedPages: string[]; From 564c833041fad43e25960712a733cc0c16170f04 Mon Sep 17 00:00:00 2001 From: Marc-Antoine Parent Date: Fri, 19 Dec 2025 11:57:02 -0500 Subject: [PATCH 2/3] remove unused import. --- apps/roam/src/utils/getAllReferencesOnPage.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/apps/roam/src/utils/getAllReferencesOnPage.ts b/apps/roam/src/utils/getAllReferencesOnPage.ts index 73c71f074..48ecc73af 100644 --- a/apps/roam/src/utils/getAllReferencesOnPage.ts +++ b/apps/roam/src/utils/getAllReferencesOnPage.ts @@ -1,8 +1,5 @@ -import getExtensionAPI from "roamjs-components/util/extensionApiContext"; import normalizePageTitle from "roamjs-components/queries/normalizePageTitle"; -// getExtensionAPI(); - const getAllReferencesOnPage = async ( pageTitle: string, ): Promise<{ uid: string; text: string }[]> => { From 0dba50da63730c4c5eb95c6fcf8362c42d5204db Mon Sep 17 00:00:00 2001 From: Marc-Antoine Parent Date: Mon, 22 Dec 2025 09:43:39 -0500 Subject: [PATCH 3/3] use isCanvasPage --- apps/roam/src/utils/getAllReferencesOnPage.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/apps/roam/src/utils/getAllReferencesOnPage.ts b/apps/roam/src/utils/getAllReferencesOnPage.ts index 48ecc73af..4b6bd3499 100644 --- a/apps/roam/src/utils/getAllReferencesOnPage.ts +++ b/apps/roam/src/utils/getAllReferencesOnPage.ts @@ -1,15 +1,15 @@ import normalizePageTitle from "roamjs-components/queries/normalizePageTitle"; +import type { Result } from "./types"; +import { isCanvasPage } from "./isCanvasPage"; -const getAllReferencesOnPage = async ( - pageTitle: string, -): Promise<{ uid: string; text: string }[]> => { - pageTitle = normalizePageTitle(pageTitle); +const getAllReferencesOnPage = async (title: string): Promise => { + title = normalizePageTitle(title); let referencedPages: Array<[string, string]> = []; - if (pageTitle.startsWith("Canvas/")) { + if (isCanvasPage({ title })) { const oldCanvasContent = window.roamAlphaAPI.data.fast.q( `[:find ?uid ?title :where - [?c :node/title "${pageTitle}"] + [?c :node/title "${title}"] [?c :block/props ?props] [(get ?props :roamjs-query-builder) ?rqb] [(get ?rqb :tldraw) [[?k ?v]]] @@ -22,7 +22,7 @@ const getAllReferencesOnPage = async ( const newCanvasContent = window.roamAlphaAPI.data.fast.q( `[:find ?uid ?title :where - [?c :node/title "${pageTitle}"] + [?c :node/title "${title}"] [?c :block/props ?props] [(get ?props :roamjs-query-builder) ?rqb] [(get ?rqb :tldraw) ?tldraw] @@ -39,7 +39,7 @@ const getAllReferencesOnPage = async ( window.roamAlphaAPI.data.backend.q( `[:find ?uid ?text :where - [?page :node/title "${pageTitle}"] + [?page :node/title "${title}"] [?b :block/page ?page] [?b :block/refs ?refPage] [?refPage :block/uid ?uid]