From 1eb5cb9209c3573a1ab8060ccdd10ed845b80df3 Mon Sep 17 00:00:00 2001 From: Matias Minoni Date: Thu, 13 Aug 2026 12:59:35 -0300 Subject: [PATCH] fix(chat): display LID conversations --- src/lib/queries/chat/findChat.ts | 9 +++++---- src/lib/queries/chat/findChats.ts | 22 +++++++++++++++++++--- src/lib/whatsapp/jid.ts | 6 ++++++ src/pages/instance/Chat/index.tsx | 5 +++-- 4 files changed, 33 insertions(+), 9 deletions(-) create mode 100644 src/lib/whatsapp/jid.ts diff --git a/src/lib/queries/chat/findChat.ts b/src/lib/queries/chat/findChat.ts index f1fa440..56c4279 100644 --- a/src/lib/queries/chat/findChat.ts +++ b/src/lib/queries/chat/findChat.ts @@ -2,6 +2,7 @@ import { useQuery } from "@tanstack/react-query"; import { api } from "../api"; import { UseQueryParams } from "../types"; +import { FindChatsApiChat, normalizeChat } from "./findChats"; import { FindChatResponse } from "./types"; interface IParams { @@ -11,14 +12,14 @@ interface IParams { const queryKey = (params: Partial) => ["chats", "findChats", JSON.stringify(params)]; -export const findChat = async ({ instanceName, remoteJid }: IParams) => { - const response = await api.post(`/chat/findChats/${instanceName}`, { +export const findChat = async ({ instanceName, remoteJid }: IParams): Promise => { + const response = await api.post(`/chat/findChats/${instanceName}`, { where: { remoteJid }, }); if (Array.isArray(response.data)) { - return response.data[0]; + return normalizeChat(response.data[0]); } - return response.data; + return normalizeChat(response.data); }; export const useFindChat = (props: UseQueryParams & Partial) => { diff --git a/src/lib/queries/chat/findChats.ts b/src/lib/queries/chat/findChats.ts index 50e5ef4..7cd01b7 100644 --- a/src/lib/queries/chat/findChats.ts +++ b/src/lib/queries/chat/findChats.ts @@ -4,17 +4,33 @@ import { api } from "../api"; import { UseQueryParams } from "../types"; import { FindChatsResponse } from "./types"; +export type FindChatsApiChat = Omit, "id"> & + Pick & { + id?: string | null; + }; + interface IParams { instanceName: string; } const queryKey = (params: Partial) => ["chats", "findChats", JSON.stringify(params)]; -export const findChats = async ({ instanceName }: IParams) => { - const response = await api.post(`/chat/findChats/${instanceName}`, { +export const normalizeChat = (chat: FindChatsApiChat): FindChatsResponse[number] => ({ + ...chat, + id: chat.id ?? chat.remoteJid, + pushName: chat.pushName ?? "", + labels: chat.labels ?? null, + profilePicUrl: chat.profilePicUrl ?? "", + createdAt: chat.createdAt ?? "", + updatedAt: chat.updatedAt ?? "", + instanceId: chat.instanceId ?? "", +}); + +export const findChats = async ({ instanceName }: IParams): Promise => { + const response = await api.post(`/chat/findChats/${instanceName}`, { where: {}, }); - return response.data; + return response.data.map(normalizeChat); }; export const useFindChats = (props: UseQueryParams & Partial) => { diff --git a/src/lib/whatsapp/jid.ts b/src/lib/whatsapp/jid.ts new file mode 100644 index 0000000..d6a90c8 --- /dev/null +++ b/src/lib/whatsapp/jid.ts @@ -0,0 +1,6 @@ +const CONTACT_JID_SUFFIXES = ["@s.whatsapp.net", "@lid"] as const; +const GROUP_JID_SUFFIX = "@g.us"; + +export const isContactJid = (remoteJid: string): boolean => CONTACT_JID_SUFFIXES.some((suffix) => remoteJid.endsWith(suffix)); + +export const isGroupJid = (remoteJid: string): boolean => remoteJid.endsWith(GROUP_JID_SUFFIX); diff --git a/src/pages/instance/Chat/index.tsx b/src/pages/instance/Chat/index.tsx index 07ff877..3dfe8e7 100644 --- a/src/pages/instance/Chat/index.tsx +++ b/src/pages/instance/Chat/index.tsx @@ -12,6 +12,7 @@ import { useInstance } from "@/contexts/InstanceContext"; import { useFindChats } from "@/lib/queries/chat/findChats"; import { getToken, TOKEN_ID } from "@/lib/queries/token"; import { cn } from "@/lib/utils"; +import { isContactJid, isGroupJid } from "@/lib/whatsapp/jid"; import { connectSocket, disconnectSocket } from "@/services/websocket/socket"; @@ -114,8 +115,8 @@ function Chat() { const visibleChats = useMemo(() => { const isContacts = kind === "contacts"; - const filtered = allChats.filter((c) => - isContacts ? c.remoteJid.includes("@s.whatsapp.net") : c.remoteJid.includes("@g.us"), + const filtered = allChats.filter((chat) => + isContacts ? isContactJid(chat.remoteJid) : isGroupJid(chat.remoteJid), ); if (!search.trim()) return filtered; const q = search.toLowerCase();