Skip to content

Commit bcff59d

Browse files
committed
remove overlay from node dialog, remove usenoecontext, pass node from top of initialise discourse graph, create util
1 parent 81ad95b commit bcff59d

File tree

5 files changed

+45
-79
lines changed

5 files changed

+45
-79
lines changed

apps/roam/src/components/CreateNodeDialog.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import getDiscourseNodes, {
1212
import { getNewDiscourseNodeText } from "~/utils/formatUtils";
1313
import MenuItemSelect from "roamjs-components/components/MenuItemSelect";
1414
import createBlock from "roamjs-components/writes/createBlock";
15-
import { VectorDuplicateMatches } from "./VectorDuplicateMatches";
1615

1716
export type CreateNodeDialogProps = {
1817
onClose: () => void;
@@ -137,7 +136,6 @@ const CreateNodeDialog = ({
137136
onChange={(e) => setTitle(e.currentTarget.value)}
138137
inputRef={inputRef}
139138
/>
140-
<VectorDuplicateMatches text={title} limit={5} />
141139
</div>
142140

143141
<Label>

apps/roam/src/components/VectorDuplicateMatches.tsx

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import React, { useEffect, useState, useMemo } from "react";
22
import { Collapse, Spinner, Icon } from "@blueprintjs/core";
33
import { findSimilarNodesVectorOnly, type VectorMatch } from "~/utils/hyde";
4-
import { useNodeContext, type NodeContext } from "~/utils/useNodeContext";
54
import ReactDOM from "react-dom";
5+
import getPageUidByPageTitle from "roamjs-components/queries/getPageUidByPageTitle";
6+
import { DiscourseNode } from "~/utils/getDiscourseNodes";
7+
import extractContentFromTitle from "~/utils/extractContentFromTitle";
68

79
type VectorSearchParams = {
810
text: string;
@@ -17,10 +19,12 @@ export const VectorDuplicateMatches = ({
1719
pageTitle,
1820
text,
1921
limit = 15,
22+
node,
2023
}: {
2124
pageTitle?: string;
2225
text?: string;
2326
limit?: number;
27+
node: DiscourseNode;
2428
}) => {
2529
const [debouncedText, setDebouncedText] = useState(text);
2630
useEffect(() => {
@@ -37,13 +41,14 @@ export const VectorDuplicateMatches = ({
3741
const [hasSearched, setHasSearched] = useState(false);
3842
const [suggestions, setSuggestions] = useState<VectorMatch[]>([]);
3943

40-
const nodeContext: NodeContext | null = useNodeContext(pageTitle || "");
44+
const searchText = extractContentFromTitle(pageTitle || "", node);
45+
const pageUid = getPageUidByPageTitle(searchText);
4146
const activeContext = useMemo(
4247
() =>
4348
text !== undefined
4449
? { searchText: debouncedText || "", pageUid: null }
45-
: nodeContext,
46-
[text, debouncedText, nodeContext],
50+
: { searchText, pageUid },
51+
[text, debouncedText, searchText, pageUid],
4752
);
4853

4954
useEffect(() => {
@@ -163,6 +168,7 @@ export const VectorDuplicateMatches = ({
163168
export const renderPossibleDuplicates = (
164169
h1: HTMLHeadingElement,
165170
title: string,
171+
node: DiscourseNode,
166172
) => {
167173
const titleContainer = h1.parentElement;
168174
if (!titleContainer || !titleContainer.parentElement) {
@@ -195,7 +201,7 @@ export const renderPossibleDuplicates = (
195201

196202
/*eslint-disable-next-line react/no-deprecated*/
197203
ReactDOM.render(
198-
React.createElement(VectorDuplicateMatches, { pageTitle: title }),
204+
React.createElement(VectorDuplicateMatches, { pageTitle: title, node }),
199205
vectorContainer,
200206
);
201207
/*eslint-disable-next-line react/no-deprecated*/
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import getDiscourseNodeFormatExpression from "./getDiscourseNodeFormatExpression";
2+
3+
const extractContentFromTitle = (
4+
title: string,
5+
node: { format: string },
6+
): string => {
7+
if (!node.format) return title;
8+
const placeholderRegex = /{([\w\d-]+)}/g;
9+
const placeholders: string[] = [];
10+
let placeholderMatch: RegExpExecArray | null = null;
11+
while ((placeholderMatch = placeholderRegex.exec(node.format))) {
12+
placeholders.push(placeholderMatch[1]);
13+
}
14+
const expression = getDiscourseNodeFormatExpression(node.format);
15+
const expressionMatch = expression.exec(title);
16+
if (!expressionMatch || expressionMatch.length <= 1) {
17+
return title;
18+
}
19+
const contentIndex = placeholders.findIndex(
20+
(name) => name.toLowerCase() === "content",
21+
);
22+
if (contentIndex >= 0) {
23+
return expressionMatch[contentIndex + 1]?.trim() || title;
24+
}
25+
return expressionMatch[1]?.trim() || title;
26+
};
27+
28+
export default extractContentFromTitle;

apps/roam/src/utils/initializeObserversAndListeners.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ import getPleasingColors from "@repo/utils/getPleasingColors";
5656
import { colord } from "colord";
5757
import { renderPossibleDuplicates } from "~/components/VectorDuplicateMatches";
5858
import getPageUidByPageTitle from "roamjs-components/queries/getPageUidByPageTitle";
59-
import isDiscourseNode from "./isDiscourseNode";
59+
import findDiscourseNode from "./findDiscourseNode";
6060

6161
const debounce = (fn: () => void, delay = 250) => {
6262
let timeout: number;
@@ -89,8 +89,11 @@ export const initObservers = async ({
8989
const props = { title, h1, onloadArgs };
9090

9191
const uid = getPageUidByPageTitle(title);
92-
if (isDiscourseNode(uid)) {
93-
renderPossibleDuplicates(h1, title);
92+
const nodes = getDiscourseNodes();
93+
const node = findDiscourseNode(uid, nodes);
94+
const isDiscourseNode = node && node.backedBy !== "default";
95+
if (isDiscourseNode) {
96+
renderPossibleDuplicates(h1, title, node);
9497
const linkedReferencesDiv = document.querySelector(
9598
".rm-reference-main",
9699
) as HTMLDivElement;

apps/roam/src/utils/useNodeContext.ts

Lines changed: 0 additions & 69 deletions
This file was deleted.

0 commit comments

Comments
 (0)