Skip to content

Commit 27e1eda

Browse files
committed
use a custom component rather than dom
1 parent 211cf3f commit 27e1eda

File tree

1 file changed

+32
-34
lines changed

1 file changed

+32
-34
lines changed

src/components/DocsAI.tsx

Lines changed: 32 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useEffect, useState } from "react";
1+
import { useState } from "react";
22
import Markdown from "react-markdown";
33
import remarkBreaks from "remark-breaks";
44
import remarkGfm from "remark-gfm";
@@ -32,43 +32,38 @@ async function sendCSATFeedback(queryId: string, positive: boolean) {
3232
}
3333
}
3434

35+
function TrackedLink({
36+
href,
37+
children,
38+
}: {
39+
href?: string;
40+
children?: React.ReactNode;
41+
}) {
42+
return (
43+
<a
44+
href={href}
45+
target="_blank"
46+
onClick={() =>
47+
track("click chat link", {
48+
value: children?.toString() ?? "",
49+
href,
50+
})
51+
}
52+
>
53+
{children}
54+
</a>
55+
);
56+
}
57+
3558
function Messages({
3659
messages,
3760
loading,
3861
}: {
3962
messages: Messages;
4063
loading: boolean;
4164
}) {
42-
const [listenersAdded, setListenersAdded] = useState<Set<string>>(new Set());
4365
const [feedbackGiven, setFeedbackGiven] = useState<Set<string>>(new Set());
4466

45-
useEffect(() => {
46-
const messages = document.querySelectorAll<HTMLDivElement>(
47-
"[data-docs-ai-message]",
48-
);
49-
50-
for (const message of messages) {
51-
if (listenersAdded.has(message.dataset.queryId ?? "")) {
52-
continue;
53-
}
54-
55-
const links = message.querySelectorAll<HTMLAnchorElement>("a");
56-
57-
for (const link of links) {
58-
link.addEventListener("click", () => {
59-
track("click chat link", {
60-
value: link.innerText,
61-
href: link.href,
62-
});
63-
});
64-
}
65-
66-
setListenersAdded((prev) =>
67-
new Set(prev).add(message.dataset.queryId ?? ""),
68-
);
69-
}
70-
}, [messages]);
71-
7267
const classes = {
7368
base: "w-fit max-w-3/4 rounded p-4",
7469
user: "bg-cl1-brand-orange text-cl1-black self-end",
@@ -91,10 +86,13 @@ function Messages({
9186
<div key={index} className="flex flex-col gap-2">
9287
<div
9388
className={`${classes.base} ${message.role === "user" ? classes.user : classes.assistant}`}
94-
data-docs-ai-message={true}
95-
data-query-id={message.queryId}
9689
>
97-
<Markdown remarkPlugins={[remarkGfm, remarkBreaks]}>
90+
<Markdown
91+
remarkPlugins={[remarkGfm, remarkBreaks]}
92+
components={{
93+
a: TrackedLink,
94+
}}
95+
>
9896
{message.content}
9997
</Markdown>
10098
{message.sources && (
@@ -106,9 +104,9 @@ function Messages({
106104
<ul>
107105
{message.sources.map((source) => (
108106
<li key={source.file_path}>
109-
<a href={source.file_path} target="_blank">
107+
<TrackedLink href={source.file_path}>
110108
{source.title}
111-
</a>
109+
</TrackedLink>
112110
</li>
113111
))}
114112
</ul>

0 commit comments

Comments
 (0)