import { useEffect } from "react"; import { Box, Button, useTheme } from "@mui/material"; import SearchOutlinedIcon from '@mui/icons-material/SearchOutlined'; import HighlightOffOutlinedIcon from '@mui/icons-material/HighlightOffOutlined'; import { enqueueSnackbar } from 'notistack'; import { GetTicketsRequest, Ticket } from "@root/model/ticket"; import { setTickets, addOrUpdateTicket, useTicketStore } from "@root/stores/tickets"; import TicketItem from "./TicketItem"; import { getTickets, subscribeToAllTickets } from "@root/api/tickets"; import Chat from "./Chat"; export default function Support() { const theme = useTheme(); const tickets = useTicketStore(state => state.tickets); useEffect(function fetchTickets() { const getTicketsBody: GetTicketsRequest = { amt: 10, page: 0, status: "open", }; const controller = new AbortController(); getTickets({ body: getTicketsBody, signal: controller.signal, }).then(result => { console.log("GetTicketsResponse", result); setTickets(result.data); }).catch(error => { console.log("Error fetching tickets", error); enqueueSnackbar(error.message); }); return () => controller.abort(); }, []); useEffect(function subscribeToTickets() { const token = localStorage.getItem("AT"); if (!token) return; const unsubscribe = subscribeToAllTickets({ accessToken: token, onMessage(event) { console.log("SSE: ticket received:", event.data); try { const newTicket = JSON.parse(event.data) as Ticket; addOrUpdateTicket(newTicket); } catch (error) { console.log("Error parsing ticket SSE", error); } }, onError(event) { console.log("SSE Error:", event); } }); return () => { unsubscribe(); }; }, []); return ( {tickets.map(ticket => )} ); }