"use client"; import { ChatBubbleIcon, PaperPlaneIcon } from "@radix-ui/react-icons"; import { useLeftMenuStore } from "_store/leftMenuStore"; import { useSession } from "next-auth/react"; import { Fragment, useEffect, useState } from "react"; import { cn } from "@repo/shared-components"; import { asPublicUser } from "@repo/db"; import { useQuery } from "@tanstack/react-query"; import { getConnectedDispatcherAPI } from "_querys/dispatcher"; import { getConnectedAircraftsAPI } from "_querys/aircrafts"; import { useDispatchConnectionStore } from "_store/dispatch/connectionStore"; import { usePilotConnectionStore } from "_store/pilot/connectionStore"; export const Chat = () => { const { setReportTabOpen, chatOpen, setChatOpen, sendMessage, addChat, chats, setOwnId, selectedChat, setSelectedChat, setChatNotification, } = useLeftMenuStore(); const [sending, setSending] = useState(false); const session = useSession(); const [addTabValue, setAddTabValue] = useState("default"); const [message, setMessage] = useState(""); const dispatcherConnected = useDispatchConnectionStore((state) => state.status === "connected"); const pilotConnected = usePilotConnectionStore((state) => state.status === "connected"); const { data: dispatcher } = useQuery({ queryKey: ["dispatcher"], queryFn: () => getConnectedDispatcherAPI(), refetchInterval: 10000, }); const { data: aircrafts } = useQuery({ queryKey: ["aircrafts"], queryFn: () => getConnectedAircraftsAPI(), refetchInterval: 10000, enabled: dispatcherConnected, }); useEffect(() => { if (!session.data?.user.id) return; setOwnId(session.data?.user.id); }, [session.data?.user.id, setOwnId]); const filteredDispatcher = dispatcher?.filter((d) => d.userId !== session.data?.user.id); const filteredAircrafts = aircrafts?.filter( (a) => a.userId !== session.data?.user.id && dispatcherConnected, ); const btnActive = pilotConnected || dispatcherConnected; useEffect(() => { if (!btnActive) { setChatOpen(false); } }, [btnActive, setChatOpen]); return (
{Object.values(chats).some((c) => c.notification) && ( )}
{chatOpen && (

Chat

{Object.keys(chats).map((userId) => { const chat = chats[userId]; if (!chat) return null; return ( { if (selectedChat === userId) { setSelectedChat(null); return; } setSelectedChat(userId); }} > {chat.name} {chat.notification && }
{/* So macht man kein overflow handeling, weiß ich. Aber es funktioniert... */} {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

)}
); })}
{!selectedChat && (
Wähle einen Nutzer aus und drücke auf + um einen Chat zu starten
)} {selectedChat && (
)}
)}
); };