From a8f01cdfaf5e6677110ebef8ff82999a58863785 Mon Sep 17 00:00:00 2001 From: TanCodeX Date: Tue, 21 Jul 2026 15:06:08 +0530 Subject: [PATCH 1/2] refactor: strongly type AI chat messages and re-enable lint rules --- src/pages/aipage.tsx | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/pages/aipage.tsx b/src/pages/aipage.tsx index 39c2b808..c37336a5 100644 --- a/src/pages/aipage.tsx +++ b/src/pages/aipage.tsx @@ -1,11 +1,15 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ import { useState } from "react"; import { Bot, Send, User } from "lucide-react"; import { supabase } from "@/integrations/supabase/client"; import { API_BASE_URL } from "@/config/api"; +interface Message { + role: "user" | "assistant"; + content: string; +} + const AIPage = () => { - const [messages, setMessages] = useState([ + const [messages, setMessages] = useState([ { role: "assistant", content: @@ -22,12 +26,12 @@ const AIPage = () => { const prompt = input; // USER MESSAGE - const userMessage = { + const userMessage: Message = { role: "user", content: prompt, }; - setMessages((prev: any) => [ + setMessages((prev) => [ ...prev, userMessage, ]); @@ -38,7 +42,7 @@ const AIPage = () => { try { const { data: { session } } = await supabase.auth.getSession(); if (!session) { - setMessages((prev: any) => [ + setMessages((prev) => [ ...prev, { role: "assistant", @@ -49,7 +53,7 @@ const AIPage = () => { return; } - const formattedMessages = [...messages, userMessage].map((msg: any) => ({ + const formattedMessages = [...messages, userMessage].map((msg) => ({ role: msg.role, content: msg.content, })); @@ -73,7 +77,7 @@ const AIPage = () => { const data = await res.json(); const aiReply = data?.answer; - setMessages((prev: any) => [ + setMessages((prev) => [ ...prev, { role: "assistant", @@ -82,7 +86,7 @@ const AIPage = () => { ]); } catch (error) { console.error(error); - setMessages((prev: any) => [ + setMessages((prev) => [ ...prev, { role: "assistant", @@ -142,7 +146,7 @@ const AIPage = () => { {/* MESSAGES LAYER */}
- {messages.map((msg: any, index: number) => { + {messages.map((msg, index: number) => { const isUser = msg.role === "user"; return ( From 15c233495dd53f8ece9f03ce4b5d9286e991a47b Mon Sep 17 00:00:00 2001 From: TanCodeX Date: Tue, 21 Jul 2026 15:07:26 +0530 Subject: [PATCH 2/2] refactor: move useChatShortcuts hook initialization to after typing state definition in Chat page --- src/pages/Chat.tsx | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/pages/Chat.tsx b/src/pages/Chat.tsx index 8d02e158..7a061d44 100644 --- a/src/pages/Chat.tsx +++ b/src/pages/Chat.tsx @@ -123,14 +123,6 @@ const Chat = () => { const searchInputRef = useRef(null); - useChatShortcuts({ - searchInputRef, - items: filteredUsers, - selectedItem: selectedUser, - onSelect: selectUser, - onEscape: () => setShowConversationList(true), - getItemId: (user) => user.id, - }); const messagesEndRef = useRef(null); const typingTimeoutRef = useRef | null>(null); @@ -432,6 +424,15 @@ const Chat = () => { setTypingUserId(null); }, []); + useChatShortcuts({ + searchInputRef, + items: filteredUsers, + selectedItem: selectedUser, + onSelect: selectUser, + onEscape: () => setShowConversationList(true), + getItemId: (user) => user.id, + }); + if (!currentUser) { return (