diff --git a/web/pages/embed/chat/readonly/index.tsx b/web/pages/embed/chat/readonly/index.tsx index 8a2ea39ee..282b9a851 100644 --- a/web/pages/embed/chat/readonly/index.tsx +++ b/web/pages/embed/chat/readonly/index.tsx @@ -1,4 +1,5 @@ import { useRecoilValue } from 'recoil'; +import { ErrorBoundary } from 'react-error-boundary'; import { ChatMessage } from '../../../../interfaces/chat-message.model'; import { ChatContainer } from '../../../../components/chat/ChatContainer/ChatContainer'; import { @@ -8,6 +9,7 @@ import { isChatAvailableSelector, } from '../../../../components/stores/ClientConfigStore'; import { Theme } from '../../../../components/theme/Theme'; +import { ComponentError } from '../../../../components/ui/ComponentError/ComponentError'; export default function ReadOnlyChatEmbed() { const currentUser = useRecoilValue(currentUserAtom); @@ -16,19 +18,26 @@ export default function ReadOnlyChatEmbed() { return ( <div> - <ClientConfigStore /> - <Theme /> - {currentUser && ( - <ChatContainer - messages={messages} - usernameToHighlight={currentUser.displayName} - chatUserId={currentUser.id} - isModerator={false} - showInput={false} - height="100vh" - chatAvailable={isChatAvailable} - /> - )} + <ErrorBoundary + // eslint-disable-next-line react/no-unstable-nested-components + fallbackRender={({ error }) => ( + <ComponentError componentName="ReadWriteChatEmbed" message={error.message} /> + )} + > + <ClientConfigStore /> + <Theme /> + {currentUser && ( + <ChatContainer + messages={messages} + usernameToHighlight={currentUser.displayName} + chatUserId={currentUser.id} + isModerator={false} + showInput={false} + height="100vh" + chatAvailable={isChatAvailable} + /> + )} + </ErrorBoundary> </div> ); } diff --git a/web/pages/embed/chat/readwrite/index.tsx b/web/pages/embed/chat/readwrite/index.tsx index 365e1edb6..6b7fbfc59 100644 --- a/web/pages/embed/chat/readwrite/index.tsx +++ b/web/pages/embed/chat/readwrite/index.tsx @@ -1,6 +1,7 @@ /* eslint-disable react/no-unknown-property */ import { useRecoilValue } from 'recoil'; import { useEffect } from 'react'; +import { ErrorBoundary } from 'react-error-boundary'; import { ChatMessage } from '../../../../interfaces/chat-message.model'; import { ChatContainer } from '../../../../components/chat/ChatContainer/ChatContainer'; import { @@ -17,6 +18,7 @@ import { ClientConfig } from '../../../../interfaces/client-config.model'; import { AppStateOptions } from '../../../../components/stores/application-state'; import { ServerStatus } from '../../../../interfaces/server-status.model'; import { Theme } from '../../../../components/theme/Theme'; +import { ComponentError } from '../../../../components/ui/ComponentError/ComponentError'; export default function ReadWriteChatEmbed() { const currentUser = useRecoilValue(currentUserAtom); @@ -47,22 +49,34 @@ export default function ReadWriteChatEmbed() { } `} </style> - <ClientConfigStore /> - <Theme /> - <Header name={headerText} chatAvailable chatDisabled={chatDisabled} online={videoAvailable} /> - {currentUser && ( - <div id="chat-container"> - <ChatContainer - messages={messages} - usernameToHighlight={currentUser.displayName} - chatUserId={currentUser.id} - isModerator={currentUser.isModerator} - showInput - height="92vh" - chatAvailable={isChatAvailable} - /> - </div> - )} + <ErrorBoundary + // eslint-disable-next-line react/no-unstable-nested-components + fallbackRender={({ error }) => ( + <ComponentError componentName="ReadWriteChatEmbed" message={error.message} /> + )} + > + <ClientConfigStore /> + <Theme /> + <Header + name={headerText} + chatAvailable + chatDisabled={chatDisabled} + online={videoAvailable} + /> + {currentUser && ( + <div id="chat-container"> + <ChatContainer + messages={messages} + usernameToHighlight={currentUser.displayName} + chatUserId={currentUser.id} + isModerator={currentUser.isModerator} + showInput + height="92vh" + chatAvailable={isChatAvailable} + /> + </div> + )} + </ErrorBoundary> </div> ); }