diff --git a/apps/roam/src/components/ModifyNodeDialog.tsx b/apps/roam/src/components/ModifyNodeDialog.tsx index d949717e2..0b5eac8b8 100644 --- a/apps/roam/src/components/ModifyNodeDialog.tsx +++ b/apps/roam/src/components/ModifyNodeDialog.tsx @@ -283,12 +283,8 @@ const ModifyNodeDialog = ({ } if (keyImageOption === "query-builder") { - const parentUid = resolveQueryBuilderRef({ - queryRef: qbAlias, - extensionAPI, - }); + const parentUid = resolveQueryBuilderRef({ queryRef: qbAlias }); const results = await runQuery({ - extensionAPI, parentUid, // due to query format // eslint-disable-next-line @typescript-eslint/naming-convention diff --git a/apps/roam/src/components/QueryBuilder.tsx b/apps/roam/src/components/QueryBuilder.tsx index 85225f526..1ce5c4ba4 100644 --- a/apps/roam/src/components/QueryBuilder.tsx +++ b/apps/roam/src/components/QueryBuilder.tsx @@ -25,7 +25,7 @@ import { Column } from "~/utils/types"; import getPageUidByPageTitle from "roamjs-components/queries/getPageUidByPageTitle"; import posthog from "posthog-js"; import parseResultSettings from "~/utils/parseResultSettings"; -import { HIDE_METADATA_KEY } from "~/data/userSettings"; +import { getPersonalSetting } from "~/components/settings/utils/accessors"; type QueryPageComponent = (props: { pageUid: string; @@ -36,12 +36,10 @@ type QueryPageComponent = (props: { type Props = Parameters[0]; const QueryBuilder = ({ pageUid, isEditBlock, showAlias }: Props) => { - const extensionAPI = useExtensionAPI(); const hideMetadata = useMemo( () => - (extensionAPI?.settings.get(HIDE_METADATA_KEY) as boolean | undefined) ?? - true, - [extensionAPI], + getPersonalSetting(["Query", "Hide Query Metadata"]) ?? true, + [], ); const tree = useMemo(() => getBasicTreeByParentUid(pageUid), [pageUid]); const [isEdit, _setIsEdit] = useState( diff --git a/apps/roam/src/components/index.ts b/apps/roam/src/components/index.ts index 041b6e1c6..d7eaae24f 100644 --- a/apps/roam/src/components/index.ts +++ b/apps/roam/src/components/index.ts @@ -15,7 +15,6 @@ export { render as renderQueryDrawer } from "./QueryDrawer"; export { openQueryDrawer as QueryDrawer } from "./QueryDrawer"; export { default as QueryEditor } from "./QueryEditor"; export { default as QueryBuilder } from "./QueryBuilder"; -export { default as QueryPagesPanel } from "./settings/QueryPagesPanel"; export { default as ResizableDrawer } from "./ResizableDrawer"; export { default as ResultsView } from "./results-view/ResultsView"; export { default as Timeline } from "./results-view/Timeline"; diff --git a/apps/roam/src/components/results-view/ResultsView.tsx b/apps/roam/src/components/results-view/ResultsView.tsx index dc2c9c091..08805486f 100644 --- a/apps/roam/src/components/results-view/ResultsView.tsx +++ b/apps/roam/src/components/results-view/ResultsView.tsx @@ -288,9 +288,8 @@ const ResultsView: ResultsViewComponent = ({ exportIsOpen = false, toggleExport, }) => { - const extensionAPI = useExtensionAPI(); const settings = useMemo( - () => parseResultSettings(parentUid, columns, extensionAPI), + () => parseResultSettings(parentUid, columns), [parentUid], ); const [activeSort, setActiveSort] = useState(settings.activeSort); diff --git a/apps/roam/src/components/settings/DefaultFilters.tsx b/apps/roam/src/components/settings/DefaultFilters.tsx index d96761d06..e0c416881 100644 --- a/apps/roam/src/components/settings/DefaultFilters.tsx +++ b/apps/roam/src/components/settings/DefaultFilters.tsx @@ -1,7 +1,10 @@ import { Button, Intent, InputGroup } from "@blueprintjs/core"; import React, { useEffect, useState } from "react"; -import type { OnloadArgs } from "roamjs-components/types"; import type { Filters } from "roamjs-components/components/Filter"; +import { + getPersonalSetting, + setPersonalSetting, +} from "./utils/accessors"; // // TODO - REWORK THIS COMPONENT @@ -95,19 +98,15 @@ const Filter = ({ ); }; -const DefaultFilters = ({ - extensionAPI, -}: { - extensionAPI: OnloadArgs["extensionAPI"]; -}) => { +const DefaultFilters = () => { const [newColumn, setNewColumn] = useState(""); const [filters, setFilters] = useState(() => Object.fromEntries( Object.entries( - (extensionAPI.settings.get("default-filters") as Record< - string, - StoredFilters - >) || {}, + getPersonalSetting>([ + "Query", + "Default Filters", + ]) || {}, ).map(([k, v]) => [ k, { @@ -123,8 +122,8 @@ const DefaultFilters = ({ ); useEffect(() => { - extensionAPI.settings.set( - "default-filters", + setPersonalSetting( + ["Query", "Default Filters"], Object.fromEntries( Object.entries(filters).map(([k, v]) => [ k, @@ -198,7 +197,6 @@ const DefaultFilters = ({ }, }; setFilters(newFilters); - // extensionAPI.settings.set("default-filters", newFilters); setNewColumn(""); }} /> diff --git a/apps/roam/src/components/settings/QueryPagesPanel.tsx b/apps/roam/src/components/settings/QueryPagesPanel.tsx deleted file mode 100644 index f810b1918..000000000 --- a/apps/roam/src/components/settings/QueryPagesPanel.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import { Button, InputGroup } from "@blueprintjs/core"; -import posthog from "posthog-js"; -import React, { useState } from "react"; -import type { OnloadArgs } from "roamjs-components/types"; - -export const getQueryPages = (extensionAPI: OnloadArgs["extensionAPI"]) => { - const value = extensionAPI.settings.get("query-pages") as - | string[] - | string - | Record; - return typeof value === "string" - ? [value] - : Array.isArray(value) - ? value - : typeof value === "object" && value !== null - ? Object.keys(value) - : ["queries/*"]; -}; - -const QueryPagesPanel = ({ - extensionAPI, -}: { - extensionAPI: OnloadArgs["extensionAPI"]; -}) => { - const [texts, setTexts] = useState(() => getQueryPages(extensionAPI)); - const [value, setValue] = useState(""); - return ( -
-
- setValue(e.target.value)} - /> -
- {texts.map((p, index) => ( -
- - {p} - -
- ))} -
- ); -}; - -export default QueryPagesPanel; diff --git a/apps/roam/src/components/settings/QuerySettings.tsx b/apps/roam/src/components/settings/QuerySettings.tsx index 386a5350f..27cac8333 100644 --- a/apps/roam/src/components/settings/QuerySettings.tsx +++ b/apps/roam/src/components/settings/QuerySettings.tsx @@ -1,59 +1,35 @@ import React from "react"; -import { OnloadArgs } from "roamjs-components/types"; -import { Label, NumericInput, Checkbox } from "@blueprintjs/core"; +import { Label } from "@blueprintjs/core"; import Description from "roamjs-components/components/Description"; -import { getSettings } from "~/utils/parseResultSettings"; -import { DEFAULT_PAGE_SIZE_KEY, HIDE_METADATA_KEY } from "~/data/userSettings"; import DefaultFilters from "./DefaultFilters"; -import QueryPagesPanel from "./QueryPagesPanel"; -import { setSetting } from "~/utils/extensionSettings"; +import { + PersonalFlagPanel, + PersonalNumberPanel, + PersonalMultiTextPanel, +} from "./components/BlockPropSettingPanels"; -const QuerySettings = ({ - extensionAPI, -}: { - extensionAPI: OnloadArgs["extensionAPI"]; -}) => { - const { globalPageSize, hideMetadata } = getSettings(extensionAPI); +const QuerySettings = () => { return (
- { - const target = e.target as HTMLInputElement; - void setSetting(HIDE_METADATA_KEY, target.checked); - }} - labelElement={ - <> - Hide Query Metadata - - - } + + + - -
); diff --git a/apps/roam/src/components/settings/Settings.tsx b/apps/roam/src/components/settings/Settings.tsx index 7e6069b96..b2369853c 100644 --- a/apps/roam/src/components/settings/Settings.tsx +++ b/apps/roam/src/components/settings/Settings.tsx @@ -148,7 +148,7 @@ export const SettingsDialog = ({ id="query-settings" title="Queries" className="overflow-y-auto" - panel={} + panel={} /> { + const value = getPersonalSetting(["Query", "Query Pages"]); + return Array.isArray(value) && value.length > 0 ? value : ["queries/*"]; +}; + export const getAllDiscourseNodes = (): DiscourseNodeSettings[] => { const results = window.roamAlphaAPI.q(` [:find ?uid ?title diff --git a/apps/roam/src/data/userSettings.ts b/apps/roam/src/data/userSettings.ts index f832e9f0c..676390155 100644 --- a/apps/roam/src/data/userSettings.ts +++ b/apps/roam/src/data/userSettings.ts @@ -1,7 +1,4 @@ -export const DEFAULT_PAGE_SIZE_KEY = "default-page-size"; export const DEFAULT_CANVAS_PAGE_FORMAT_KEY = "default-canvas-page-format"; -export const HIDE_METADATA_KEY = "hide-metadata"; -export const DEFAULT_FILTERS_KEY = "default-filters"; export const QUERY_BUILDER_SETTINGS_KEY = "query-builder-settings"; export const AUTO_CANVAS_RELATIONS_KEY = "auto-canvas-relations"; export const DISCOURSE_TOOL_SHORTCUT_KEY = "discourse-tool-shortcut"; diff --git a/apps/roam/src/index.ts b/apps/roam/src/index.ts index 95cadb7ae..78b9cd721 100644 --- a/apps/roam/src/index.ts +++ b/apps/roam/src/index.ts @@ -124,17 +124,16 @@ export default runExtension(async (onloadArgs) => { initializeSupabaseSync(); } - const { extensionAPI } = onloadArgs; window.roamjs.extension.queryBuilder = { runQuery: (parentUid: string) => - runQuery({ parentUid, extensionAPI }).then( + runQuery({ parentUid }).then( ({ allProcessedResults }) => allProcessedResults, ), runQuerySync: (parentUid: string) => { const queryArgs = parseQuery(parentUid); return fireQuerySync(queryArgs); }, - listActiveQueries: () => listActiveQueries(extensionAPI), + listActiveQueries: () => listActiveQueries(), isDiscourseNode: isDiscourseNode, // @ts-expect-error - we are still using roamjs-components global definition getDiscourseNodes: getDiscourseNodes, diff --git a/apps/roam/src/utils/calcCanvasNodeSizeAndImg.ts b/apps/roam/src/utils/calcCanvasNodeSizeAndImg.ts index fe37643e3..e95a12c74 100644 --- a/apps/roam/src/utils/calcCanvasNodeSizeAndImg.ts +++ b/apps/roam/src/utils/calcCanvasNodeSizeAndImg.ts @@ -107,12 +107,8 @@ const calcCanvasNodeSizeAndImg = async ({ let imageUrl; if (keyImageOption === "query-builder") { - const parentUid = resolveQueryBuilderRef({ - queryRef: qbAlias, - extensionAPI, - }); + const parentUid = resolveQueryBuilderRef({ queryRef: qbAlias }); const results = await runQuery({ - extensionAPI, parentUid, // eslint-disable-next-line @typescript-eslint/naming-convention inputs: { NODETEXT: nodeText, NODEUID: uid }, diff --git a/apps/roam/src/utils/createDiscourseNode.ts b/apps/roam/src/utils/createDiscourseNode.ts index ed678f1e3..95dd0d804 100644 --- a/apps/roam/src/utils/createDiscourseNode.ts +++ b/apps/roam/src/utils/createDiscourseNode.ts @@ -82,12 +82,8 @@ const createDiscourseNode = async ({ if (keyImageOption === "query-builder") { if (!extensionAPI) return; - const parentUid = resolveQueryBuilderRef({ - queryRef: qbAlias, - extensionAPI, - }); + const parentUid = resolveQueryBuilderRef({ queryRef: qbAlias }); const results = await runQuery({ - extensionAPI, parentUid, inputs: { NODETEXT: text, NODEUID: pageUid }, }); diff --git a/apps/roam/src/utils/isQueryPage.ts b/apps/roam/src/utils/isQueryPage.ts index cb321fa7f..58e101034 100644 --- a/apps/roam/src/utils/isQueryPage.ts +++ b/apps/roam/src/utils/isQueryPage.ts @@ -1,15 +1,7 @@ -import { OnloadArgs } from "roamjs-components/types"; -import { getQueryPages } from "~/components/settings/QueryPagesPanel"; +import { getQueryPages } from "~/components/settings/utils/accessors"; -export const isQueryPage = ({ - title, - onloadArgs, -}: { - title: string; - onloadArgs: OnloadArgs; -}): boolean => { - const { extensionAPI } = onloadArgs; - const queryPages = getQueryPages(extensionAPI); +export const isQueryPage = ({ title }: { title: string }): boolean => { + const queryPages = getQueryPages(); const matchesQueryPage = queryPages.some((queryPage) => { const escapedPattern = queryPage diff --git a/apps/roam/src/utils/listActiveQueries.ts b/apps/roam/src/utils/listActiveQueries.ts index 64578d8b7..14b93e2d9 100644 --- a/apps/roam/src/utils/listActiveQueries.ts +++ b/apps/roam/src/utils/listActiveQueries.ts @@ -1,13 +1,12 @@ import { PullBlock } from "roamjs-components/types"; -import { getQueryPages } from "~/components/settings/QueryPagesPanel"; -import { OnloadArgs } from "roamjs-components/types"; +import { getQueryPages } from "~/components/settings/utils/accessors"; -export const listActiveQueries = (extensionAPI: OnloadArgs["extensionAPI"]) => +export const listActiveQueries = () => ( window.roamAlphaAPI.data.fast.q( - `[:find (pull ?b [:block/uid]) :where [or-join [?b] + `[:find (pull ?b [:block/uid]) :where [or-join [?b] [and [?b :block/string ?s] [[clojure.string/includes? ?s "{{query block}}"]] ] - ${getQueryPages(extensionAPI).map( + ${getQueryPages().map( (p) => `[and [?b :node/title ?t] [[re-pattern "^${p.replace( /\*/, diff --git a/apps/roam/src/utils/parseResultSettings.ts b/apps/roam/src/utils/parseResultSettings.ts index 8faf2f6bd..3a9df465f 100644 --- a/apps/roam/src/utils/parseResultSettings.ts +++ b/apps/roam/src/utils/parseResultSettings.ts @@ -1,6 +1,6 @@ import { Filters } from "roamjs-components/components/Filter"; import getBasicTreeByParentUid from "roamjs-components/queries/getBasicTreeByParentUid"; -import { OnloadArgs, RoamBasicNode } from "roamjs-components/types/native"; +import { RoamBasicNode } from "roamjs-components/types/native"; import getSettingIntFromTree from "roamjs-components/util/getSettingIntFromTree"; import getSubTree from "roamjs-components/util/getSubTree"; import toFlexRegex from "roamjs-components/util/toFlexRegex"; @@ -8,12 +8,8 @@ import { StoredFilters } from "~/components/settings/DefaultFilters"; import { Column } from "./types"; import getSettingValueFromTree from "roamjs-components/util/getSettingValueFromTree"; import getSettingValuesFromTree from "roamjs-components/util/getSettingValuesFromTree"; -import { - DEFAULT_FILTERS_KEY, - DEFAULT_PAGE_SIZE_KEY, - HIDE_METADATA_KEY, -} from "~/data/userSettings"; import getTextByBlockUid from "roamjs-components/queries/getTextByBlockUid"; +import { getPersonalSetting } from "~/components/settings/utils/accessors"; export type Sorts = { key: string; descending: boolean }[]; export type InputValues = { @@ -60,15 +56,16 @@ const getFilterEntries = ( }, ]); -export const getSettings = (extensionAPI?: OnloadArgs["extensionAPI"]) => { +export const getSettings = () => { + const storedFilters = + getPersonalSetting>([ + "Query", + "Default Filters", + ]) || {}; + return { globalFiltersData: Object.fromEntries( - Object.entries( - (extensionAPI?.settings.get(DEFAULT_FILTERS_KEY) as Record< - string, - StoredFilters - >) || {}, - ).map(([k, v]) => [ + Object.entries(storedFilters).map(([k, v]) => [ k, { includes: Object.fromEntries( @@ -81,9 +78,9 @@ export const getSettings = (extensionAPI?: OnloadArgs["extensionAPI"]) => { ]), ), globalPageSize: - Number(extensionAPI?.settings.get(DEFAULT_PAGE_SIZE_KEY)) || 10, + getPersonalSetting(["Query", "Default Page Size"]) || 10, hideMetadata: - (extensionAPI?.settings.get(HIDE_METADATA_KEY) as boolean) ?? true, + getPersonalSetting(["Query", "Hide Query Metadata"]) ?? true, }; }; @@ -91,9 +88,8 @@ const parseResultSettings = ( // TODO - this should be the resultNode uid parentUid: string, columns: Column[], - extensionAPI?: OnloadArgs["extensionAPI"], ) => { - const { globalFiltersData, globalPageSize } = getSettings(extensionAPI); + const { globalFiltersData, globalPageSize } = getSettings(); const tree = getBasicTreeByParentUid(parentUid); const resultNode = getSubTree({ tree, key: "results" }); const sortsNode = getSubTree({ tree: resultNode.children, key: "sorts" }); diff --git a/apps/roam/src/utils/registerCommandPaletteCommands.ts b/apps/roam/src/utils/registerCommandPaletteCommands.ts index dd6b3ba84..04401fb14 100644 --- a/apps/roam/src/utils/registerCommandPaletteCommands.ts +++ b/apps/roam/src/utils/registerCommandPaletteCommands.ts @@ -16,7 +16,6 @@ import { getOverlayHandler, onPageRefObserverChange, } from "./pageRefObserverHandlers"; -import { HIDE_METADATA_KEY } from "~/data/userSettings"; import { getPersonalSetting, setPersonalSetting, @@ -157,20 +156,11 @@ export const registerCommandPaletteCommands = (onloadArgs: OnloadArgs) => { }); }; - const toggleQueryMetadata = async () => { + const toggleQueryMetadata = () => { const currentValue = - (extensionAPI.settings.get(HIDE_METADATA_KEY) as boolean) ?? true; + getPersonalSetting(["Query", "Hide Query Metadata"]) ?? true; const newValue = !currentValue; - try { - await extensionAPI.settings.set(HIDE_METADATA_KEY, newValue); - } catch (error) { - const e = error as Error; - renderToast({ - id: "query-metadata-toggle-error", - content: `Failed to toggle query metadata: ${e.message}`, - }); - return; - } + setPersonalSetting(["Query", "Hide Query Metadata"], newValue); renderToast({ id: "query-metadata-toggle", content: `Query metadata ${newValue ? "hidden" : "shown"}`, diff --git a/apps/roam/src/utils/registerSmartBlock.ts b/apps/roam/src/utils/registerSmartBlock.ts index 002e2bb52..a6cee5e97 100644 --- a/apps/roam/src/utils/registerSmartBlock.ts +++ b/apps/roam/src/utils/registerSmartBlock.ts @@ -34,10 +34,9 @@ export const registerSmartBlock = (onloadArgs: OnloadArgs) => { } : { text: formatArg || "{text}", children: [], uid: "" }; const queryRef = variables[arg] || arg; - const parentUid = resolveQueryBuilderRef({ queryRef, extensionAPI }); + const parentUid = resolveQueryBuilderRef({ queryRef }); return runQuery({ parentUid, - extensionAPI, inputs: Object.fromEntries( inputArgs .map((i) => i.split("=").slice(0, 2) as [string, string]) diff --git a/apps/roam/src/utils/resolveQueryBuilderRef.ts b/apps/roam/src/utils/resolveQueryBuilderRef.ts index b90bdd3f4..447417867 100644 --- a/apps/roam/src/utils/resolveQueryBuilderRef.ts +++ b/apps/roam/src/utils/resolveQueryBuilderRef.ts @@ -1,22 +1,15 @@ import isLiveBlock from "roamjs-components/queries/isLiveBlock"; import extractRef from "roamjs-components/util/extractRef"; -import { getQueryPages } from "~/components/settings/QueryPagesPanel"; -import { OnloadArgs } from "roamjs-components/types"; +import { getQueryPages } from "~/components/settings/utils/accessors"; -const resolveQueryBuilderRef = ({ - queryRef, - extensionAPI, -}: { - queryRef: string; - extensionAPI: OnloadArgs["extensionAPI"]; -}) => { +const resolveQueryBuilderRef = ({ queryRef }: { queryRef: string }) => { const parentUid = isLiveBlock(extractRef(queryRef)) ? extractRef(queryRef) : window.roamAlphaAPI.data.fast .q( - `[:find ?uid :where [?b :block/uid ?uid] [or-join [?b] + `[:find ?uid :where [?b :block/uid ?uid] [or-join [?b] [and [?b :block/string ?s] [[clojure.string/includes? ?s "{{query block:${queryRef}}}"]] ] - ${getQueryPages(extensionAPI).map( + ${getQueryPages().map( (p) => `[and [?b :node/title "${p.replace(/\*/, queryRef)}"]]`, )} [and [?b :node/title "${queryRef}"]] diff --git a/apps/roam/src/utils/runQuery.ts b/apps/roam/src/utils/runQuery.ts index 1aed5f3fd..3d8a19b7f 100644 --- a/apps/roam/src/utils/runQuery.ts +++ b/apps/roam/src/utils/runQuery.ts @@ -1,4 +1,3 @@ -import type { OnloadArgs } from "roamjs-components/types/native"; import fireQuery, { QueryArgs } from "./fireQuery"; import parseQuery from "./parseQuery"; import parseResultSettings from "./parseResultSettings"; @@ -7,11 +6,9 @@ import { Column } from "./types"; const runQuery = ({ parentUid, - extensionAPI, inputs, }: { parentUid: string; - extensionAPI: OnloadArgs["extensionAPI"]; inputs?: QueryArgs["inputs"]; }) => { const queryArgs = Object.assign(parseQuery(parentUid), { inputs }); @@ -31,7 +28,6 @@ const runQuery = ({ selection: s.text, })), ), - extensionAPI, ); return postProcessResults(results, settings); });