From a65af7f0118a5609acff65fb0ef32c0ed7872e90 Mon Sep 17 00:00:00 2001 From: PxlLoewe <72106766+PxlLoewe@users.noreply.github.com> Date: Thu, 15 Jan 2026 14:09:47 +0100 Subject: [PATCH] Ealisitische Sequenz im HEader vom call-Bildschirm im MRT --- .../pilot/_components/mrt/MrtDisplay.tsx | 87 +++++++++++++++++- .../(app)/pilot/_components/mrt/MrtPopups.tsx | 29 ++++-- .../_components/mrt/images/PAGE_Call.png | Bin 4472578 -> 4472067 bytes apps/dispatch/app/(app)/pilot/page.tsx | 4 +- .../customToasts/StationStatusToast.tsx | 4 +- .../app/_components/map/AircraftMarker.tsx | 2 +- apps/dispatch/app/_store/pilot/MrtStore.ts | 2 + .../app/_store/pilot/connectionStore.ts | 2 +- 8 files changed, 113 insertions(+), 17 deletions(-) diff --git a/apps/dispatch/app/(app)/pilot/_components/mrt/MrtDisplay.tsx b/apps/dispatch/app/(app)/pilot/_components/mrt/MrtDisplay.tsx index 4aa230d5..9a7b23f8 100644 --- a/apps/dispatch/app/(app)/pilot/_components/mrt/MrtDisplay.tsx +++ b/apps/dispatch/app/(app)/pilot/_components/mrt/MrtDisplay.tsx @@ -6,7 +6,7 @@ import PAGE_HOME from "./images/PAGE_Home.png"; import PAGE_Call from "./images/PAGE_Call.png"; import PAGE_Off from "./images/PAGE_Off.png"; import PAGE_STARTUP from "./images/PAGE_Startup.png"; -import { useEffect, useState } from "react"; +import { useEffect, useRef, useState } from "react"; import { cn, useDebounce } from "@repo/shared-components"; import "./MrtDisplay.css"; import { useSession } from "next-auth/react"; @@ -16,8 +16,11 @@ import { useAudioStore } from "_store/audioStore"; import { ROOMS } from "_data/livekitRooms"; export const MrtDisplay = () => { - const { page, setPage, popup } = useMrtStore((state) => state); - + const { page, setPage, popup, setPopup, setStringifiedData, stringifiedData } = useMrtStore( + (state) => state, + ); + const callEstablishedRef = useRef(false); + const session = useSession(); const { connectedAircraft, selectedStation } = usePilotConnectionStore((state) => state); const { room, speakingParticipants, isTalking } = useAudioStore((state) => state); const [pageImage, setPageImage] = useState<{ @@ -35,8 +38,6 @@ export const MrtDisplay = () => { | undefined >(undefined); - const session = useSession(); - useDebounce( () => { if (!nextImage) return; @@ -68,6 +69,18 @@ export const MrtDisplay = () => { [page, setPage], ); + useDebounce( + () => { + if (page === "startup") { + setPopup({ + popup: "login", + }); + } + }, + 7500, + [page, setPage], + ); + useDebounce( () => { if (page === "voice-call" && speakingParticipants.length === 0 && !isTalking) { @@ -81,6 +94,67 @@ export const MrtDisplay = () => { ); useEffect(() => { + const timeouts: NodeJS.Timeout[] = []; + if (page === "voice-call") { + setStringifiedData({ + callTextHeader: "Wählen", + }); + timeouts.push( + setTimeout(() => { + setStringifiedData({ + callTextHeader: "Anruf...", + }); + }, 500), + + setTimeout(() => { + setStringifiedData({ + callTextHeader: "Gruppenruf", + }); + }, 800), + setTimeout(() => { + callEstablishedRef.current = true; + }, 1500), + ); + } + return () => { + timeouts.forEach((t) => clearTimeout(t)); + }; + }, [page, setStringifiedData]); + + useDebounce( + () => { + if (isTalking && page === "voice-call") { + setStringifiedData({ + callTextHeader: "Sprechen", + }); + } + }, + 1500, + [page, isTalking], + ); + + useEffect(() => { + if (isTalking && page === "voice-call" && callEstablishedRef.current) { + console.log("SET TO SPRECHEN", stringifiedData.callTextHeader); + setStringifiedData({ + callTextHeader: "Sprechen", + }); + } else if ( + !isTalking && + page === "voice-call" && + stringifiedData.callTextHeader === "Sprechen" + ) { + setStringifiedData({ + callTextHeader: "Gruppenruf", + }); + } + }, [page, stringifiedData.callTextHeader, isTalking, setStringifiedData]); + + useEffect(() => { + if (page !== "voice-call") { + callEstablishedRef.current = false; + } + switch (page) { case "home": setNextImage({ src: PAGE_HOME, name: "home" }); @@ -139,6 +213,9 @@ export const MrtDisplay = () => { )} {pageName == "voice-call" && (
+

+ {stringifiedData.callTextHeader} +

{isTalking && selectedStation?.bosCallsignShort} {speakingParticipants.length > 0 && diff --git a/apps/dispatch/app/(app)/pilot/_components/mrt/MrtPopups.tsx b/apps/dispatch/app/(app)/pilot/_components/mrt/MrtPopups.tsx index 466c5825..2a7c5e70 100644 --- a/apps/dispatch/app/(app)/pilot/_components/mrt/MrtPopups.tsx +++ b/apps/dispatch/app/(app)/pilot/_components/mrt/MrtPopups.tsx @@ -16,7 +16,7 @@ export const MrtPopups = () => { const { sdsReceivedSoundRef } = useSounds(); const { popup, setPopup, setStringifiedData, stringifiedData } = useMrtStore((state) => state); - const { connectedAircraft } = usePilotConnectionStore((state) => state); + const { connectedAircraft, status } = usePilotConnectionStore((state) => state); const [popupImage, setPopupImage] = useState(null); useEffect(() => { @@ -42,22 +42,39 @@ export const MrtPopups = () => { useDebounce( () => { - if (!popup || popup == "sds-received") return; + if (popup == "login") return; + if (popup == "sds-received") return; setPopup(null); }, 3000, [popup], ); + useEffect(() => { + if (status === "connecting") { + setPopup({ popup: "login" }); + } + }, [status, setPopup]); + + useDebounce( + () => { + if (status === "connected") { + setPopup(null); + } + }, + 5000, + [status], + ); + useEffect(() => { pilotSocket.on("sds-status", (data: StationStatus) => { setStringifiedData({ sdsText: data.status + " - " + fmsStatusDescriptionShort[data.status] }); setPopup({ popup: "sds-received" }); + if (sdsReceivedSoundRef.current) { + sdsReceivedSoundRef.current.currentTime = 0; + sdsReceivedSoundRef.current.play(); + } }); - if (sdsReceivedSoundRef.current) { - sdsReceivedSoundRef.current.currentTime = 0; - sdsReceivedSoundRef.current.play(); - } }, [setPopup, setStringifiedData, sdsReceivedSoundRef]); if (!popupImage || !popup) return null; diff --git a/apps/dispatch/app/(app)/pilot/_components/mrt/images/PAGE_Call.png b/apps/dispatch/app/(app)/pilot/_components/mrt/images/PAGE_Call.png index 6899505132f8464b61194f280ead307f2a68d2a5..956f29868a7473410320827a65c662a76ba88f94 100644 GIT binary patch delta 6924 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 delta 17945 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 import("_components/map/Map"), { }); const PilotPage = () => { - const { connectedAircraft, status, } = usePilotConnectionStore((state) => state); + const { connectedAircraft, status } = usePilotConnectionStore((state) => state); const { latestMission } = useDmeStore((state) => state); // Query will be cached anyway, due to this, displayed Markers are in sync with own Aircraft connection-warning const { data: aircrafts } = useQuery({ @@ -94,7 +94,7 @@ const PilotPage = () => {

-
+

MRT & DME

diff --git a/apps/dispatch/app/_components/customToasts/StationStatusToast.tsx b/apps/dispatch/app/_components/customToasts/StationStatusToast.tsx index ec73555d..a3d3b64a 100644 --- a/apps/dispatch/app/_components/customToasts/StationStatusToast.tsx +++ b/apps/dispatch/app/_components/customToasts/StationStatusToast.tsx @@ -1,8 +1,8 @@ -import { getPublicUser, MissionSdsStatusLog, Prisma, StationStatus } from "@repo/db"; +import { getPublicUser, MissionSdsStatusLog, StationStatus } from "@repo/db"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { BaseNotification } from "_components/customToasts/BaseNotification"; import { FMS_STATUS_COLORS } from "_helpers/fmsStatusColors"; -import { editConnectedAircraftAPI, getConnectedAircraftsAPI } from "_querys/aircrafts"; +import { getConnectedAircraftsAPI } from "_querys/aircrafts"; import { getLivekitRooms } from "_querys/livekit"; import { sendSdsStatusMessageAPI } from "_querys/missions"; import { getStationsAPI } from "_querys/stations"; diff --git a/apps/dispatch/app/_components/map/AircraftMarker.tsx b/apps/dispatch/app/_components/map/AircraftMarker.tsx index 445babda..3961690d 100644 --- a/apps/dispatch/app/_components/map/AircraftMarker.tsx +++ b/apps/dispatch/app/_components/map/AircraftMarker.tsx @@ -2,7 +2,7 @@ import { Marker, Polyline, useMap } from "react-leaflet"; import { DivIcon, Marker as LMarker, Popup as LPopup } from "leaflet"; import { useMapStore } from "_store/mapStore"; import { Fragment, useCallback, useEffect, useRef, useState, useMemo } from "react"; -import { checkSimulatorConnected, cn } from "@repo/shared-components"; +import { cn } from "@repo/shared-components"; import { ChevronsRightLeft, House, MessageSquareText, Minimize2 } from "lucide-react"; import { SmartPopup, calculateAnchor, useSmartPopup } from "_components/SmartPopup"; import FMSStatusHistory, { diff --git a/apps/dispatch/app/_store/pilot/MrtStore.ts b/apps/dispatch/app/_store/pilot/MrtStore.ts index 0bf9eaf1..a2a4525f 100644 --- a/apps/dispatch/app/_store/pilot/MrtStore.ts +++ b/apps/dispatch/app/_store/pilot/MrtStore.ts @@ -46,6 +46,8 @@ export type SetPopupParams = interface StringifiedData { sdsText?: string; sentSdsText?: string; + + callTextHeader?: string; } interface MrtStore { diff --git a/apps/dispatch/app/_store/pilot/connectionStore.ts b/apps/dispatch/app/_store/pilot/connectionStore.ts index 1976dd40..15e3109d 100644 --- a/apps/dispatch/app/_store/pilot/connectionStore.ts +++ b/apps/dispatch/app/_store/pilot/connectionStore.ts @@ -109,7 +109,7 @@ pilotSocket.on("connect-message", (data) => { }); pilotSocket.on("disconnect", () => { - usePilotConnectionStore.setState({ status: "disconnected" }); + usePilotConnectionStore.setState({ status: "disconnected", connectedAircraft: null }); useAudioStore.getState().disconnect(); });