From 542494fad603f3ce72496c867c69f929c9d9dd0c Mon Sep 17 00:00:00 2001 From: Danny Avila Date: Tue, 20 Feb 2024 09:33:31 -0500 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=8B=20feat:=20Accumulate=20Text=20Part?= =?UTF-8?q?s=20to=20Clipboard=20for=20Assistant=20Outputs=20(#1847)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/hooks/Messages/useMessageHelpers.ts | 36 +++++++++++++------ 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/client/src/hooks/Messages/useMessageHelpers.ts b/client/src/hooks/Messages/useMessageHelpers.ts index 47da795442..45378b3c5b 100644 --- a/client/src/hooks/Messages/useMessageHelpers.ts +++ b/client/src/hooks/Messages/useMessageHelpers.ts @@ -1,6 +1,6 @@ import copy from 'copy-to-clipboard'; import { useEffect, useRef, useCallback } from 'react'; -import { EModelEndpoint } from 'librechat-data-provider'; +import { EModelEndpoint, ContentTypes } from 'librechat-data-provider'; import { useGetEndpointsQuery } from 'librechat-data-provider/react-query'; import type { TMessage } from 'librechat-data-provider'; import type { TMessageProps } from '~/common'; @@ -25,7 +25,7 @@ export default function useMessageHelpers(props: TMessageProps) { } = useChatContext(); const assistantMap = useAssistantsMapContext(); - const { text, children, messageId = null, isCreatedByUser } = message ?? {}; + const { text, content, children, messageId = null, isCreatedByUser } = message ?? {}; const edit = messageId === currentEditId; const isLast = !children?.length; @@ -46,8 +46,10 @@ export default function useMessageHelpers(props: TMessageProps) { } }, [isLast, message, setLatestMessage, conversation?.conversationId]); - const enterEdit = (cancel?: boolean) => - setCurrentEditId && setCurrentEditId(cancel ? -1 : messageId); + const enterEdit = useCallback( + (cancel?: boolean) => setCurrentEditId && setCurrentEditId(cancel ? -1 : messageId), + [messageId, setCurrentEditId], + ); const handleScroll = useCallback(() => { if (isSubmitting) { @@ -79,14 +81,26 @@ export default function useMessageHelpers(props: TMessageProps) { regenerate(message); }; - const copyToClipboard = (setIsCopied: React.Dispatch>) => { - setIsCopied(true); - copy(text ?? ''); + const copyToClipboard = useCallback( + (setIsCopied: React.Dispatch>) => { + setIsCopied(true); + let messageText = text ?? ''; + if (content) { + messageText = content.reduce((acc, curr, i) => { + if (curr.type === ContentTypes.TEXT) { + return acc + curr.text.value + (i === content.length - 1 ? '' : '\n'); + } + return acc; + }, ''); + } + copy(messageText ?? ''); - setTimeout(() => { - setIsCopied(false); - }, 3000); - }; + setTimeout(() => { + setIsCopied(false); + }, 3000); + }, + [text, content], + ); return { ask,