Skip to content

Commit eb28427

Browse files
committed
optimise discourse node page observer, run isDiscourseNode only once
1 parent 9c559c3 commit eb28427

File tree

2 files changed

+40
-52
lines changed

2 files changed

+40
-52
lines changed

apps/roam/src/utils/initializeObserversAndListeners.ts

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import {
44
getPageTitleValueByHtmlElement,
55
} from "roamjs-components/dom";
66
import { createBlock } from "roamjs-components/writes";
7-
import { renderLinkedReferenceAdditions } from "~/utils/renderLinkedReferenceAdditions";
7+
import { renderDiscourseContextAndCanvasReferences } from "~/utils/renderLinkedReferenceAdditions";
88
import { createConfigObserver } from "roamjs-components/components/ConfigPage";
99
import {
1010
renderTldrawCanvas,
@@ -90,6 +90,16 @@ export const initObservers = async ({
9090
const uid = getPageUidByPageTitle(title);
9191
if (isDiscourseNode(uid)) {
9292
renderPossibleDuplicates(h1, title);
93+
const linkedReferencesDiv = document.querySelector(
94+
".rm-reference-main",
95+
) as HTMLDivElement;
96+
if (linkedReferencesDiv) {
97+
renderDiscourseContextAndCanvasReferences(
98+
linkedReferencesDiv,
99+
uid,
100+
onloadArgs,
101+
);
102+
}
93103
}
94104

95105
if (isNodeConfigPage(title)) renderNodeConfigPage(props);
@@ -99,17 +109,6 @@ export const initObservers = async ({
99109
},
100110
});
101111

102-
// TODO: contains roam query: https://github.com/DiscourseGraphs/discourse-graph/issues/39
103-
const linkedReferencesObserver = createHTMLObserver({
104-
tag: "DIV",
105-
useBody: true,
106-
className: "rm-reference-main",
107-
callback: async (el) => {
108-
const div = el as HTMLDivElement;
109-
await renderLinkedReferenceAdditions(div, onloadArgs);
110-
},
111-
});
112-
113112
const queryBlockObserver = createButtonObserver({
114113
attribute: "query-block",
115114
render: (b) => renderQueryBlock(b, onloadArgs),
@@ -386,7 +385,6 @@ export const initObservers = async ({
386385
pageTitleObserver,
387386
queryBlockObserver,
388387
configPageObserver,
389-
linkedReferencesObserver,
390388
graphOverviewExportObserver,
391389
nodeTagPopupButtonObserver,
392390
leftSidebarObserver,
Lines changed: 29 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,40 @@
11
import { createElement } from "react";
2-
import { getPageTitleValueByHtmlElement } from "roamjs-components/dom";
3-
import getPageUidByPageTitle from "roamjs-components/queries/getPageUidByPageTitle";
42
import renderWithUnmount from "roamjs-components/util/renderWithUnmount";
53
import { DiscourseContext } from "~/components";
64
import CanvasReferences from "~/components/canvas/CanvasReferences";
7-
import isDiscourseNode from "./isDiscourseNode";
85
import { OnloadArgs } from "roamjs-components/types";
96

10-
export const renderLinkedReferenceAdditions = async (
7+
export const renderDiscourseContextAndCanvasReferences = (
118
div: HTMLDivElement,
9+
uid: string,
1210
onloadArgs: OnloadArgs,
13-
) => {
14-
const isMainWindow = !!div.closest(".roam-article");
15-
const uid = isMainWindow
16-
? await window.roamAlphaAPI.ui.mainWindow.getOpenPageOrBlockUid()
17-
: getPageUidByPageTitle(getPageTitleValueByHtmlElement(div));
18-
if (
19-
uid &&
20-
isDiscourseNode(uid) &&
21-
!div.getAttribute("data-roamjs-discourse-context")
22-
) {
23-
div.setAttribute("data-roamjs-discourse-context", "true");
24-
const parent = div.firstElementChild;
25-
if (parent) {
26-
const insertBefore = parent.firstElementChild;
11+
): void => {
12+
if (div.getAttribute("data-roamjs-discourse-context")) return;
2713

28-
const p = document.createElement("div");
29-
parent.insertBefore(p, insertBefore);
30-
renderWithUnmount(
31-
createElement(DiscourseContext, {
32-
uid,
33-
results: [],
34-
}),
35-
p,
36-
onloadArgs,
37-
);
14+
div.setAttribute("data-roamjs-discourse-context", "true");
15+
const parent = div.firstElementChild;
16+
if (!parent) return;
3817

39-
const canvasP = document.createElement("div");
40-
parent.insertBefore(canvasP, insertBefore);
41-
renderWithUnmount(
42-
createElement(CanvasReferences, {
43-
uid,
44-
}),
45-
canvasP,
46-
onloadArgs,
47-
);
48-
}
49-
}
18+
const insertBefore = parent.firstElementChild;
19+
20+
const p = document.createElement("div");
21+
parent.insertBefore(p, insertBefore);
22+
renderWithUnmount(
23+
createElement(DiscourseContext, {
24+
uid,
25+
results: [],
26+
}),
27+
p,
28+
onloadArgs,
29+
);
30+
31+
const canvasP = document.createElement("div");
32+
parent.insertBefore(canvasP, insertBefore);
33+
renderWithUnmount(
34+
createElement(CanvasReferences, {
35+
uid,
36+
}),
37+
canvasP,
38+
onloadArgs,
39+
);
5040
};

0 commit comments

Comments
 (0)