"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, useRef } 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"; import { Trash } from "lucide-react"; export const Chat = () => { const { removeChat, 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 [someChat, setSomeChat] = useState(false); const audioRef = useRef(null); 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 && !chats[d.userId], ); const filteredAircrafts = aircrafts?.filter( (a) => a.userId !== session.data?.user.id && !chats[a.userId], ); const btnActive = pilotConnected || dispatcherConnected; useEffect(() => { if (!filteredDispatcher?.length && !filteredAircrafts?.length) { setAddTabValue("default"); } }, [filteredDispatcher, filteredAircrafts]); useEffect(() => { if (!btnActive) { setChatOpen(false); } }, [btnActive, setChatOpen]); useEffect(() => { if (Object.values(chats).some((c) => c.notification)) { setSomeChat(true); if (audioRef.current) { audioRef.current.volume = 0.5; audioRef.current.play().catch(() => {}); } } else { setSomeChat(false); } }, [chats]); return (
); };