"use client"; import { ChatBubbleIcon, PaperPlaneIcon } from "@radix-ui/react-icons"; import { useLeftMenuStore } from "_store/leftMenuStore"; import { useSession } from "next-auth/react"; import { Fragment, useEffect, useRef, useState } from "react"; import { cn } from "helpers/cn"; import { getConenctedUsers } from "helpers/axios"; import { asPublicUser, ConnectedAircraft, ConnectedDispatcher, PublicUser, } from "@repo/db"; export const Chat = () => { const { chatOpen, setChatOpen, sendMessage, addChat, chats, setOwnId, selectedChat, setSelectedChat, setChatNotification, } = useLeftMenuStore(); const [sending, setSending] = useState(false); const session = useSession(); const [addTabValue, setAddTabValue] = useState(""); const [message, setMessage] = useState(""); const [connectedUser, setConnectedUser] = useState< (ConnectedAircraft | ConnectedDispatcher)[] | null >(null); const timeout = useRef(null); useEffect(() => { if (!session.data?.user.id) return; setOwnId(session.data.user.id); }, [session, setOwnId]); useEffect(() => { const fetchConnectedUser = async () => { const data = await getConenctedUsers(); if (data) { const filteredConnectedUser = data.filter((user) => { return ( user.userId !== session.data?.user.id && !Object.keys(chats).includes(user.userId) ); }); setConnectedUser(filteredConnectedUser); } if (!addTabValue && data[0]) setAddTabValue(data[0].userId); }; timeout.current = setInterval(() => { fetchConnectedUser(); }, 1000000); fetchConnectedUser(); return () => { if (timeout.current) { clearInterval(timeout.current); timeout.current = null; console.log("cleared"); } }; }, [addTabValue, chats, session]); return (
{Object.values(chats).some((c) => c.notification) && ( )}
{chatOpen && (
{Object.keys(chats).map((userId) => { const chat = chats[userId]; if (!chat) return null; return ( `} checked={selectedChat === userId} onClick={() => { setChatNotification(userId, false); }} onChange={(e) => { if (e.target.checked) { // Handle tab change setSelectedChat(userId); } }} />
{chat.messages.map((chatMessage) => { const isSender = chatMessage.senderId === session.data?.user.id; return (

{new Date( chatMessage.timestamp, ).toLocaleTimeString()}

{chatMessage.text}
); })} {!chat.messages.length && (

Noch keine Nachrichten

)}
); })}
)}
); };