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..4b6bd3499 --- /dev/null +++ b/apps/roam/src/utils/getAllReferencesOnPage.ts @@ -0,0 +1,53 @@ +import normalizePageTitle from "roamjs-components/queries/normalizePageTitle"; +import type { Result } from "./types"; +import { isCanvasPage } from "./isCanvasPage"; + +const getAllReferencesOnPage = async (title: string): Promise => { + title = normalizePageTitle(title); + let referencedPages: Array<[string, string]> = []; + if (isCanvasPage({ title })) { + const oldCanvasContent = window.roamAlphaAPI.data.fast.q( + `[:find ?uid ?title + :where + [?c :node/title "${title}"] + [?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 "${title}"] + [?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 "${title}"] + [?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[];