Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
e7114b4
ENG-1465: Add "Use new settings store" feature flag (#811)
sid597 Feb 25, 2026
c324bb6
ENG-1455: Dual-read from old-system settings and from blockprops (#812)
sid597 Mar 1, 2026
700b590
ENG-1472: Refactor BlockPropSettingPanels to add accessor-backed defa…
sid597 Mar 1, 2026
b88f56a
Eng-1473 port non boolean personal setting consumers (#823)
sid597 Mar 1, 2026
4c908aa
ENG-1467: Port global setting consumer reads (→ getGlobalSetting) (#824)
sid597 Mar 1, 2026
47411c2
ENG-1456: Migrate personal boolean flag consumers (getSetting → getPe…
sid597 Mar 2, 2026
0bc1d22
ENG-1479: Port suggestive mode settings to dual-read (#845)
sid597 Mar 3, 2026
3b4c80a
ENG-1468: Port node and relations tree based consumers (#825)
sid597 Mar 3, 2026
f6cc8c2
ENG-1478: Port left sidebar to dual-readers + reactivity
sid597 Mar 2, 2026
5155a2c
ENG-1478: DRY merge helpers, real dual-read in settings panels, emitt…
sid597 Mar 2, 2026
686fd05
ENG-1478: refresh config tree before emitter-driven rebuild
sid597 Mar 3, 2026
eea529a
ENG-1478: extract emitter key constants, fix stale TODO
sid597 Mar 3, 2026
5925be2
ENG-1478: fix legacy adapter child.uid → child.text, fix settingKeys …
sid597 Mar 3, 2026
ee8bf56
ENG-1478: skip reload prompt when new settings store is active
sid597 Mar 3, 2026
ade239b
ENG-1478: guard getGlobalSetting/getPersonalSetting against empty keys
sid597 Mar 3, 2026
b7d26df
ENG-1469: Refactor getDiscourseRelations and getDiscourseNodes to rea…
sid597 Mar 3, 2026
a1ce922
Fix: use backedBy 'user' for initial discourse nodes in block props
sid597 Mar 4, 2026
915c0eb
Hardcode backedBy 'user' in toDiscourseNode to match legacy behavior
sid597 Mar 4, 2026
d682a86
ENG-1484: reactive settings for triggers and suggestive mode overlay
sid597 Mar 5, 2026
d280bfd
ENG-1484: use nullish coalescing for trigger fallbacks to match init …
sid597 Mar 6, 2026
2fdb3de
ENG-1484: reactive suggestive mode flag, gate reload prompts on new s…
sid597 Mar 6, 2026
bc261e0
ENG-1484: broad selector for suggestive overlay cleanup to match legacy
sid597 Mar 6, 2026
0ee94fa
ENG-1484: fix prettier formatting (root config)
sid597 Mar 6, 2026
dc1d46a
ENG-1484: drop reload prompts — reactivity is unconditional via dual-…
sid597 Mar 6, 2026
46fa9bc
Merge pull request #844 from DiscourseGraphs/eng-1478-port-both-globa…
sid597 Mar 9, 2026
6606ffa
Merge pull request #853 from DiscourseGraphs/eng-1469-refactor-getdis…
sid597 Mar 9, 2026
b5257d7
ENG-1499: Replace raw string accessor paths with shared constants fro…
sid597 Mar 9, 2026
5a462ce
Fix missed keyImageOption getter to use shared constants
sid597 Mar 9, 2026
fc58bf3
Merge pull request #875 from DiscourseGraphs/eng-1499-convert-legacy-…
sid597 Mar 10, 2026
cd16a66
ENG-1519: Add legacy-to-blockprops migration, remove backedBy from sc…
sid597 Mar 10, 2026
b97def3
Fix shouldWrite skipping after reconciliation, warn on missing person…
sid597 Mar 10, 2026
14e72c9
Add migration telemetry for legacy parse failures
sid597 Mar 10, 2026
def877f
Use backend query for node migration
sid597 Mar 10, 2026
cd2fa4c
ENG-735: Remove inline settings UI from config pages
sid597 Mar 10, 2026
f3cae70
Use Object.values instead of unused destructured key
sid597 Mar 11, 2026
991a7c9
ENG-1503: Replace getFormattedConfigTree consumers with direct helper…
sid597 Mar 5, 2026
3b67eec
ENG-1484: extract constants, remove dead defaults per review
sid597 Mar 11, 2026
bdbbbc4
Fix useConfig to call buildConfig() for dual-read merge
sid597 Mar 11, 2026
7f51464
merge migration-block-init-staging-branch
sid597 Mar 11, 2026
c44b338
prettier
sid597 Mar 11, 2026
cbf7345
Merge pull request #860 from DiscourseGraphs/eng-1503-remove-remnants…
sid597 Mar 11, 2026
028bec6
Merge migration-block-init-staging-branch into eng-735
sid597 Mar 11, 2026
6e28926
Fix import path for DISCOURSE_CONFIG_PAGE_TITLE
sid597 Mar 11, 2026
29f99fc
Merge branch 'migration-block-init-staging-branch' into eng-1519-lega…
sid597 Mar 11, 2026
f62b3f8
fix review
sid597 Mar 13, 2026
a1f1dc0
Merge pull request #876 from DiscourseGraphs/eng-1519-legacy-to-block…
sid597 Mar 13, 2026
8b23c58
Merge pull request #878 from DiscourseGraphs/eng-735-remove-ui-from-s…
sid597 Mar 13, 2026
fd332e9
Merge remote-tracking branch 'origin/migration-block-init-staging-bra…
sid597 Mar 13, 2026
4877527
Merge pull request #861 from DiscourseGraphs/eng-1484-reactive-settin…
sid597 Mar 13, 2026
19f90c0
Merge origin/main into migration-block-init-staging-branch
sid597 Mar 16, 2026
26fef42
Merge origin/main (ENG-1403, ENG-1508) into migration-block-init-stag…
sid597 Mar 16, 2026
b986299
ENG-1470: Fix dual-read gaps found during flag-ON validation (#896)
sid597 Apr 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 13 additions & 22 deletions apps/roam/src/components/DiscourseContextOverlay.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,10 @@ import ReactDOM from "react-dom";
import { ContextContent } from "./DiscourseContext";
import useInViewport from "react-in-viewport/dist/es/lib/useInViewport";
import normalizePageTitle from "roamjs-components/queries/normalizePageTitle";
import { USE_STORED_RELATIONS } from "~/data/userSettings";
import { getSetting } from "~/utils/extensionSettings";
import deriveDiscourseNodeAttribute from "~/utils/deriveDiscourseNodeAttribute";
import getSettingValueFromTree from "roamjs-components/util/getSettingValueFromTree";
import getBasicTreeByParentUid from "roamjs-components/queries/getBasicTreeByParentUid";
import getSubTree from "roamjs-components/util/getSubTree";
import { getDiscourseNodeSetting } from "~/components/settings/utils/accessors";
import { DISCOURSE_NODE_KEYS } from "~/components/settings/utils/settingKeys";
import { getStoredRelationsEnabled } from "~/utils/storedRelations";
import nanoid from "nanoid";
import getPageUidByPageTitle from "roamjs-components/queries/getPageUidByPageTitle";
import getDiscourseContextResults from "~/utils/getDiscourseContextResults";
Expand Down Expand Up @@ -190,11 +188,10 @@ const useDiscourseContext = (uid: string, tag: string) => {
).length,
)
.reduce((acc, cur) => acc + cur, 0);
const attribute = getSettingValueFromTree({
tree: getBasicTreeByParentUid(discourseNode.type),
key: "Overlay",
defaultValue: "Overlay",
});
const attribute =
getDiscourseNodeSetting<string>(discourseNode.type, [
DISCOURSE_NODE_KEYS.overlay,
]) || "Overlay";
return deriveDiscourseNodeAttribute({
uid: uid,
attribute,
Expand All @@ -203,17 +200,11 @@ const useDiscourseContext = (uid: string, tag: string) => {
setRefs(refs);
setScore(score);

const nodeType = discourseNode.type;
const attributeNode = getSubTree({
tree: getBasicTreeByParentUid(nodeType || ""),
key: "Attributes",
});
const scoreFormula = attributeNode?.children
? getSettingValueFromTree({
tree: attributeNode.children,
key: attribute,
})
: "";
const scoreFormula =
getDiscourseNodeSetting<string>(discourseNode.type, [
DISCOURSE_NODE_KEYS.attributes,
attribute,
]) ?? "";
if (scoreFormula === "" && score !== numResults) {
internalError({
error: "DiscourseContext: Score does not match Num relations",
Expand All @@ -222,7 +213,7 @@ const useDiscourseContext = (uid: string, tag: string) => {
score,
numResults,
ignoreCache,
reified: getSetting<boolean>(USE_STORED_RELATIONS),
reified: getStoredRelationsEnabled(),
},
});
}
Expand Down
18 changes: 9 additions & 9 deletions apps/roam/src/components/DiscourseFloatingMenu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ import {
import { FeedbackWidget } from "./BirdEatsBugs";
import { render as renderSettings } from "~/components/settings/Settings";
import posthog from "posthog-js";
import { type SettingsSnapshot } from "./settings/utils/accessors";
import { PERSONAL_KEYS } from "./settings/utils/settingKeys";

type DiscourseFloatingMenuProps = {
// CSS placement class
Expand Down Expand Up @@ -116,26 +118,23 @@ export const showDiscourseFloatingMenu = () => {

export const installDiscourseFloatingMenu = (
onLoadArgs: OnloadArgs,
props: DiscourseFloatingMenuProps = {
position: "bottom-right",
theme: "bp3-light",
buttonTheme: "bp3-light",
},
snapshot: SettingsSnapshot,
) => {
let floatingMenuAnchor = document.getElementById(ANCHOR_ID);
if (!floatingMenuAnchor) {
floatingMenuAnchor = document.createElement("div");
floatingMenuAnchor.id = ANCHOR_ID;
document.getElementById("app")?.appendChild(floatingMenuAnchor);
}
if (onLoadArgs.extensionAPI.settings.get("hide-feedback-button") as boolean) {
if (snapshot.personalSettings[PERSONAL_KEYS.hideFeedbackButton]) {
floatingMenuAnchor.classList.add("hidden");
}
// eslint-disable-next-line react/no-deprecated
ReactDOM.render(
<DiscourseFloatingMenu
position={props.position}
theme={props.theme}
buttonTheme={props.buttonTheme}
position="bottom-right"
theme="bp3-light"
buttonTheme="bp3-light"
onloadArgs={onLoadArgs}
/>,
floatingMenuAnchor,
Expand All @@ -146,6 +145,7 @@ export const removeDiscourseFloatingMenu = () => {
const anchor = document.getElementById(ANCHOR_ID);
if (anchor) {
try {
// eslint-disable-next-line react/no-deprecated
ReactDOM.unmountComponentAtNode(anchor);
} catch (e) {
// no-op: unmount best-effort
Expand Down
15 changes: 8 additions & 7 deletions apps/roam/src/components/DiscourseNodeMenu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ import { OnloadArgs } from "roamjs-components/types";
import { formatHexColor } from "./settings/DiscourseNodeCanvasSettings";
import posthog from "posthog-js";
import { setPersonalSetting } from "~/components/settings/utils/accessors";
import { PERSONAL_KEYS } from "~/components/settings/utils/settingKeys";
import type { PersonalSettings } from "~/components/settings/utils/zodSchema";

type Props = {
textarea?: HTMLTextAreaElement;
Expand Down Expand Up @@ -416,16 +418,15 @@ export const comboToString = (combo: IKeyCombo): string => {

export const NodeMenuTriggerComponent = ({
extensionAPI,
initialValue,
}: {
extensionAPI: OnloadArgs["extensionAPI"];
initialValue: PersonalSettings["Personal node menu trigger"];
}) => {
const inputRef = useRef<HTMLInputElement>(null);
const [isActive, setIsActive] = useState(false);
const [comboKey, setComboKey] = useState<IKeyCombo>(
() =>
(extensionAPI.settings.get(
"personal-node-menu-trigger",
) as IKeyCombo) || { modifiers: 0, key: "" },
const [comboKey, setComboKey] = useState<IKeyCombo>(() =>
typeof initialValue === "object" ? initialValue : { modifiers: 0, key: "" },
);

const handleKeyDown = useCallback(
Expand All @@ -438,7 +439,7 @@ export const NodeMenuTriggerComponent = ({
const combo = { key: comboObj.key, modifiers: comboObj.modifiers };
setComboKey(combo);
void extensionAPI.settings.set("personal-node-menu-trigger", combo);
setPersonalSetting(["Personal node menu trigger"], combo);
setPersonalSetting([PERSONAL_KEYS.personalNodeMenuTrigger], combo);
},
[extensionAPI],
);
Expand All @@ -460,7 +461,7 @@ export const NodeMenuTriggerComponent = ({
onClick={() => {
setComboKey({ modifiers: 0, key: "" });
void extensionAPI.settings.set("personal-node-menu-trigger", "");
setPersonalSetting(["Personal node menu trigger"], "");
setPersonalSetting([PERSONAL_KEYS.personalNodeMenuTrigger], "");
}}
minimal
/>
Expand Down
8 changes: 5 additions & 3 deletions apps/roam/src/components/DiscourseNodeSearchMenu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ import { OnloadArgs } from "roamjs-components/types";
import getDiscourseNodes, { DiscourseNode } from "~/utils/getDiscourseNodes";
import getDiscourseNodeFormatExpression from "~/utils/getDiscourseNodeFormatExpression";
import { Result } from "~/utils/types";
import { getSetting } from "~/utils/extensionSettings";
import MiniSearch from "minisearch";
import { setPersonalSetting } from "~/components/settings/utils/accessors";
import { PERSONAL_KEYS } from "~/components/settings/utils/settingKeys";

type Props = {
textarea: HTMLTextAreaElement;
Expand Down Expand Up @@ -706,12 +706,14 @@ export const renderDiscourseNodeSearchMenu = (props: Props) => {

export const NodeSearchMenuTriggerSetting = ({
onloadArgs,
initialValue,
}: {
onloadArgs: OnloadArgs;
initialValue: string;
}) => {
const extensionAPI = onloadArgs.extensionAPI;
const [nodeSearchTrigger, setNodeSearchTrigger] = useState<string>(
getSetting("node-search-trigger", "@"),
() => initialValue,
);

const handleNodeSearchTriggerChange = (
Expand All @@ -726,7 +728,7 @@ export const NodeSearchMenuTriggerSetting = ({

setNodeSearchTrigger(trigger);
void extensionAPI.settings.set("node-search-trigger", trigger);
setPersonalSetting(["Node search menu trigger"], trigger);
setPersonalSetting([PERSONAL_KEYS.nodeSearchMenuTrigger], trigger);
};
return (
<InputGroup
Expand Down
Loading