infoalloggi-monorepo/apps/infoalloggi/src/components/chat/chat.tsx

54 lines
1.5 KiB
TypeScript
Raw Normal View History

2025-08-04 17:45:44 +02:00
"use client";
import type { ChatsChatid } from "~/schemas/public/Chats";
import ChatBottombar from "~/components/chat/chat-bottombar";
import { ChatList } from "~/components/chat/chat-list";
import ChatTopbar from "~/components/chat/chat-topbar";
import { useLiveChat } from "~/hooks/chatHooks";
import { api } from "~/utils/api";
import type { Session } from "~/server/api/trpc";
import { memo } from "react";
const Chat = memo(
({ chatId, userData }: { chatId: ChatsChatid; userData: Session }) => {
const liveChat = useLiveChat(chatId, userData);
const [userinfo] = api.chat.getUserInfosByChat.useSuspenseQuery({
chatId,
});
return (
<div className="flex h-full w-full flex-col justify-between">
<div className="shrink-0">
<ChatTopbar
chatId={chatId}
userData={userData}
chatUserData={userinfo}
onlineStatus={liveChat.onlineUsers}
/>
</div>
<ChatList
chatId={chatId}
userData={userData}
messages={liveChat.messages}
query={liveChat.query}
typingStatus={liveChat.typingStatus}
/>
<div className="shrink-0 border-t">
<ChatBottombar
chatId={chatId}
userData={userData}
chatUserData={userinfo}
/>
</div>
</div>
);
},
(prevProps, nextProps) =>
prevProps.chatId === nextProps.chatId &&
prevProps.userData.id === nextProps.userData.id,
);
Chat.displayName = "Chat";
export default Chat;