From 1e203c13d3b10cc0759baeeaecca51f8a665750b Mon Sep 17 00:00:00 2001 From: Marc-Antoine Parent Date: Sun, 14 Dec 2025 15:56:00 -0500 Subject: [PATCH 1/3] eng-1144 do not hard refresh on initial load --- apps/roam/src/components/DiscourseContext.tsx | 23 +++++++++++-------- .../components/results-view/ResultsTable.tsx | 4 ++-- .../components/results-view/ResultsView.tsx | 6 ++--- .../src/utils/getDiscourseContextResults.ts | 2 +- 4 files changed, 19 insertions(+), 16 deletions(-) diff --git a/apps/roam/src/components/DiscourseContext.tsx b/apps/roam/src/components/DiscourseContext.tsx index 3a058747e..961074526 100644 --- a/apps/roam/src/components/DiscourseContext.tsx +++ b/apps/roam/src/components/DiscourseContext.tsx @@ -228,7 +228,7 @@ const ContextTab = ({ r: DiscourseContextResults[number]; groupByTarget: boolean; setGroupByTarget: (b: boolean) => void; - onRefresh: () => void; + onRefresh: (ignoreCache?: boolean) => void; }) => { const [subTabId, setSubTabId] = useState(0); @@ -345,14 +345,17 @@ export const ContextContent = ({ uid, results }: Props) => { })); }, []); - const onRefresh = useCallback(() => { - setRawQueryResults({}); - getDiscourseContextResults({ - uid, - onResult: addLabels, - ignoreCache: true, - }).finally(() => setLoading(false)); - }, [uid, setRawQueryResults, setLoading, addLabels]); + const onRefresh = useCallback( + (ignoreCache = true) => { + setRawQueryResults({}); + void getDiscourseContextResults({ + uid, + onResult: addLabels, + ignoreCache, + }).finally(() => setLoading(false)); + }, + [uid, setRawQueryResults, setLoading, addLabels], + ); const delayedRefresh = () => { window.setTimeout(onRefresh, 250); @@ -360,7 +363,7 @@ export const ContextContent = ({ uid, results }: Props) => { useEffect(() => { if (!results) { - onRefresh(); + onRefresh(false); } else { results.forEach(addLabels); setLoading(false); diff --git a/apps/roam/src/components/results-view/ResultsTable.tsx b/apps/roam/src/components/results-view/ResultsTable.tsx index 74af4956d..bdb4b14d1 100644 --- a/apps/roam/src/components/results-view/ResultsTable.tsx +++ b/apps/roam/src/components/results-view/ResultsTable.tsx @@ -188,7 +188,7 @@ type ResultRowProps = { parentUid: string; ctrlClick?: (e: Result) => void; views: { column: string; mode: string; value: string }[]; - onRefresh: () => void; + onRefresh: (ignoreCache?: boolean) => void; }; const ResultRow = ({ @@ -391,7 +391,7 @@ const ResultsTable = ({ setFilters: (f: FilterData) => void; preventSavingSettings?: boolean; views: Views; - onRefresh: () => void; + onRefresh: (ignoreCache?: boolean) => void; allResults: Result[]; showInterface?: boolean; }) => { diff --git a/apps/roam/src/components/results-view/ResultsView.tsx b/apps/roam/src/components/results-view/ResultsView.tsx index 69c314984..abee1e664 100644 --- a/apps/roam/src/components/results-view/ResultsView.tsx +++ b/apps/roam/src/components/results-view/ResultsView.tsx @@ -38,7 +38,7 @@ import Charts from "./Charts"; import Timeline from "./Timeline"; import Kanban from "./Kanban"; import MenuItemSelect from "roamjs-components/components/MenuItemSelect"; -import { RoamBasicNode } from "roamjs-components/types"; +import type { RoamBasicNode } from "roamjs-components/types/native"; import { render as renderToast } from "roamjs-components/components/Toast"; import { Column, Result } from "~/utils/types"; import updateBlock from "roamjs-components/writes/updateBlock"; @@ -238,7 +238,7 @@ type ResultsViewComponent = (props: { preventSavingSettings?: boolean; onEdit?: () => void; onDeleteQuery?: () => void; - onRefresh: (loadInBackground?: boolean) => void; + onRefresh: (ignoreCache?: boolean) => void; globalFiltersData?: Record; globalPageSize?: number; isEditBlock?: boolean; @@ -1369,7 +1369,7 @@ const ResultsView: ResultsViewComponent = ({ onRefresh(true)} + onQuery={() => onRefresh()} resultKeys={columns} parentUid={parentUid} views={views} diff --git a/apps/roam/src/utils/getDiscourseContextResults.ts b/apps/roam/src/utils/getDiscourseContextResults.ts index 2bc2df3a8..bf28c568b 100644 --- a/apps/roam/src/utils/getDiscourseContextResults.ts +++ b/apps/roam/src/utils/getDiscourseContextResults.ts @@ -176,7 +176,7 @@ const getDiscourseContextResults = async ({ uid: string; nodes?: ReturnType; relations?: ReturnType; - ignoreCache?: true; + ignoreCache?: boolean; onResult?: onResult; }) => { const args = { ignoreCache }; From 10f3d50c128ebbb858487d0353de4d1e09affbf7 Mon Sep 17 00:00:00 2001 From: Marc-Antoine Parent Date: Mon, 15 Dec 2025 14:33:43 -0500 Subject: [PATCH 2/3] repair CI --- apps/roam/src/utils/getDiscourseContextResults.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/roam/src/utils/getDiscourseContextResults.ts b/apps/roam/src/utils/getDiscourseContextResults.ts index bf28c568b..ccaad3f12 100644 --- a/apps/roam/src/utils/getDiscourseContextResults.ts +++ b/apps/roam/src/utils/getDiscourseContextResults.ts @@ -13,7 +13,7 @@ const CACHE_TIMEOUT = 1000 * 60 * 5; type BuildQueryConfig = { args: { - ignoreCache?: true; + ignoreCache?: boolean; }; targetUid: string; fireQueryContext: { From 7a44b37b1b44ee1a13d6daa61fc856ae08cf6f89 Mon Sep 17 00:00:00 2001 From: Marc-Antoine Parent Date: Tue, 16 Dec 2025 09:13:47 -0500 Subject: [PATCH 3/3] remove loadInBackground. Also fix a lint error --- apps/roam/src/components/QueryBuilder.tsx | 71 +++++++++++------------ 1 file changed, 34 insertions(+), 37 deletions(-) diff --git a/apps/roam/src/components/QueryBuilder.tsx b/apps/roam/src/components/QueryBuilder.tsx index ce927214e..e3c2ddd0e 100644 --- a/apps/roam/src/components/QueryBuilder.tsx +++ b/apps/roam/src/components/QueryBuilder.tsx @@ -65,44 +65,41 @@ const QueryBuilder = ({ pageUid, isEditBlock, showAlias }: Props) => { const [columns, setColumns] = useState([]); const [results, setResults] = useState([]); const containerRef = useRef(null); - const onRefresh = useCallback( - (loadInBackground = false) => { - setError(""); - setLoading(!loadInBackground); - const args = parseQuery(pageUid); - const { inputs } = parseResultSettings(pageUid, args.columns); - const transformedInputs = Object.fromEntries( - inputs.map(({ key, inputValue }) => [key, inputValue]), - ); - setTimeout(() => { - fireQuery({ ...args, inputs: transformedInputs }) - .then((results) => { - setColumns(args.columns); - setResults(results); - }) - .catch(() => { - setError( - `Query failed to run. Try running a new query from the editor.`, - ); - }) - .finally(() => { - const tree = getBasicTreeByParentUid(pageUid); - const node = getSubTree({ tree, key: "results" }); - return ( - node.uid - ? Promise.resolve(node.uid) - : createBlock({ - parentUid: pageUid, - node: { text: "results" }, - }) - ).then(() => { - setLoading(false); - }); + const onRefresh = useCallback(() => { + setError(""); + setLoading(true); + const args = parseQuery(pageUid); + const { inputs } = parseResultSettings(pageUid, args.columns); + const transformedInputs = Object.fromEntries( + inputs.map(({ key, inputValue }) => [key, inputValue]), + ); + setTimeout(() => { + fireQuery({ ...args, inputs: transformedInputs }) + .then((results) => { + setColumns(args.columns); + setResults(results); + }) + .catch(() => { + setError( + `Query failed to run. Try running a new query from the editor.`, + ); + }) + .finally(() => { + const tree = getBasicTreeByParentUid(pageUid); + const node = getSubTree({ tree, key: "results" }); + void ( + node.uid + ? Promise.resolve(node.uid) + : createBlock({ + parentUid: pageUid, + node: { text: "results" }, + }) + ).then(() => { + setLoading(false); }); - }, 1); - }, - [setResults, pageUid, setLoading, setColumns], - ); + }); + }, 1); + }, [setResults, pageUid, setLoading, setColumns]); useEffect(() => { if (!isEdit) { if (hasResults) {