Skip to content

Commit 36c6a48

Browse files
authored
Eng-1473 port non boolean personal setting consumers (#823)
* ENG-1473: Rebase onto updated eng-1472, resolve conflicts and fix missing import * ENG-1473: Review fixes — remove dead extensionAPI params, fix type casts * ENG-1473: Fix restrict-template-expressions warnings in query utils * rename persistQueryPages → setQueryPages, setQueryPages → setInitialQueryPages * restore legacy type coercion for query-pages
1 parent bcb6e27 commit 36c6a48

16 files changed

+106
-96
lines changed

apps/roam/src/components/DiscourseNodeMenu.tsx

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,10 @@ import { getNewDiscourseNodeText } from "~/utils/formatUtils";
2727
import { OnloadArgs } from "roamjs-components/types";
2828
import { formatHexColor } from "./settings/DiscourseNodeCanvasSettings";
2929
import posthog from "posthog-js";
30-
import { setPersonalSetting } from "~/components/settings/utils/accessors";
30+
import {
31+
getPersonalSetting,
32+
setPersonalSetting,
33+
} from "~/components/settings/utils/accessors";
3134

3235
type Props = {
3336
textarea?: HTMLTextAreaElement;
@@ -423,9 +426,10 @@ export const NodeMenuTriggerComponent = ({
423426
const [isActive, setIsActive] = useState(false);
424427
const [comboKey, setComboKey] = useState<IKeyCombo>(
425428
() =>
426-
(extensionAPI.settings.get(
427-
"personal-node-menu-trigger",
428-
) as IKeyCombo) || { modifiers: 0, key: "" },
429+
getPersonalSetting<IKeyCombo>(["Personal node menu trigger"]) || {
430+
modifiers: 0,
431+
key: "",
432+
},
429433
);
430434

431435
const handleKeyDown = useCallback(

apps/roam/src/components/DiscourseNodeSearchMenu.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,11 @@ import { OnloadArgs } from "roamjs-components/types";
2424
import getDiscourseNodes, { DiscourseNode } from "~/utils/getDiscourseNodes";
2525
import getDiscourseNodeFormatExpression from "~/utils/getDiscourseNodeFormatExpression";
2626
import { Result } from "~/utils/types";
27-
import { getSetting } from "~/utils/extensionSettings";
2827
import MiniSearch from "minisearch";
29-
import { setPersonalSetting } from "~/components/settings/utils/accessors";
28+
import {
29+
getPersonalSetting,
30+
setPersonalSetting,
31+
} from "~/components/settings/utils/accessors";
3032

3133
type Props = {
3234
textarea: HTMLTextAreaElement;
@@ -711,7 +713,7 @@ export const NodeSearchMenuTriggerSetting = ({
711713
}) => {
712714
const extensionAPI = onloadArgs.extensionAPI;
713715
const [nodeSearchTrigger, setNodeSearchTrigger] = useState<string>(
714-
getSetting("node-search-trigger", "@"),
716+
getPersonalSetting<string>(["Node search menu trigger"]) ?? "@",
715717
);
716718

717719
const handleNodeSearchTriggerChange = (

apps/roam/src/components/ModifyNodeDialog.tsx

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -280,10 +280,7 @@ const ModifyNodeDialog = ({
280280
}
281281

282282
if (keyImageOption === "query-builder") {
283-
const parentUid = resolveQueryBuilderRef({
284-
queryRef: qbAlias,
285-
extensionAPI,
286-
});
283+
const parentUid = resolveQueryBuilderRef({ queryRef: qbAlias });
287284
const results = await runQuery({
288285
extensionAPI,
289286
parentUid,

apps/roam/src/components/settings/DefaultFilters.tsx

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@ import React, { useEffect, useState } from "react";
33
import type { OnloadArgs } from "roamjs-components/types";
44
import type { Filters } from "roamjs-components/components/Filter";
55
import posthog from "posthog-js";
6-
import { setPersonalSetting } from "~/components/settings/utils/accessors";
6+
import {
7+
getPersonalSetting,
8+
setPersonalSetting,
9+
} from "~/components/settings/utils/accessors";
710

811
//
912
// TODO - REWORK THIS COMPONENT
@@ -106,10 +109,10 @@ const DefaultFilters = ({
106109
const [filters, setFilters] = useState(() =>
107110
Object.fromEntries(
108111
Object.entries(
109-
(extensionAPI.settings.get("default-filters") as Record<
110-
string,
111-
StoredFilters
112-
>) || {},
112+
getPersonalSetting<Record<string, StoredFilters>>([
113+
"Query",
114+
"Default filters",
115+
]) ?? {},
113116
).map(([k, v]) => [
114117
k,
115118
{

apps/roam/src/components/settings/KeyboardShortcutInput.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ import {
99
} from "@blueprintjs/core";
1010
import Description from "roamjs-components/components/Description";
1111
import { DISCOURSE_TOOL_SHORTCUT_KEY } from "~/data/userSettings";
12-
import { setPersonalSetting } from "~/components/settings/utils/accessors";
12+
import {
13+
getPersonalSetting,
14+
setPersonalSetting,
15+
} from "~/components/settings/utils/accessors";
1316
import { comboToString } from "~/components/DiscourseNodeMenu";
1417

1518
type KeyboardShortcutInputProps = {
@@ -34,7 +37,7 @@ const KeyboardShortcutInput = ({
3437
const [isActive, setIsActive] = useState(false);
3538
const [comboKey, setComboKey] = useState<IKeyCombo>(
3639
() =>
37-
(extensionAPI.settings.get(settingKey) as IKeyCombo) || {
40+
getPersonalSetting<IKeyCombo>([blockPropKey]) || {
3841
modifiers: 0,
3942
key: "",
4043
},

apps/roam/src/components/settings/QueryPagesPanel.tsx

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,18 @@ import { Button, InputGroup } from "@blueprintjs/core";
22
import posthog from "posthog-js";
33
import React, { useState } from "react";
44
import type { OnloadArgs } from "roamjs-components/types";
5+
import {
6+
getPersonalSetting,
7+
setPersonalSetting,
8+
} from "~/components/settings/utils/accessors";
59

6-
export const getQueryPages = (extensionAPI: OnloadArgs["extensionAPI"]) => {
7-
const value = extensionAPI.settings.get("query-pages") as
8-
| string[]
9-
| string
10-
| Record<string, string>;
10+
// Legacy extensionAPI stored query-pages as string | string[] | Record<string, string>.
11+
// Coerce to string[] for backward compatibility with old stored formats.
12+
export const getQueryPages = (): string[] => {
13+
const value = getPersonalSetting<string[] | string | Record<string, string>>([
14+
"Query",
15+
"Query pages",
16+
]);
1117
return typeof value === "string"
1218
? [value]
1319
: Array.isArray(value)
@@ -22,8 +28,13 @@ const QueryPagesPanel = ({
2228
}: {
2329
extensionAPI: OnloadArgs["extensionAPI"];
2430
}) => {
25-
const [texts, setTexts] = useState(() => getQueryPages(extensionAPI));
31+
const [texts, setTexts] = useState(() => getQueryPages());
2632
const [value, setValue] = useState("");
33+
const setQueryPages = (newTexts: string[]) => {
34+
setPersonalSetting(["Query", "Query pages"], newTexts);
35+
void extensionAPI.settings.set("query-pages", newTexts);
36+
};
37+
2738
return (
2839
<div
2940
className="flex flex-col"
@@ -45,7 +56,7 @@ const QueryPagesPanel = ({
4556
onClick={() => {
4657
const newTexts = [...texts, value];
4758
setTexts(newTexts);
48-
extensionAPI.settings.set("query-pages", newTexts);
59+
setQueryPages(newTexts);
4960
setValue("");
5061
posthog.capture("Query Page: Page Format Added", {
5162
newType: value,
@@ -70,7 +81,7 @@ const QueryPagesPanel = ({
7081
onClick={() => {
7182
const newTexts = texts.filter((_, jndex) => index !== jndex);
7283
setTexts(newTexts);
73-
extensionAPI.settings.set("query-pages", newTexts);
84+
setQueryPages(newTexts);
7485
}}
7586
/>
7687
</div>

apps/roam/src/components/settings/QuerySettings.tsx

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import { Label } from "@blueprintjs/core";
44
import Description from "roamjs-components/components/Description";
55
import { DEFAULT_PAGE_SIZE_KEY, HIDE_METADATA_KEY } from "~/data/userSettings";
66
import DefaultFilters from "./DefaultFilters";
7-
import { getQueryPages } from "./QueryPagesPanel";
87
import {
98
PersonalFlagPanel,
109
PersonalNumberPanel,
@@ -37,9 +36,6 @@ const QuerySettings = ({
3736
title="Default page size"
3837
description="The default page size used for query results"
3938
settingKeys={["Query", "Default page size"]}
40-
initialValue={
41-
Number(extensionAPI.settings.get(DEFAULT_PAGE_SIZE_KEY)) || 10
42-
}
4339
onChange={(value) => {
4440
void extensionAPI.settings.set(DEFAULT_PAGE_SIZE_KEY, value);
4541
posthog.capture("Query Settings: Default Page Size Changed", {
@@ -51,7 +47,6 @@ const QuerySettings = ({
5147
title="Query pages"
5248
description="The title formats of pages that you would like to serve as pages that generate queries"
5349
settingKeys={["Query", "Query pages"]}
54-
initialValue={getQueryPages(extensionAPI)}
5550
onChange={(values) => {
5651
void extensionAPI.settings.set("query-pages", values);
5752
}}

apps/roam/src/index.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { listActiveQueries } from "./utils/listActiveQueries";
1313
import { registerSmartBlock } from "./utils/registerSmartBlock";
1414
import { initObservers } from "./utils/initializeObserversAndListeners";
1515
import { addGraphViewNodeStyling } from "./utils/graphViewNodeStyling";
16-
import { setQueryPages } from "./utils/setQueryPages";
16+
import { setInitialQueryPages } from "./utils/setQueryPages";
1717
import initializeDiscourseNodes from "./utils/initializeDiscourseNodes";
1818
import styles from "./styles/styles.css";
1919
import discourseFloatingMenuStyles from "./styles/discourseFloatingMenuStyles.css";
@@ -83,7 +83,7 @@ export default runExtension(async (onloadArgs) => {
8383
registerCommandPaletteCommands(onloadArgs);
8484
createSettingsPanel(onloadArgs);
8585
registerSmartBlock(onloadArgs);
86-
setQueryPages(onloadArgs);
86+
setInitialQueryPages(onloadArgs);
8787

8888
const style = addStyle(styles);
8989
const discourseGraphStyle = addStyle(discourseGraphStyles);
@@ -133,7 +133,7 @@ export default runExtension(async (onloadArgs) => {
133133
const queryArgs = parseQuery(parentUid);
134134
return fireQuerySync(queryArgs);
135135
},
136-
listActiveQueries: () => listActiveQueries(extensionAPI),
136+
listActiveQueries: () => listActiveQueries(),
137137
isDiscourseNode: isDiscourseNode,
138138
// @ts-expect-error - we are still using roamjs-components global definition
139139
getDiscourseNodes: getDiscourseNodes,

apps/roam/src/utils/calcCanvasNodeSizeAndImg.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -107,10 +107,7 @@ const calcCanvasNodeSizeAndImg = async ({
107107

108108
let imageUrl;
109109
if (keyImageOption === "query-builder") {
110-
const parentUid = resolveQueryBuilderRef({
111-
queryRef: qbAlias,
112-
extensionAPI,
113-
});
110+
const parentUid = resolveQueryBuilderRef({ queryRef: qbAlias });
114111
const results = await runQuery({
115112
extensionAPI,
116113
parentUid,
@@ -126,10 +123,15 @@ const calcCanvasNodeSizeAndImg = async ({
126123

127124
try {
128125
const { width, height } = await loadImage(imageUrl);
129-
if (!width || !height || !Number.isFinite(width) || !Number.isFinite(height)) {
126+
if (
127+
!width ||
128+
!height ||
129+
!Number.isFinite(width) ||
130+
!Number.isFinite(height)
131+
) {
130132
return { w, h, imageUrl: "" };
131133
}
132-
134+
133135
const aspectRatio = width / height;
134136
const nodeImageHeight = w / aspectRatio;
135137
const newHeight = h + nodeImageHeight;

apps/roam/src/utils/createDiscourseNode.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,7 @@ const createDiscourseNode = async ({
8080
if (keyImageOption === "query-builder") {
8181
if (!extensionAPI) return;
8282

83-
const parentUid = resolveQueryBuilderRef({
84-
queryRef: qbAlias,
85-
extensionAPI,
86-
});
83+
const parentUid = resolveQueryBuilderRef({ queryRef: qbAlias });
8784
const results = await runQuery({
8885
extensionAPI,
8986
parentUid,

0 commit comments

Comments
 (0)