Skip to content

Commit 69944d9

Browse files
author
Jicheng Lu
committed
add copy message
1 parent 16351fd commit 69944d9

File tree

1 file changed

+53
-1
lines changed

1 file changed

+53
-1
lines changed

src/routes/chat/[agentId]/[conversationId]/chat-box.svelte

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@
106106
let notificationText = '';
107107
let successText = "Done";
108108
let errorText = "Error";
109+
let note = '';
109110
110111
/** @type {number} */
111112
let messageInputTimeout;
@@ -193,6 +194,7 @@
193194
let isDisplayNotification = false;
194195
let isComplete = false;
195196
let isError = false;
197+
let clickCopy = false;
196198
197199
$: {
198200
// const editor = lastBotMsg?.rich_content?.editor || '';
@@ -1169,6 +1171,31 @@
11691171
sendChatMessage(text, data);
11701172
}
11711173
1174+
/**
1175+
* @param {any} e
1176+
* @param {any} message
1177+
*/
1178+
function copyMessage(e, message) {
1179+
e.preventDefault();
1180+
1181+
const elem = document.getElementById(`message-note-${message.message_id}`);
1182+
if (!elem) return;
1183+
1184+
const text = message?.rich_content?.message?.text || message?.text || '';
1185+
elem.classList.remove('hide');
1186+
1187+
navigator.clipboard.writeText(text).then(() => {
1188+
elem.textContent = 'Copied!';
1189+
}).catch(() => {
1190+
elem.textContent = 'Error!';
1191+
}).finally(() => {
1192+
clickCopy = false;
1193+
setTimeout(() => {
1194+
elem.classList.add('hide');
1195+
}, 800);
1196+
});
1197+
}
1198+
11721199
function toggleNotificationModal() {
11731200
isDisplayNotification = !isDisplayNotification;
11741201
if (!isDisplayNotification) {
@@ -1636,7 +1663,7 @@
16361663
<div class="msg-container">
16371664
<RcMessage containerClasses={'bot-msg'} markdownClasses={'markdown-dark text-dark'} message={message} />
16381665
{#if message?.message_id === lastBotMsg?.message_id && message?.uuid === lastBotMsg?.uuid}
1639-
<div style="display: flex; gap: 10px;">
1666+
<div style="display: flex; gap: 10px; flex-wrap: wrap;">
16401667
{#if PUBLIC_LIVECHAT_SPEAKER_ENABLED === 'true'}
16411668
<AudioSpeaker
16421669
id={message?.message_id}
@@ -1675,6 +1702,31 @@
16751702
</div>
16761703
</div>
16771704
{/if}
1705+
<div class="line-align-center" style="font-size: 17px;">
1706+
<!-- svelte-ignore a11y-click-events-have-key-events -->
1707+
<!-- svelte-ignore a11y-no-static-element-interactions -->
1708+
<div
1709+
class="clickable"
1710+
style="height: 85%;"
1711+
data-bs-toggle="tooltip"
1712+
data-bs-placement="top"
1713+
title="Copy"
1714+
on:mouseup={e => copyMessage(e, message)}
1715+
on:mousedown={() => clickCopy = true}
1716+
>
1717+
{#if clickCopy}
1718+
<i class="bx bxs-copy text-primary" />
1719+
{:else}
1720+
<i class="bx bx-copy text-primary" />
1721+
{/if}
1722+
</div>
1723+
</div>
1724+
<div
1725+
class="line-align-center text-primary hide"
1726+
style={'font-size: 0.8em;'}
1727+
id={`message-note-${message.message_id}`}
1728+
>
1729+
</div>
16781730
</div>
16791731
{/if}
16801732
{#if !!message.is_chat_message || !!message.has_message_files}

0 commit comments

Comments
 (0)