Skip to content

Commit 4ca27f8

Browse files
committed
feat: add copy button to messages
Signed-off-by: tylerslaton <[email protected]>
1 parent 1f41378 commit 4ca27f8

File tree

1 file changed

+38
-21
lines changed

1 file changed

+38
-21
lines changed

components/script/messages.tsx

Lines changed: 38 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ReactNode } from "react";
2-
import { GoSquirrel } from "react-icons/go";
2+
import { IoCopyOutline } from "react-icons/io5";
33
import Markdown from "react-markdown";
44
import remarkGfm from 'remark-gfm'
55
import rehypeExternalLinks from 'rehype-external-links'
@@ -43,44 +43,50 @@ const Message = ({ message, noAvatar, restart }: { message: Message ,noAvatar?:
4343
return (
4444
<div className="flex flex-col items-start mb-10">
4545
<div className="flex gap-2 w-full">
46-
{ !noAvatar &&
47-
<Tooltip
46+
{!noAvatar && (
47+
<Tooltip
4848
content={`Sent from ${message.name || "System"}`}
4949
placement="bottom"
5050
closeDelay={0.5}
5151
>
5252
<Avatar
5353
showFallback
54-
name={abbreviate(message.name || "System")}
54+
name={abbreviate(message.name || "System")}
5555
className="w-[40px] cursor-default"
56-
classNames={{base: `bg-white p-6 text-sm border dark:border-none dark:bg-zinc-900 ${message.error && "border-danger dark:border-danger"}`}}
56+
classNames={{
57+
base: `bg-white p-6 text-sm border dark:border-none dark:bg-zinc-900 ${
58+
message.error && "border-danger dark:border-danger"
59+
}`,
60+
}}
5761
/>
5862
</Tooltip>
59-
}
60-
<div
61-
className={`w-[93%] rounded-2xl text-black dark:text-white pt-1 px-4 border dark:border-none dark:bg-zinc-900 ${message.error ? "border-danger dark:border-danger" : ""}`}
63+
)}
64+
<div
65+
className={`w-[93%] rounded-2xl text-black dark:text-white pt-1 px-4 border dark:border-none dark:bg-zinc-900 ${
66+
message.error ? "border-danger dark:border-danger" : ""
67+
}`}
6268
>
63-
{ message.message &&
64-
<Markdown
65-
className={`!text-wrap prose overflow-x-auto dark:prose-invert p-4 !w-full !max-w-full prose-thead:text-left prose-img:rounded-xl prose-img:shadow-lg`}
69+
{message.message && (
70+
<Markdown
71+
className={`!text-wrap prose overflow-x-auto dark:prose-invert p-4 !w-full !max-w-full prose-thead:text-left prose-img:rounded-xl prose-img:shadow-lg`}
6672
remarkPlugins={[remarkGfm]}
67-
rehypePlugins={[[rehypeExternalLinks, {target: '_blank'}]]}
73+
rehypePlugins={[[rehypeExternalLinks, { target: "_blank" }]]}
6874
>
6975
{message.message}
7076
</Markdown>
71-
}
72-
{ message.component }
77+
)}
78+
{message.component}
7379
{message.error && (
7480
<>
7581
<p className="text-danger text-base pl-4 pb-6">{message.error}</p>
76-
<Tooltip
82+
<Tooltip
7783
content="If you are no longer able to chat, click here to restart the script."
7884
closeDelay={0.5}
7985
placement="bottom"
8086
color="danger"
8187
>
8288
<Button
83-
startContent={<GoIssueReopened className="text-lg"/>}
89+
startContent={<GoIssueReopened className="text-lg" />}
8490
color="danger"
8591
className="ml-4 mb-6"
8692
onPress={restart}
@@ -92,11 +98,22 @@ const Message = ({ message, noAvatar, restart }: { message: Message ,noAvatar?:
9298
)}
9399
</div>
94100
</div>
95-
{ message.calls &&
96-
<div className="flex w-full justify-end mt-2">
97-
<Calls calls={message.calls}/>
98-
</div>
99-
}
101+
<div className="flex w-full justify-end mt-2 space-x-2">
102+
<Tooltip content="Copy Message" placement="bottom" closeDelay={0.5}>
103+
<Button
104+
isIconOnly
105+
radius="full"
106+
startContent={<IoCopyOutline className="text-lg" />}
107+
className="ml-2"
108+
onPress={() => {
109+
navigator.clipboard.writeText(message.message || '');
110+
}}
111+
/>
112+
</Tooltip>
113+
{message.calls && (
114+
<Calls calls={message.calls} />
115+
)}
116+
</div>
100117
</div>
101118
);
102119
case MessageType.Alert:

0 commit comments

Comments
 (0)