diff --git a/client/src/components/Chat/Messages/Content/MessageContent.tsx b/client/src/components/Chat/Messages/Content/MessageContent.tsx index 5f75fc3b74..c692fb7e1c 100644 --- a/client/src/components/Chat/Messages/Content/MessageContent.tsx +++ b/client/src/components/Chat/Messages/Content/MessageContent.tsx @@ -5,6 +5,7 @@ import Plugin from '~/components/Messages/Content/Plugin'; import Error from '~/components/Messages/Content/Error'; import { DelayedRender } from '~/components/ui'; import EditMessage from './EditMessage'; +import { useLocalize } from '~/hooks'; import Container from './Container'; import Markdown from './Markdown'; import { cn } from '~/utils'; @@ -14,6 +15,38 @@ export const ErrorMessage = ({ message, className = '', }: Pick) => { + const localize = useLocalize(); + if (text === 'Error connecting to server, try refreshing the page.') { + console.log('error message', message); + return ( + +
+
+

+ +

+
+
+ + } + > + + +
+ {localize('com_ui_error_connection')} +
+
+
+
+ ); + } return (
{ if (isEditing) { diff --git a/client/src/components/Chat/Messages/Message.tsx b/client/src/components/Chat/Messages/Message.tsx index d4d4652aa1..98fa5bdced 100644 --- a/client/src/components/Chat/Messages/Message.tsx +++ b/client/src/components/Chat/Messages/Message.tsx @@ -22,6 +22,7 @@ export default function Message(props: TMessageProps) { edit, index, isLast, + assistant, enterEdit, handleScroll, conversation, @@ -44,6 +45,8 @@ export default function Message(props: TMessageProps) { let messageLabel = ''; if (isCreatedByUser) { messageLabel = UsernameDisplay ? user?.name || user?.username : localize('com_user_message'); + } else if (assistant) { + messageLabel = assistant.name ?? 'Assistant'; } else { messageLabel = message.sender; } @@ -61,7 +64,7 @@ export default function Message(props: TMessageProps) {
- +
diff --git a/client/src/hooks/useDelayedRender.tsx b/client/src/hooks/useDelayedRender.tsx index 95d698d6bc..6524f47aed 100644 --- a/client/src/hooks/useDelayedRender.tsx +++ b/client/src/hooks/useDelayedRender.tsx @@ -1,14 +1,37 @@ -import { useState, useEffect } from 'react'; +import { useState, useRef, useEffect } from 'react'; import type { ReactNode } from 'react'; const useDelayedRender = (delay: number) => { const [delayed, setDelayed] = useState(true); + const timerPromiseRef = useRef | null>(null); + useEffect(() => { - const timeout = setTimeout(() => setDelayed(false), delay); - return () => clearTimeout(timeout); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - return (fn: () => ReactNode) => !delayed && fn(); + if (delayed) { + const timerPromise = new Promise((resolve) => { + const timeout = setTimeout(() => { + setDelayed(false); + resolve(); + }, delay); + + return () => { + clearTimeout(timeout); + }; + }); + + timerPromiseRef.current = timerPromise; + } + + return () => { + timerPromiseRef.current = null; + }; + }, [delay, delayed]); + + return (fn: () => ReactNode) => { + if (delayed && timerPromiseRef.current) { + throw timerPromiseRef.current; + } + return fn(); + }; }; export default useDelayedRender; diff --git a/client/src/localization/languages/Eng.ts b/client/src/localization/languages/Eng.ts index 7aaed40e87..a93878dd00 100644 --- a/client/src/localization/languages/Eng.ts +++ b/client/src/localization/languages/Eng.ts @@ -117,6 +117,7 @@ export default { com_ui_instructions: 'Instructions', com_ui_description: 'Description', com_ui_error: 'Error', + com_ui_error_connection: 'Error connecting to server, try refreshing the page.', com_ui_select: 'Select', com_ui_input: 'Input', com_ui_close: 'Close',