From 64eab93bdfbe55ac7b5f737b3ea86eb0d0a4ba17 Mon Sep 17 00:00:00 2001 From: Caio Bolognesi Date: Thu, 8 Jan 2026 15:10:05 -0300 Subject: [PATCH 1/2] fix(chat): guard against null message payloads --- src/pages/instance/Chat/messages.tsx | 26 +++++++++++++++++++------- src/translate/languages/en-US.json | 3 +++ src/translate/languages/es-ES.json | 5 +++++ src/translate/languages/fr-FR.json | 5 +++++ src/translate/languages/pt-BR.json | 5 +++++ 5 files changed, 37 insertions(+), 7 deletions(-) diff --git a/src/pages/instance/Chat/messages.tsx b/src/pages/instance/Chat/messages.tsx index e7eee2a..1450d2d 100644 --- a/src/pages/instance/Chat/messages.tsx +++ b/src/pages/instance/Chat/messages.tsx @@ -1,6 +1,7 @@ import { DropdownMenu, DropdownMenuTrigger } from "@radix-ui/react-dropdown-menu"; import { ArrowRightIcon, ChevronDownIcon, SparkleIcon, User, ZapIcon } from "lucide-react"; import { RefObject, useEffect, useMemo, useState } from "react"; +import { useTranslation } from "react-i18next"; import { useParams } from "react-router-dom"; import { Button } from "@/components/ui/button"; @@ -139,6 +140,17 @@ const getMessageText = (messageObj: any): string => { // Component to render different message types based on messageType const MessageContent = ({ message }: { message: Message }) => { + const { t } = useTranslation(); + + // Early return for invalid messages + if (!message?.message) { + return ( +
+ {t("chat.message.invalidOrUnsupported")} +
+ ); + } + const messageType = message.messageType as string; switch (messageType) { @@ -503,14 +515,14 @@ function Messages({ textareaRef, handleTextareaChange, textareaHeight, lastMessa // Group messages by date const groupedMessages = useMemo(() => { - if (!allMessages) return []; + if (!allMessages) return []; - // Sort messages by timestamp first - const sortedMessages = [...allMessages].sort((a, b) => { - const aTime = getMessageTimestamp(a).getTime(); - const bTime = getMessageTimestamp(b).getTime(); - return aTime - bTime; - }); + // Sort messages by timestamp first + const sortedMessages = [...allMessages].sort((a, b) => { + const aTime = getMessageTimestamp(a).getTime(); + const bTime = getMessageTimestamp(b).getTime(); + return aTime - bTime; + }); const grouped: { date: string; messages: Message[] }[] = []; let currentDate = ""; diff --git a/src/translate/languages/en-US.json b/src/translate/languages/en-US.json index f63d13e..5147dd7 100644 --- a/src/translate/languages/en-US.json +++ b/src/translate/languages/en-US.json @@ -46,6 +46,9 @@ } }, "chat": { + "message": { + "invalidOrUnsupported": "Invalid or unsupported message" + }, "media": { "attach": "Attach file", "document": "Document", diff --git a/src/translate/languages/es-ES.json b/src/translate/languages/es-ES.json index 1dc881f..3008a9e 100644 --- a/src/translate/languages/es-ES.json +++ b/src/translate/languages/es-ES.json @@ -45,6 +45,11 @@ "french": "Francés" } }, + "chat": { + "message": { + "invalidOrUnsupported": "Mensaje inválido o no soportado" + } + }, "sidebar": { "dashboard": "Visión General", "configurations": "Configuraciones", diff --git a/src/translate/languages/fr-FR.json b/src/translate/languages/fr-FR.json index 7b36399..c9f3dc2 100644 --- a/src/translate/languages/fr-FR.json +++ b/src/translate/languages/fr-FR.json @@ -44,6 +44,11 @@ "french": "Français" } }, + "chat": { + "message": { + "invalidOrUnsupported": "Message invalide ou non pris en charge" + } + }, "sidebar": { "dashboard": "Vue d'ensemble", "configurations": "Configurations", diff --git a/src/translate/languages/pt-BR.json b/src/translate/languages/pt-BR.json index 7943d44..cfbc85d 100644 --- a/src/translate/languages/pt-BR.json +++ b/src/translate/languages/pt-BR.json @@ -45,6 +45,11 @@ "french": "Francês" } }, + "chat": { + "message": { + "invalidOrUnsupported": "Mensagem inválida ou não suportada" + } + }, "sidebar": { "dashboard": "Visão Geral", "configurations": "Configurações", From 1697779ec3ef54675ac2100c24ae65f885aa2971 Mon Sep 17 00:00:00 2001 From: Caio Bolognesi Date: Thu, 8 Jan 2026 15:27:31 -0300 Subject: [PATCH 2/2] refactor(chat): improve readability of message sorting logic --- src/pages/instance/Chat/messages.tsx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/pages/instance/Chat/messages.tsx b/src/pages/instance/Chat/messages.tsx index 1450d2d..9dbc724 100644 --- a/src/pages/instance/Chat/messages.tsx +++ b/src/pages/instance/Chat/messages.tsx @@ -515,14 +515,14 @@ function Messages({ textareaRef, handleTextareaChange, textareaHeight, lastMessa // Group messages by date const groupedMessages = useMemo(() => { - if (!allMessages) return []; + if (!allMessages) return []; - // Sort messages by timestamp first - const sortedMessages = [...allMessages].sort((a, b) => { - const aTime = getMessageTimestamp(a).getTime(); - const bTime = getMessageTimestamp(b).getTime(); - return aTime - bTime; - }); + // Sort messages by timestamp first + const sortedMessages = [...allMessages].sort((a, b) => { + const aTime = getMessageTimestamp(a).getTime(); + const bTime = getMessageTimestamp(b).getTime(); + return aTime - bTime; + }); const grouped: { date: string; messages: Message[] }[] = []; let currentDate = "";