mirror of
				https://github.com/ItzCrazyKns/Perplexica.git
				synced 2025-11-03 20:28:14 +00:00 
			
		
		
		
	feat(chat-window): add error handling
This commit is contained in:
		@@ -3,6 +3,7 @@ import { Montserrat } from 'next/font/google';
 | 
				
			|||||||
import './globals.css';
 | 
					import './globals.css';
 | 
				
			||||||
import { cn } from '@/lib/utils';
 | 
					import { cn } from '@/lib/utils';
 | 
				
			||||||
import Sidebar from '@/components/Sidebar';
 | 
					import Sidebar from '@/components/Sidebar';
 | 
				
			||||||
 | 
					import { Toaster } from 'sonner';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const montserrat = Montserrat({
 | 
					const montserrat = Montserrat({
 | 
				
			||||||
  weight: ['300', '400', '500', '700'],
 | 
					  weight: ['300', '400', '500', '700'],
 | 
				
			||||||
@@ -26,6 +27,15 @@ export default function RootLayout({
 | 
				
			|||||||
    <html className="h-full" lang="en">
 | 
					    <html className="h-full" lang="en">
 | 
				
			||||||
      <body className={cn('h-full', montserrat.className)}>
 | 
					      <body className={cn('h-full', montserrat.className)}>
 | 
				
			||||||
        <Sidebar>{children}</Sidebar>
 | 
					        <Sidebar>{children}</Sidebar>
 | 
				
			||||||
 | 
					        <Toaster
 | 
				
			||||||
 | 
					          toastOptions={{
 | 
				
			||||||
 | 
					            unstyled: true,
 | 
				
			||||||
 | 
					            classNames: {
 | 
				
			||||||
 | 
					              toast:
 | 
				
			||||||
 | 
					                'bg-[#111111] text-white rounded-lg p-4 flex flex-row items-center space-x-2',
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					          }}
 | 
				
			||||||
 | 
					        />
 | 
				
			||||||
      </body>
 | 
					      </body>
 | 
				
			||||||
    </html>
 | 
					    </html>
 | 
				
			||||||
  );
 | 
					  );
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,6 +5,7 @@ import { Document } from '@langchain/core/documents';
 | 
				
			|||||||
import Navbar from './Navbar';
 | 
					import Navbar from './Navbar';
 | 
				
			||||||
import Chat from './Chat';
 | 
					import Chat from './Chat';
 | 
				
			||||||
import EmptyChat from './EmptyChat';
 | 
					import EmptyChat from './EmptyChat';
 | 
				
			||||||
 | 
					import { toast } from 'sonner';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export type Message = {
 | 
					export type Message = {
 | 
				
			||||||
  id: string;
 | 
					  id: string;
 | 
				
			||||||
@@ -92,17 +93,24 @@ const useSocket = (url: string) => {
 | 
				
			|||||||
        wsURL.search = searchParams.toString();
 | 
					        wsURL.search = searchParams.toString();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        const ws = new WebSocket(wsURL.toString());
 | 
					        const ws = new WebSocket(wsURL.toString());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ws.onopen = () => {
 | 
					        ws.onopen = () => {
 | 
				
			||||||
          console.log('[DEBUG] open');
 | 
					          console.log('[DEBUG] open');
 | 
				
			||||||
          setWs(ws);
 | 
					          setWs(ws);
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ws.onmessage = (e) => {
 | 
				
			||||||
 | 
					          const parsedData = JSON.parse(e.data);
 | 
				
			||||||
 | 
					          if (parsedData.type === 'error') {
 | 
				
			||||||
 | 
					            toast.error(parsedData.data);
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      connectWs();
 | 
					      connectWs();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return () => {
 | 
					    return () => {
 | 
				
			||||||
      1;
 | 
					 | 
				
			||||||
      ws?.close();
 | 
					      ws?.close();
 | 
				
			||||||
      console.log('[DEBUG] closed');
 | 
					      console.log('[DEBUG] closed');
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
@@ -150,6 +158,12 @@ const ChatWindow = () => {
 | 
				
			|||||||
    const messageHandler = (e: MessageEvent) => {
 | 
					    const messageHandler = (e: MessageEvent) => {
 | 
				
			||||||
      const data = JSON.parse(e.data);
 | 
					      const data = JSON.parse(e.data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if (data.type === 'error') {
 | 
				
			||||||
 | 
					        toast.error(data.data);
 | 
				
			||||||
 | 
					        setLoading(false);
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      if (data.type === 'sources') {
 | 
					      if (data.type === 'sources') {
 | 
				
			||||||
        sources = data.data;
 | 
					        sources = data.data;
 | 
				
			||||||
        if (!added) {
 | 
					        if (!added) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,6 +24,7 @@
 | 
				
			|||||||
    "react-dom": "^18",
 | 
					    "react-dom": "^18",
 | 
				
			||||||
    "react-text-to-speech": "^0.14.5",
 | 
					    "react-text-to-speech": "^0.14.5",
 | 
				
			||||||
    "react-textarea-autosize": "^8.5.3",
 | 
					    "react-textarea-autosize": "^8.5.3",
 | 
				
			||||||
 | 
					    "sonner": "^1.4.41",
 | 
				
			||||||
    "tailwind-merge": "^2.2.2",
 | 
					    "tailwind-merge": "^2.2.2",
 | 
				
			||||||
    "yet-another-react-lightbox": "^3.17.2",
 | 
					    "yet-another-react-lightbox": "^3.17.2",
 | 
				
			||||||
    "zod": "^3.22.4"
 | 
					    "zod": "^3.22.4"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2839,6 +2839,11 @@ slash@^3.0.0:
 | 
				
			|||||||
  resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
 | 
					  resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
 | 
				
			||||||
  integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
 | 
					  integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sonner@^1.4.41:
 | 
				
			||||||
 | 
					  version "1.4.41"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/sonner/-/sonner-1.4.41.tgz#ff085ae4f4244713daf294959beaa3e90f842d2c"
 | 
				
			||||||
 | 
					  integrity sha512-uG511ggnnsw6gcn/X+YKkWPo5ep9il9wYi3QJxHsYe7yTZ4+cOd1wuodOUmOpFuXL+/RE3R04LczdNCDygTDgQ==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
source-map-js@^1.0.2, source-map-js@^1.2.0:
 | 
					source-map-js@^1.0.2, source-map-js@^1.2.0:
 | 
				
			||||||
  version "1.2.0"
 | 
					  version "1.2.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af"
 | 
					  resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af"
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user