Skip to content

Commit ea615c9

Browse files
committed
rerender left sidebar on enable/disable
1 parent 977f7ca commit ea615c9

File tree

3 files changed

+74
-5
lines changed

3 files changed

+74
-5
lines changed

apps/roam/src/components/LeftSidebarView.tsx

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -508,12 +508,20 @@ const migrateFavorites = async () => {
508508
refreshConfigTree();
509509
};
510510

511+
let cachedOnloadArgs: OnloadArgs | null = null;
512+
513+
export const cacheOnloadArgs = (onloadArgs: OnloadArgs): void => {
514+
cachedOnloadArgs = onloadArgs;
515+
};
516+
511517
export const mountLeftSidebar = async (
512518
wrapper: HTMLElement,
513519
onloadArgs: OnloadArgs,
514520
): Promise<void> => {
515521
if (!wrapper) return;
516522

523+
cachedOnloadArgs = onloadArgs;
524+
517525
const id = "dg-left-sidebar-root";
518526
let root = wrapper.querySelector(`#${id}`) as HTMLDivElement;
519527
if (!root) {
@@ -531,4 +539,24 @@ export const mountLeftSidebar = async (
531539
ReactDOM.render(<LeftSidebarView onloadArgs={onloadArgs} />, root);
532540
};
533541

542+
export const unmountLeftSidebar = (): void => {
543+
const wrapper = document.querySelector(".starred-pages-wrapper") as HTMLDivElement;
544+
if (!wrapper) return;
545+
546+
const root = wrapper.querySelector("#dg-left-sidebar-root") as HTMLDivElement;
547+
if (root) {
548+
ReactDOM.unmountComponentAtNode(root);
549+
root.remove();
550+
}
551+
wrapper.style.padding = "";
552+
};
553+
554+
export const remountLeftSidebar = async (): Promise<void> => {
555+
const wrapper = document.querySelector(".starred-pages-wrapper") as HTMLDivElement;
556+
if (!wrapper || !cachedOnloadArgs) return;
557+
558+
wrapper.style.padding = "0";
559+
await mountLeftSidebar(wrapper, cachedOnloadArgs);
560+
};
561+
534562
export default LeftSidebarView;

apps/roam/src/components/settings/utils/pullWatchers.ts

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import {
1414
type PersonalSettings,
1515
type DiscourseNodeSettings,
1616
} from "./zodSchema";
17+
import { render as renderToast } from "roamjs-components/components/Toast";
18+
import { unmountLeftSidebar, remountLeftSidebar } from "~/components/LeftSidebarView";
1719

1820
type PullWatchCallback = (before: unknown, after: unknown) => void;
1921

@@ -91,10 +93,47 @@ type DiscourseNodeHandler = (
9193
export const featureFlagHandlers: Partial<
9294
Record<keyof FeatureFlags, FeatureFlagHandler>
9395
> = {
94-
// Add handlers as needed:
95-
// "Enable Left Sidebar": (newValue) => { ... },
96-
// "Suggestive Mode Enabled": (newValue) => { ... },
97-
// "Reified Relation Triples": (newValue) => { ... },
96+
"Enable Left Sidebar": (newValue, oldValue) => {
97+
if (newValue !== oldValue) {
98+
if (newValue) {
99+
void remountLeftSidebar();
100+
renderToast({
101+
id: "left-sidebar-enabled",
102+
content: "Left Sidebar enabled.",
103+
intent: "success",
104+
timeout: 3000,
105+
});
106+
} else {
107+
unmountLeftSidebar();
108+
renderToast({
109+
id: "left-sidebar-disabled",
110+
content: "Left Sidebar disabled.",
111+
intent: "primary",
112+
timeout: 3000,
113+
});
114+
}
115+
}
116+
},
117+
"Suggestive Mode Enabled": (newValue, oldValue) => {
118+
if (newValue !== oldValue) {
119+
renderToast({
120+
id: "suggestive-mode-changed",
121+
content: `Suggestive Mode ${newValue ? "enabled" : "disabled"}. Please reload the graph for changes to take effect.`,
122+
intent: "primary",
123+
timeout: 5000,
124+
});
125+
}
126+
},
127+
"Reified Relation Triples": (newValue, oldValue) => {
128+
if (newValue !== oldValue) {
129+
renderToast({
130+
id: "reified-relations-changed",
131+
content: `Reified Relation Triples ${newValue ? "enabled" : "disabled"}. Please reload the graph for changes to take effect.`,
132+
intent: "primary",
133+
timeout: 5000,
134+
});
135+
}
136+
},
98137
};
99138

100139
export const globalSettingsHandlers: Partial<

apps/roam/src/utils/initializeObserversAndListeners.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ import { renderNodeTagPopupButton } from "./renderNodeTagPopup";
4949
import { renderImageToolsMenu } from "./renderImageToolsMenu";
5050
import { formatHexColor } from "~/components/settings/DiscourseNodeCanvasSettings";
5151
import { getSetting } from "./extensionSettings";
52-
import { mountLeftSidebar } from "~/components/LeftSidebarView";
52+
import { mountLeftSidebar, cacheOnloadArgs } from "~/components/LeftSidebarView";
5353
import { getUidAndBooleanSetting } from "./getExportSettings";
5454
import { getCleanTagText } from "~/components/settings/NodeConfig";
5555
import { getFeatureFlag } from "~/components/settings/utils/accessors";
@@ -259,6 +259,8 @@ export const initObservers = async ({
259259
className: "starred-pages-wrapper",
260260
callback: (el) => {
261261
void (async () => {
262+
cacheOnloadArgs(onloadArgs);
263+
262264
const isLeftSidebarEnabled = getFeatureFlag("Enable Left Sidebar");
263265
const container = el as HTMLDivElement;
264266
if (isLeftSidebarEnabled) {

0 commit comments

Comments
 (0)