From 8041c83d4d5d6afc0af845f07dcfcc7b54605c7a Mon Sep 17 00:00:00 2001 From: PxlLoewe <72106766+PxlLoewe@users.noreply.github.com> Date: Tue, 29 Apr 2025 12:32:02 -0700 Subject: [PATCH 1/5] added onClick events for marker-cluster --- apps/dispatch/app/_store/chatStore.ts | 4 ++ apps/dispatch/app/_store/mapStore.ts | 1 - apps/dispatch/app/_store/reportStore.ts | 32 ----------- .../app/dispatch/_components/left/Chat.tsx | 20 ++++--- .../app/dispatch/_components/left/Report.tsx | 33 +++++++----- .../_components/map/AircraftMarker.tsx | 2 +- .../_components/map/MissionMarkers.tsx | 2 +- .../map/_components/MarkerCluster.tsx | 51 +++++++++++++++--- .../_components/navbar/_components/action.ts | 7 --- grafana/grafana.db | Bin 1122304 -> 1122304 bytes 10 files changed, 83 insertions(+), 69 deletions(-) delete mode 100644 apps/dispatch/app/_store/reportStore.ts diff --git a/apps/dispatch/app/_store/chatStore.ts b/apps/dispatch/app/_store/chatStore.ts index 38a3619a..61d8df3a 100644 --- a/apps/dispatch/app/_store/chatStore.ts +++ b/apps/dispatch/app/_store/chatStore.ts @@ -3,6 +3,8 @@ import { ChatMessage } from "@repo/db"; import { socket } from "dispatch/socket"; interface ChatStore { + reportTabOpen: boolean; + setReportTabOpen: (open: boolean) => void; ownId: null | string; selectedChat: string | null; chatOpen: boolean; @@ -20,6 +22,8 @@ interface ChatStore { } export const useChatStore = create((set, get) => ({ + reportTabOpen: false, + setReportTabOpen: (open: boolean) => set({ reportTabOpen: open }), ownId: null, chatOpen: false, selectedChat: null, diff --git a/apps/dispatch/app/_store/mapStore.ts b/apps/dispatch/app/_store/mapStore.ts index 7a6c681b..ac6c2ec8 100644 --- a/apps/dispatch/app/_store/mapStore.ts +++ b/apps/dispatch/app/_store/mapStore.ts @@ -1,4 +1,3 @@ -import { popup } from "leaflet"; import { create } from "zustand"; interface MapStore { diff --git a/apps/dispatch/app/_store/reportStore.ts b/apps/dispatch/app/_store/reportStore.ts deleted file mode 100644 index 43d7e854..00000000 --- a/apps/dispatch/app/_store/reportStore.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { create } from "zustand"; -import { PrismaClient } from "@prisma/client"; - -interface ReportStore { - ownId: null | string; - reportOpen: boolean; - setReportOpen: (open: boolean) => void; - setOwnId: (id: string) => void; -} - -export const useReportStore = create((set) => ({ - ownId: null, - reportOpen: false, - setReportOpen: (open: boolean) => set({ reportOpen: open }), - setOwnId: (id: string) => set({ ownId: id }), -})); - -const prisma = new PrismaClient(); - -export const sendReport = async (receiverId: string, message: string) => { - try { - await prisma.reportMessage.create({ - data: { - receiverId, - message, - }, - }); - } catch (error) { - console.error("Failed to send report:", error); - throw error; - } -}; diff --git a/apps/dispatch/app/dispatch/_components/left/Chat.tsx b/apps/dispatch/app/dispatch/_components/left/Chat.tsx index 15dd0f62..29647421 100644 --- a/apps/dispatch/app/dispatch/_components/left/Chat.tsx +++ b/apps/dispatch/app/dispatch/_components/left/Chat.tsx @@ -3,16 +3,20 @@ import { ChatBubbleIcon, PaperPlaneIcon } from "@radix-ui/react-icons"; import { useChatStore } from "_store/chatStore"; import { useSession } from "next-auth/react"; import { Fragment, useEffect, useRef, useState } from "react"; -import { - Dispatcher, - getDispatcher, -} from "dispatch/_components/navbar/_components/action"; +import { Dispatcher } from "dispatch/_components/navbar/_components/action"; import { cn } from "helpers/cn"; -import { useReportStore } from "_store/reportStore"; + +export const getDispatcher = async () => { + const res = await fetch(` + ${process.env.NEXT_PUBLIC_DISPATCH_SERVER_URL}/dispatcher`); + const data = await res.json(); + return data as Dispatcher[]; +}; export const Chat = () => { - const { setReportOpen } = useReportStore(); const { + setReportTabOpen, + reportTabOpen, chatOpen, setChatOpen, sendMessage, @@ -62,7 +66,7 @@ export const Chat = () => { console.log("cleared"); } }; - }, [addTabValue, chats]); + }, [addTabValue, chats, session.data?.user.id]); return (
@@ -73,7 +77,7 @@ export const Chat = () => {
- {reportOpen && ( + {reportTabOpen && (
{ e.preventDefault(); if (message.length < 1 || !selectedPlayer) return; setSending(true); - sendReport(selectedPlayer, message) + fetch("/api/dispatch/report", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + userId: selectedPlayer, + message: message, + }), + }) .then(() => { setMessage(""); setSending(false); diff --git a/apps/dispatch/app/dispatch/_components/map/AircraftMarker.tsx b/apps/dispatch/app/dispatch/_components/map/AircraftMarker.tsx index dc462f0f..e29a3b26 100644 --- a/apps/dispatch/app/dispatch/_components/map/AircraftMarker.tsx +++ b/apps/dispatch/app/dispatch/_components/map/AircraftMarker.tsx @@ -356,7 +356,7 @@ const AircraftMarker = ({ aircraft }: { aircraft: Aircraft }) => { /> {openAircraftMarker.some((m) => m.id === aircraft.id) && !hideMarker && ( { /> {openMissionMarker.some((m) => m.id === mission.id) && !hideMarker && ( { const { anchor } = useSmartPopup(); + const { setOpenAircraftMarker, setOpenMissionMarker } = useMapStore( + (state) => state, + ); + const map = useMap(); let borderColor = ""; @@ -33,7 +38,9 @@ const PopupContent = ({ } } else if (anchor.includes("bottom")) { if (aircrafts.length > 0) { - borderColor = FMS_STATUS_TEXT_COLORS[aircrafts[0]!.fmsStatus] || "white"; + borderColor = + FMS_STATUS_TEXT_COLORS[aircrafts[aircrafts.length - 1]!.fmsStatus] || + "white"; } else if (missions.length > 0) { borderColor = MISSION_STATUS_TEXT_COLORS[missions[0]!.state]; } @@ -44,7 +51,7 @@ const PopupContent = ({
- + { + setOpenMissionMarker({ + open: [ + { + id: mission.id, + tab: "home", + }, + ], + close: [], + }); + map.setView([mission.addressLat, mission.addressLng], 12, { + animate: true, + }); + }} + > {mission.missionKeywordAbbreviation}
@@ -79,10 +103,24 @@ const PopupContent = ({ {aircrafts.map((aircraft) => (
{ + setOpenAircraftMarker({ + open: [ + { + id: aircraft.id, + tab: "aircraft", + }, + ], + close: [], + }); + map.setView([aircraft.location.lat, aircraft.location.lng], 12, { + animate: true, + }); + }} > { position={[c.lat, c.lng]} autoPan={false} autoClose={false} + className="w-[202px]" > -
- -
+ ))} diff --git a/apps/dispatch/app/dispatch/_components/navbar/_components/action.ts b/apps/dispatch/app/dispatch/_components/navbar/_components/action.ts index 6daa4544..f0a09620 100644 --- a/apps/dispatch/app/dispatch/_components/navbar/_components/action.ts +++ b/apps/dispatch/app/dispatch/_components/navbar/_components/action.ts @@ -9,10 +9,3 @@ export interface Dispatcher { name: string; socketId: string; } - -export const getDispatcher = async () => { - const res = await fetch(` - ${process.env.NEXT_PUBLIC_DISPATCH_SERVER_URL}/dispatcher`); - const data = await res.json(); - return data as Dispatcher[]; -}; diff --git a/grafana/grafana.db b/grafana/grafana.db index 302518c8ea897b59a9d4084fad26f42aee89f3ba..9f0a88f6e9fc9254176149109ca7354f5adfb09c 100644 GIT binary patch delta 320 zcmZoT;L>owWr8%L^F$eEM(2$Q-*nkz<;0ksIj1*n<`kYTV8zAJT&~w%uEz+(OhC*G z#4JF}3dC$c%)Y%`k3)=+M?6DNg^z)OLD7FnAoAo)ASYKoaYV4bS zOP@oYl|O?gaP9Vg`W(yoS!HFIZ5gLO)aQ_xe#oA~iH$*kfr0P&WowWr8%L;zSu|M#YT@-*nkzK=`OdkUSgQ6t|%k+MG4l$Mt?nUv_H|ujKv7XD|(Y!MK zmOh6(D_;ipzPj!I^f{LEv&zUY+cHjnsLvrW{g6F}6B{Gna|XWWn*|+i@@;?Y$Dzo` z#>l^mfqxfJWCQ>9UGW@V0>~oMchz%vZD%Q9{J}r{Pd^6-gxUUQKF9Vy^EnwmumJ7n z-O9+wEU=wr0oU=R+@>K0CRRpfRtDx#(+~P^ONyK58ks7<#Pke}O$^N}49!g2+1$8+ Um Date: Tue, 29 Apr 2025 13:57:48 -0700 Subject: [PATCH 2/5] Fixed Marker collision --- apps/dispatch/app/_components/SmartPopup.tsx | 22 ++++++++----------- .../_components/map/AircraftMarker.tsx | 3 +++ .../_components/map/MissionMarkers.tsx | 3 +++ .../map/_components/MarkerCluster.tsx | 4 +++- 4 files changed, 18 insertions(+), 14 deletions(-) diff --git a/apps/dispatch/app/_components/SmartPopup.tsx b/apps/dispatch/app/_components/SmartPopup.tsx index 3ff5b0dc..068f3077 100644 --- a/apps/dispatch/app/_components/SmartPopup.tsx +++ b/apps/dispatch/app/_components/SmartPopup.tsx @@ -24,7 +24,7 @@ export const useSmartPopup = () => { export const calculateAnchor = ( id: string, mode: "popup" | "marker", - ignoreMarker?: boolean, + options?: { ignoreMarker?: boolean; ignoreCluster?: boolean }, ) => { const otherMarkers = document.querySelectorAll(".map-collision"); // get markers and check if they are overlapping @@ -37,7 +37,8 @@ export const calculateAnchor = ( const marksersInCluster = Array.from(otherMarkers).filter((marker) => { if (mode === "popup" && marker.id === `marker-${id}`) return false; - if (ignoreMarker && marker.id.startsWith("marker")) return false; + if (options?.ignoreMarker && marker.id.startsWith("marker")) return false; + if (options?.ignoreCluster && marker.id.startsWith("cluster")) return false; const rect1 = (marker as HTMLElement).getBoundingClientRect(); const rect2 = (ownMarker as HTMLElement).getBoundingClientRect(); @@ -76,12 +77,6 @@ export const calculateAnchor = ( centerOfOverlappingMarkers.x /= markersPosition.length; centerOfOverlappingMarkers.y /= markersPosition.length; - if (id == "2") { - console.log("markersInCluser", marksersInCluster); - console.log("ownMarkerPosition", ownMarkerPosition); - console.log("centerOfOverlappingMarkers", centerOfOverlappingMarkers); - } - if (marksersInCluster.length > 1) { if (centerOfOverlappingMarkers.y < ownMarkerPosition.y) { if (centerOfOverlappingMarkers.x > ownMarkerPosition.x) { @@ -107,24 +102,25 @@ export interface SmartPopupRef { } export const SmartPopup = ( - props: PopupProps & { ignoreMarker?: boolean } & RefAttributes & { + props: PopupProps & { + options?: { ignoreMarker?: boolean; ignoreCluster?: boolean }; + } & RefAttributes & { smartPopupRef?: Ref; id: string; wrapperClassName?: string; }, ) => { const [showContent, setShowContent] = useState(false); - const { smartPopupRef, id, className, wrapperClassName, ignoreMarker } = - props; + const { smartPopupRef, id, className, wrapperClassName, options } = props; const [anchor, setAnchor] = useState< "topleft" | "topright" | "bottomleft" | "bottomright" >("topleft"); const handleConflict = useCallback(() => { - const newAnchor = calculateAnchor(id, "popup", ignoreMarker); + const newAnchor = calculateAnchor(id, "popup", options); setAnchor(newAnchor); - }, [id, ignoreMarker]); + }, [id, options]); useImperativeHandle(smartPopupRef, () => ({ handleConflict, diff --git a/apps/dispatch/app/dispatch/_components/map/AircraftMarker.tsx b/apps/dispatch/app/dispatch/_components/map/AircraftMarker.tsx index e29a3b26..89cb72e1 100644 --- a/apps/dispatch/app/dispatch/_components/map/AircraftMarker.tsx +++ b/apps/dispatch/app/dispatch/_components/map/AircraftMarker.tsx @@ -356,6 +356,9 @@ const AircraftMarker = ({ aircraft }: { aircraft: Aircraft }) => { /> {openAircraftMarker.some((m) => m.id === aircraft.id) && !hideMarker && ( { /> {openMissionMarker.some((m) => m.id === mission.id) && !hideMarker && ( { <> {cluster.map((c, i) => ( Date: Tue, 29 Apr 2025 19:38:44 -0700 Subject: [PATCH 3/5] Fixed marker --- apps/dispatch/app/_components/SmartPopup.tsx | 15 +++++++++------ .../dispatch/_components/map/AircraftMarker.tsx | 6 +++--- .../dispatch/_components/map/MissionMarkers.tsx | 11 +++++++---- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/apps/dispatch/app/_components/SmartPopup.tsx b/apps/dispatch/app/_components/SmartPopup.tsx index 068f3077..baaab806 100644 --- a/apps/dispatch/app/_components/SmartPopup.tsx +++ b/apps/dispatch/app/_components/SmartPopup.tsx @@ -26,6 +26,7 @@ export const calculateAnchor = ( mode: "popup" | "marker", options?: { ignoreMarker?: boolean; ignoreCluster?: boolean }, ) => { + console.log("calculateAnchor", id, mode, options); const otherMarkers = document.querySelectorAll(".map-collision"); // get markers and check if they are overlapping const ownMarker = @@ -36,9 +37,9 @@ export const calculateAnchor = ( if (!otherMarkers || !ownMarker) return "topleft"; const marksersInCluster = Array.from(otherMarkers).filter((marker) => { - if (mode === "popup" && marker.id === `marker-${id}`) return false; - if (options?.ignoreMarker && marker.id.startsWith("marker")) return false; - if (options?.ignoreCluster && marker.id.startsWith("cluster")) return false; + if (mode === "popup" && marker.id === `marker-domain-${id}`) return false; + if (options?.ignoreMarker && marker.id.includes("marker")) return false; + if (options?.ignoreCluster && marker.id.includes("cluster")) return false; const rect1 = (marker as HTMLElement).getBoundingClientRect(); const rect2 = (ownMarker as HTMLElement).getBoundingClientRect(); @@ -51,6 +52,8 @@ export const calculateAnchor = ( ); }); + if (id.includes("13")) console.log(ownMarker, marksersInCluster); + // get the center of all overlapping markers const markersPosition = marksersInCluster.map((marker) => { const rect = (marker as HTMLElement).getBoundingClientRect(); @@ -102,9 +105,9 @@ export interface SmartPopupRef { } export const SmartPopup = ( - props: PopupProps & { - options?: { ignoreMarker?: boolean; ignoreCluster?: boolean }; - } & RefAttributes & { + props: PopupProps & + RefAttributes & { + options?: { ignoreMarker?: boolean; ignoreCluster?: boolean }; smartPopupRef?: Ref; id: string; wrapperClassName?: string; diff --git a/apps/dispatch/app/dispatch/_components/map/AircraftMarker.tsx b/apps/dispatch/app/dispatch/_components/map/AircraftMarker.tsx index 89cb72e1..3c8ef179 100644 --- a/apps/dispatch/app/dispatch/_components/map/AircraftMarker.tsx +++ b/apps/dispatch/app/dispatch/_components/map/AircraftMarker.tsx @@ -266,7 +266,7 @@ const AircraftMarker = ({ aircraft }: { aircraft: Aircraft }) => { >("topleft"); const handleConflict = useCallback(() => { - const newAnchor = calculateAnchor(aircraft.id, "marker"); + const newAnchor = calculateAnchor(`aircraft-${aircraft.id}`, "marker"); setAnchor(newAnchor); }, [aircraft.id]); @@ -296,7 +296,7 @@ const AircraftMarker = ({ aircraft }: { aircraft: Aircraft }) => { anchor: "topleft" | "topright" | "bottomleft" | "bottomright", ) => { return `
{ data-id="${aircraft.id}" data-anchor-lat="${aircraft.location.lat}" data-anchor-lng="${aircraft.location.lng}" - id="marker-domain-${aircraft.id}" + id="marker-domain-aircraft-${aircraft.id}" class="${cn( "map-collision absolute w-[200%] h-[200%] top-0 left-0 transform pointer-events-none", anchor.includes("left") && "-translate-x-1/2", diff --git a/apps/dispatch/app/dispatch/_components/map/MissionMarkers.tsx b/apps/dispatch/app/dispatch/_components/map/MissionMarkers.tsx index 07263e28..d90e7427 100644 --- a/apps/dispatch/app/dispatch/_components/map/MissionMarkers.tsx +++ b/apps/dispatch/app/dispatch/_components/map/MissionMarkers.tsx @@ -258,7 +258,10 @@ const MissionMarker = ({ mission }: { mission: Mission }) => { >("topleft"); const handleConflict = useCallback(() => { - const newAnchor = calculateAnchor(mission.id.toString(), "marker"); + const newAnchor = calculateAnchor( + `mission-${mission.id.toString()}`, + "marker", + ); setAnchor(newAnchor); }, [mission.id]); @@ -288,7 +291,7 @@ const MissionMarker = ({ mission }: { mission: Mission }) => { anchor: "topleft" | "topright" | "bottomleft" | "bottomright", ) => { return `
{ data-anchor-lat="${mission.addressLat}" data-anchor-lng="${mission.addressLng}" data-id="${mission.id}" - id="marker-domain-${mission.id}" + id="marker-domain-mission-${mission.id}" class="${cn( "map-collision absolute w-[200%] h-[200%] top-0 left-0 transform pointer-events-none", anchor.includes("left") && "-translate-x-1/2", @@ -345,7 +348,7 @@ const MissionMarker = ({ mission }: { mission: Mission }) => { options={{ ignoreCluster: true, }} - id={`cluster-${mission.id.toString()}`} + id={`mission-${mission.id.toString()}`} ref={popupRef} position={[mission.addressLat, mission.addressLng]} autoClose={false} -- 2.49.1 From 8e79c27444505caee8f7759048ec3150bfac47bb Mon Sep 17 00:00:00 2001 From: PxlLoewe <72106766+PxlLoewe@users.noreply.github.com> Date: Tue, 29 Apr 2025 21:22:02 -0700 Subject: [PATCH 4/5] Fixed marker-cluster position --- apps/dispatch/app/_components/SmartPopup.tsx | 3 -- apps/dispatch/app/_store/missionsStore.ts | 12 ++--- .../_components/map/AircraftMarker.tsx | 1 - .../map/_components/MarkerCluster.tsx | 44 +++++++++---------- 4 files changed, 24 insertions(+), 36 deletions(-) diff --git a/apps/dispatch/app/_components/SmartPopup.tsx b/apps/dispatch/app/_components/SmartPopup.tsx index baaab806..975211d7 100644 --- a/apps/dispatch/app/_components/SmartPopup.tsx +++ b/apps/dispatch/app/_components/SmartPopup.tsx @@ -26,7 +26,6 @@ export const calculateAnchor = ( mode: "popup" | "marker", options?: { ignoreMarker?: boolean; ignoreCluster?: boolean }, ) => { - console.log("calculateAnchor", id, mode, options); const otherMarkers = document.querySelectorAll(".map-collision"); // get markers and check if they are overlapping const ownMarker = @@ -52,8 +51,6 @@ export const calculateAnchor = ( ); }); - if (id.includes("13")) console.log(ownMarker, marksersInCluster); - // get the center of all overlapping markers const markersPosition = marksersInCluster.map((marker) => { const rect = (marker as HTMLElement).getBoundingClientRect(); diff --git a/apps/dispatch/app/_store/missionsStore.ts b/apps/dispatch/app/_store/missionsStore.ts index 95dc59f8..89cf1378 100644 --- a/apps/dispatch/app/_store/missionsStore.ts +++ b/apps/dispatch/app/_store/missionsStore.ts @@ -3,6 +3,7 @@ import { MissionOptionalDefaults } from "@repo/db/zod"; import { serverApi } from "helpers/axios"; import { create } from "zustand"; import { toast } from "react-hot-toast"; +import axios from "axios"; interface MissionStore { missions: Mission[]; @@ -17,15 +18,8 @@ export const useMissionsStore = create((set) => ({ missions: [], setMissions: (missions) => set({ missions }), createMission: async (mission) => { - const res = await fetch("/api/mission", { - method: "PUT", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify(mission), - }); - if (!res.ok) return new Error("Failed to create mission"); - const data = await res.json(); + const { data } = await serverApi.put("/mission", mission); + set((state) => ({ missions: [...state.missions, data] })); return data; }, diff --git a/apps/dispatch/app/dispatch/_components/map/AircraftMarker.tsx b/apps/dispatch/app/dispatch/_components/map/AircraftMarker.tsx index 3c8ef179..2696ba4c 100644 --- a/apps/dispatch/app/dispatch/_components/map/AircraftMarker.tsx +++ b/apps/dispatch/app/dispatch/_components/map/AircraftMarker.tsx @@ -224,7 +224,6 @@ const AircraftPopupContent = ({ aircraft }: { aircraft: Aircraft }) => { }; const AircraftMarker = ({ aircraft }: { aircraft: Aircraft }) => { - const aircrafts = useAircraftsStore((state) => state.aircrafts); const [hideMarker, setHideMarker] = useState(false); const map = useMap(); const markerRef = useRef(null); diff --git a/apps/dispatch/app/dispatch/_components/map/_components/MarkerCluster.tsx b/apps/dispatch/app/dispatch/_components/map/_components/MarkerCluster.tsx index 08bb420d..b49385fd 100644 --- a/apps/dispatch/app/dispatch/_components/map/_components/MarkerCluster.tsx +++ b/apps/dispatch/app/dispatch/_components/map/_components/MarkerCluster.tsx @@ -216,36 +216,34 @@ export const MarkerCluster = () => { } }); - setCluster((prev) => { - return prev.map((c) => { - const aircraftPos = c.aircrafts.map((a) => [ - a.location.lat, - a.location.lng, - ]); - const missionPos = c.missions.map((m) => [ - m.addressLat, - m.addressLng, - ]); - const allPos = [...aircraftPos, ...missionPos]; + const clusterWithAvgPos = newCluster.map((c) => { + const aircraftPos = c.aircrafts.map((a) => [ + a.location.lat, + a.location.lng, + ]); + const missionPos = c.missions.map((m) => [m.addressLat, m.addressLng]); + const allPos = [...aircraftPos, ...missionPos]; - // Calculate the average position of all markers in the cluster - const avgLat = - allPos.reduce((sum, pos) => sum + pos[0]!, 0) / allPos.length; - const avgLng = - allPos.reduce((sum, pos) => sum + pos[1]!, 0) / allPos.length; + // Calculate the average position of all markers in the cluster - return { - ...c, - lat: avgLat, - lng: avgLng, - }; - }); + const avgLat = + allPos.reduce((sum, pos) => sum + pos[0]!, 0) / allPos.length; + const avgLng = + allPos.reduce((sum, pos) => sum + pos[1]!, 0) / allPos.length; + + console.log(allPos, { avgLat, avgLng }); + + return { + ...c, + lat: avgLat, + lng: avgLng, + }; }); if (zoom >= 9) { setCluster([]); } else { - setCluster(newCluster); + setCluster(clusterWithAvgPos); } }; handleZoom(); -- 2.49.1 From 8b5a42181e7f39beb1b6b6837c69be95c1da1a7a Mon Sep 17 00:00:00 2001 From: PxlLoewe <72106766+PxlLoewe@users.noreply.github.com> Date: Tue, 29 Apr 2025 21:43:05 -0700 Subject: [PATCH 5/5] fixed Report store --- apps/dispatch/app/dispatch/_components/left/Report.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/dispatch/app/dispatch/_components/left/Report.tsx b/apps/dispatch/app/dispatch/_components/left/Report.tsx index 71a30cf0..70d9089f 100644 --- a/apps/dispatch/app/dispatch/_components/left/Report.tsx +++ b/apps/dispatch/app/dispatch/_components/left/Report.tsx @@ -4,14 +4,13 @@ import { useSession } from "next-auth/react"; import { useEffect, useRef, useState } from "react"; import { Dispatcher } from "dispatch/_components/navbar/_components/action"; import { cn } from "helpers/cn"; -import { useChatStore } from "_store/chatStore"; -import {} from "dispatch/_components/left/Chat"; import { serverApi } from "helpers/axios"; import { getDispatcher } from "pilot/_components/navbar/action"; +import { useLeftMenuStore } from "_store/leftMenuStore"; export const Report = () => { const { setChatOpen, setReportTabOpen, reportTabOpen, setOwnId } = - useChatStore(); + useLeftMenuStore(); const [sending, setSending] = useState(false); const session = useSession(); const [selectedPlayer, setSelectedPlayer] = useState(""); -- 2.49.1