"use client"; import { ChatBubbleIcon, PaperPlaneIcon } from "@radix-ui/react-icons"; import { leftMenuStore } from "_store/leftMenuStore"; import { useSession } from "next-auth/react"; import { Fragment, useEffect, useRef, useState } from "react"; import { Dispatcher, getDispatcher, } from "dispatch/_components/navbar/_components/action"; import { cn } from "helpers/cn"; export const Chat = () => { const { chatOpen, setChatOpen, sendMessage, addChat, chats, setOwnId, selectedChat, setSelectedChat, setChatNotification, } = leftMenuStore(); const [sending, setSending] = useState(false); const session = useSession(); const [addTabValue, setAddTabValue] = useState(""); const [message, setMessage] = useState(""); const [dispatcher, setDispatcher] = useState(null); const timeout = useRef(null); useEffect(() => { if (!session.data?.user.id) return; setOwnId(session.data.user.id); }, [session]); useEffect(() => { const fetchDispatcher = async () => { const data = await getDispatcher(); if (data) { const filteredDispatcher = data.filter((user) => { return ( user.userId !== session.data?.user.id && !Object.keys(chats).includes(user.userId) ); }); setDispatcher(filteredDispatcher); } if (!addTabValue && data[0]) setAddTabValue(data[0].userId); }; timeout.current = setInterval(() => { fetchDispatcher(); }, 1000000); fetchDispatcher(); return () => { if (timeout.current) { clearInterval(timeout.current); timeout.current = null; console.log("cleared"); } }; }, [addTabValue, chats]); 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

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