diff --git a/apps/roam/src/settings/settingsPanel.ts b/apps/roam/src/settings/settingsPanel.ts index ef0096982..833edb427 100644 --- a/apps/roam/src/settings/settingsPanel.ts +++ b/apps/roam/src/settings/settingsPanel.ts @@ -23,10 +23,18 @@ export const createSettingsPanel = (onloadArgs: OnloadArgs) => { type: "reactComponent", component: () => NodeMenuTriggerComponent(extensionAPI), }, - description: "Override the global trigger for the Discourse Node Menu. Must refresh after editing.", }, + { + id: "async-q", + name: "Use Backend Query (Beta)", + description: + "This will use Roam's Backend Query. It helps prevent the UI from freezing during large queries but is still in beta and may occasionally produce inaccurate results.", + action: { + type: "switch", + }, + }, ], }); }; diff --git a/apps/roam/src/utils/fireQuery.ts b/apps/roam/src/utils/fireQuery.ts index e47d4a54b..c9f01d685 100644 --- a/apps/roam/src/utils/fireQuery.ts +++ b/apps/roam/src/utils/fireQuery.ts @@ -15,6 +15,7 @@ import { DEFAULT_RETURN_NODE } from "./parseQuery"; import { DiscourseNode } from "./getDiscourseNodes"; import { DiscourseRelation } from "./getDiscourseRelations"; import nanoid from "nanoid"; +import getExtensionApi from "roamjs-components/util/extensionApiContext"; export type QueryArgs = { returnNode?: string; @@ -326,20 +327,22 @@ const fireQuery: FireQuery = async (_args) => { try { const nodeEnv = getNodeEnv(); const queryId = nodeEnv === "development" ? nanoid(4) : ""; + const isAsyncQ = getExtensionApi().settings.get("async-q"); if (nodeEnv === "development") { - console.groupCollapsed(`🔍 Roam Query - ${queryId}`); + console.groupCollapsed( + `🔍 Roam Query - ${queryId} - ${isAsyncQ ? "async.q" : "fast.q"}`, + ); console.log("%c" + query, "color: #94a3b8; font-family: monospace;"); if (inputs.length) console.log("Inputs:", ...inputs); console.time(`Query - ${queryId}`); console.groupEnd(); } - //@ts-ignore - todo add async q to roamjs-components - const queryResults = await window.roamAlphaAPI.data.async.q( - query, - ...inputs, - ); + const queryResults = await (isAsyncQ + ? //@ts-ignore - todo add async q to roamjs-components + window.roamAlphaAPI.data.async.q(query, ...inputs) + : window.roamAlphaAPI.data.fast.q(query, ...inputs)); if (nodeEnv === "development") { console.timeEnd(`Query - ${queryId}`);