From 48d36af3820c5f9d5a5aa215f2b2f982ee2a2e75 Mon Sep 17 00:00:00 2001 From: PxlLoewe <72106766+PxlLoewe@users.noreply.github.com> Date: Thu, 15 Jan 2026 21:12:15 +0100 Subject: [PATCH] MRT: Rufgruppenauswahl, Herunterfahren, Hilfe --- .../pilot/_components/mrt/MrtButtons.tsx | 35 ++- .../pilot/_components/mrt/MrtDisplay.tsx | 24 +- .../(app)/pilot/_components/mrt/MrtPopups.tsx | 47 +++- .../mrt/images/POPUP_group_selection.png | Bin 0 -> 4472267 bytes .../(app)/pilot/_components/mrt/useButtons.ts | 243 +++++++++++++----- apps/dispatch/app/(app)/pilot/page.tsx | 12 +- apps/dispatch/app/_components/Audio/Audio.tsx | 13 +- apps/dispatch/app/_data/livekitRooms.ts | 10 +- apps/dispatch/app/_store/audioStore.ts | 27 +- .../app/_store/dispatch/connectionStore.ts | 2 +- apps/dispatch/app/_store/pilot/MrtStore.ts | 10 +- .../app/_store/pilot/connectionStore.ts | 2 +- 12 files changed, 321 insertions(+), 104 deletions(-) create mode 100644 apps/dispatch/app/(app)/pilot/_components/mrt/images/POPUP_group_selection.png diff --git a/apps/dispatch/app/(app)/pilot/_components/mrt/MrtButtons.tsx b/apps/dispatch/app/(app)/pilot/_components/mrt/MrtButtons.tsx index d6e67f59..c1de03fc 100644 --- a/apps/dispatch/app/(app)/pilot/_components/mrt/MrtButtons.tsx +++ b/apps/dispatch/app/(app)/pilot/_components/mrt/MrtButtons.tsx @@ -1,6 +1,5 @@ import { CSSProperties, useRef } from "react"; import { useButtons } from "./useButtons"; -import { useSounds } from "./useSounds"; const MRT_BUTTON_STYLES: CSSProperties = { cursor: "pointer", @@ -45,6 +44,34 @@ export const MrtButtons = () => { return ( <> + {/* BELOW DISPLAY */} + + + + + + + {/* LINE SELECT KEY */} { onClick={handleKlick("3l")} style={{ gridArea: "9 / 2 / 11 / 3", ...MRT_BUTTON_STYLES }} /> + {/* NUM PAD */} { onClick={handleKlick("0")} style={{ gridArea: "11 / 16 / 13 / 17", ...MRT_BUTTON_STYLES }} /> + ); }; diff --git a/apps/dispatch/app/(app)/pilot/_components/mrt/MrtDisplay.tsx b/apps/dispatch/app/(app)/pilot/_components/mrt/MrtDisplay.tsx index 9a7b23f8..6f3f0197 100644 --- a/apps/dispatch/app/(app)/pilot/_components/mrt/MrtDisplay.tsx +++ b/apps/dispatch/app/(app)/pilot/_components/mrt/MrtDisplay.tsx @@ -174,7 +174,7 @@ export const MrtDisplay = () => { const DisplayText = ({ pageName }: { pageName: SetPageParams["page"] }) => { return (
{

@@ -203,7 +203,7 @@ export const MrtDisplay = () => { )} {!connectedAircraft && <>Keine Verbindung}

-

+

{room?.name || "Keine RG gefunden"}

@@ -213,7 +213,7 @@ export const MrtDisplay = () => { )} {pageName == "voice-call" && (

-

+

{stringifiedData.callTextHeader}

@@ -240,15 +240,25 @@ export const MrtDisplay = () => { alt="" width={1000} height={1000} - className={`z-10 col-span-full row-span-full`} + className={cn(popup && "brightness-75 filter", "z-10 col-span-full row-span-full")} /> {nextImage && ( -

+
)} -
+
diff --git a/apps/dispatch/app/(app)/pilot/_components/mrt/MrtPopups.tsx b/apps/dispatch/app/(app)/pilot/_components/mrt/MrtPopups.tsx index 2a7c5e70..1e1dca31 100644 --- a/apps/dispatch/app/(app)/pilot/_components/mrt/MrtPopups.tsx +++ b/apps/dispatch/app/(app)/pilot/_components/mrt/MrtPopups.tsx @@ -2,20 +2,27 @@ import { SetPopupParams, useMrtStore } from "_store/pilot/MrtStore"; import Image, { StaticImageData } from "next/image"; import { useEffect, useState } from "react"; import IAMGE_POPUP_LOGIN from "./images/POPUP_login.png"; +import GROUP_SELECTION_POPUP_LOGIN from "./images/POPUP_group_selection.png"; import IAMGE_POPUP_SDS_RECEIVED from "./images/POPUP_SDS_incomming.png"; import IAMGE_POPUP_SDS_SENT from "./images/POPUP_SDS_sent.png"; import IAMGE_POPUP_STATUS_SENT from "./images/POPUP_Status_sent.png"; +import { ROOMS } from "_data/livekitRooms"; import { cn, useDebounce } from "@repo/shared-components"; import { usePilotConnectionStore } from "_store/pilot/connectionStore"; import { fmsStatusDescription, fmsStatusDescriptionShort } from "_data/fmsStatusDescription"; import { pilotSocket } from "(app)/pilot/socket"; import { StationStatus } from "@repo/db"; import { useSounds } from "./useSounds"; +import { useButtons } from "./useButtons"; +import { useAudioStore } from "_store/audioStore"; export const MrtPopups = () => { const { sdsReceivedSoundRef } = useSounds(); - - const { popup, setPopup, setStringifiedData, stringifiedData } = useMrtStore((state) => state); + const { handleKlick } = useButtons(); + const { selectedRoom } = useAudioStore(); + const { popup, page, setPopup, setStringifiedData, stringifiedData } = useMrtStore( + (state) => state, + ); const { connectedAircraft, status } = usePilotConnectionStore((state) => state); const [popupImage, setPopupImage] = useState(null); @@ -33,6 +40,9 @@ export const MrtPopups = () => { case "login": setPopupImage(IAMGE_POPUP_LOGIN); break; + case "group-selection": + setPopupImage(GROUP_SELECTION_POPUP_LOGIN); + break; case undefined: case null: setPopupImage(null); @@ -44,17 +54,32 @@ export const MrtPopups = () => { () => { if (popup == "login") return; if (popup == "sds-received") return; + if (popup == "group-selection") return; setPopup(null); }, 3000, [popup], ); + useDebounce( + () => { + if (popup == "group-selection") { + if (selectedRoom?.id === stringifiedData.groupSelectionGroupId) { + setPopup(null); + } else { + handleKlick("3l")(); + } + } + }, + 5000, + [page, stringifiedData.groupSelectionGroupId, selectedRoom], + ); + useEffect(() => { - if (status === "connecting") { + if (status === "connecting" && page !== "off" && page !== "startup") { setPopup({ popup: "login" }); } - }, [status, setPopup]); + }, [status, setPopup, page]); useDebounce( () => { @@ -80,9 +105,11 @@ export const MrtPopups = () => { if (!popupImage || !popup) return null; const DisplayText = ({ pageName }: { pageName: SetPopupParams["popup"] }) => { + const group = ROOMS.find((r) => r.id === stringifiedData.groupSelectionGroupId); + return (
{ {stringifiedData.sdsText}

)} + {pageName == "group-selection" && ( + <> +

{group?.name}

+

+ {stringifiedData.groupSelectionGroupId} +

+ + )}
); }; return ( <> - +
diff --git a/apps/dispatch/app/(app)/pilot/_components/mrt/images/POPUP_group_selection.png b/apps/dispatch/app/(app)/pilot/_components/mrt/images/POPUP_group_selection.png new file mode 100644 index 0000000000000000000000000000000000000000..7283453473642768fdda4ecb74f94813ee391780 GIT binary patch literal 4472267 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%0D&P% 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 L>BmQY;LQIA1UbO0 literal 0 HcmV?d00001 diff --git a/apps/dispatch/app/(app)/pilot/_components/mrt/useButtons.ts b/apps/dispatch/app/(app)/pilot/_components/mrt/useButtons.ts index 35d619a5..04fa70a6 100644 --- a/apps/dispatch/app/(app)/pilot/_components/mrt/useButtons.ts +++ b/apps/dispatch/app/(app)/pilot/_components/mrt/useButtons.ts @@ -8,12 +8,42 @@ import { useMutation, useQueryClient } from "@tanstack/react-query"; import { useSounds } from "./useSounds"; import { sendSdsStatusMessageAPI } from "_querys/missions"; import { useSession } from "next-auth/react"; +import { ROOMS } from "_data/livekitRooms"; +import { useAudioStore } from "_store/audioStore"; + +type ButtonTypes = + | "1" + | "2" + | "3" + | "4" + | "5" + | "6" + | "7" + | "8" + | "9" + | "0" + | "home" + | "3l" + | "3r" + | "wheel-knob" + | "arrow-up" + | "arrow-down" + | "arrow-left" + | "arrow-right" + | "end-call"; export const useButtons = () => { const session = useSession(); + const { connect, setSelectedRoom, selectedRoom } = useAudioStore((state) => state); + const { longBtnPressSoundRef, statusSentSoundRef } = useSounds(); const queryClient = useQueryClient(); - const { selectedStation: station, connectedAircraft } = usePilotConnectionStore((state) => state); + const { + status: pilotState, + selectedStation, + connectedAircraft, + } = usePilotConnectionStore((state) => state); + const sendSdsStatusMutation = useMutation({ mutationFn: async ({ sdsMessage }: { sdsMessage: MissionSdsStatusLog }) => { if (!connectedAircraft?.id) throw new Error("No connected aircraft"); @@ -34,82 +64,161 @@ export const useButtons = () => { }) => editConnectedAircraftAPI(aircraftId, data), }); - const { setPage, setPopup, page, popup, setStringifiedData } = useMrtStore((state) => state); + const { setPage, setPopup, page, popup, setStringifiedData, stringifiedData } = useMrtStore( + (state) => state, + ); - const handleHold = - (button: "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "0" | "home" | "3l" | "3r") => - async () => { - /* if (connectionStatus !== "connected") return; */ - if (button === "1" && page === "off") { - setPage({ page: "startup" }); - return; - } - if (!station) return; - if (!session.data?.user) return; - if (!connectedAircraft?.id) return; - if ( - button === "1" || - button === "2" || - button === "3" || - button === "4" || - button === "6" || - button === "7" || - button === "8" - ) { - longBtnPressSoundRef.current?.play(); - const delay = Math.random() * 1500 + 500; - setTimeout(async () => { - await updateAircraftMutation.mutateAsync({ - aircraftId: connectedAircraft.id, + const role = + (pilotState == "connected" && selectedStation?.bosCallsignShort) || + session.data?.user?.publicId; + + const handleHold = (button: ButtonTypes) => async () => { + /* if (connectionStatus !== "connected") return; */ + if (button === "end-call") { + setPage({ page: "off" }); + setPopup(null); + } + if (button === "1" && page === "off") { + setPage({ page: "startup" }); + return; + } + if (!selectedStation) return; + if (!session.data?.user) return; + if (!connectedAircraft?.id) return; + if ( + button === "1" || + button === "2" || + button === "3" || + button === "4" || + button === "6" || + button === "7" || + button === "8" + ) { + longBtnPressSoundRef.current?.play(); + const delay = Math.random() * 1500 + 500; + setTimeout(async () => { + await updateAircraftMutation.mutateAsync({ + aircraftId: connectedAircraft.id, + data: { + fmsStatus: button, + }, + }); + setPopup({ popup: "status-sent" }); + statusSentSoundRef.current?.play(); + }, delay); + } else if (button === "5" || button === "9" || button === "0") { + longBtnPressSoundRef.current?.play(); + const delay = Math.random() * 1500 + 500; + setTimeout(async () => { + await sendSdsStatusMutation.mutateAsync({ + sdsMessage: { + type: "sds-status-log", + auto: false, + timeStamp: new Date().toISOString(), data: { - fmsStatus: button, + direction: "to-lst", + stationId: selectedStation.id, + station: selectedStation, + user: getPublicUser(session.data?.user), + status: button, }, - }); - setPopup({ popup: "status-sent" }); - statusSentSoundRef.current?.play(); - }, delay); - } else if (button === "5" || button === "9" || button === "0") { - longBtnPressSoundRef.current?.play(); - const delay = Math.random() * 1500 + 500; - setTimeout(async () => { - await sendSdsStatusMutation.mutateAsync({ - sdsMessage: { - type: "sds-status-log", - auto: false, - timeStamp: new Date().toISOString(), - data: { - direction: "to-lst", - stationId: station.id, - station, - user: getPublicUser(session.data?.user), - status: button, - }, - }, - }); - setStringifiedData({ sentSdsText: button }); - statusSentSoundRef.current?.play(); - setPopup({ popup: "sds-sent" }); - }, delay); - } - }; + }, + }); + setStringifiedData({ sentSdsText: button }); + statusSentSoundRef.current?.play(); + setPopup({ popup: "sds-sent" }); + }, delay); + } + }; - const handleKlick = - (button: "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "0" | "home" | "3l" | "3r") => - async () => { - //implement Kurzwahl when button is clicked short to dial - if (popup == "sds-received" && button === "3r") { - setPopup(null); - } - return false; - }; + const handleKlick = (button: ButtonTypes) => async () => { + console.log("Button clicked:", button); + //implement Kurzwahl when button is clicked short to dial + + switch (button) { + case "0": + case "1": + case "2": + case "3": + case "4": + case "5": + case "6": + case "7": + case "8": + case "9": + //handle short press number buttons for kurzwahl + if (popup === "group-selection") { + if (stringifiedData.groupSelectionGroupId?.length === 4) { + setStringifiedData({ groupSelectionGroupId: button }); + } else { + setStringifiedData({ + groupSelectionGroupId: (stringifiedData.groupSelectionGroupId || "") + button, + }); + } + } + if (page === "home" && !popup) { + setPopup({ popup: "group-selection" }); + setStringifiedData({ groupSelectionGroupId: button }); + } + break; + case "3r": + if (popup === "sds-received" || popup === "group-selection") { + setPopup(null); + } else if (page === "home") { + setPopup({ popup: "group-selection" }); + setStringifiedData({ groupSelectionGroupId: selectedRoom?.id || ROOMS[0]!.id }); + } else if (page === "voice-call") { + setPage({ page: "home" }); + } + break; + case "wheel-knob": + setPopup(popup === "group-selection" ? null : { popup: "group-selection" }); + setStringifiedData({ groupSelectionGroupId: selectedRoom?.id || ROOMS[0]!.id }); + break; + case "arrow-right": + if (popup === "group-selection") { + let currentGroupIndex = ROOMS.findIndex( + (r) => r.id === stringifiedData.groupSelectionGroupId, + ); + if (currentGroupIndex === ROOMS.length - 1) currentGroupIndex = -1; + const nextGroup = ROOMS[currentGroupIndex + 1]; + if (nextGroup) { + setStringifiedData({ groupSelectionGroupId: nextGroup.id }); + } + } + break; + case "arrow-left": + if (popup === "group-selection") { + let currentGroupIndex = ROOMS.findIndex( + (r) => r.id === stringifiedData.groupSelectionGroupId, + ); + if (currentGroupIndex === 0) currentGroupIndex = ROOMS.length; + const previousGroup = ROOMS[currentGroupIndex - 1]; + if (previousGroup) { + setStringifiedData({ groupSelectionGroupId: previousGroup.id }); + } + } + break; + case "3l": + if (popup === "group-selection") { + const group = ROOMS.find((r) => r.id === stringifiedData.groupSelectionGroupId); + if (group && role) { + setSelectedRoom(group); + connect(group, role); + setPopup(null); + } + } + } + return false; + }; useEffect(() => { pilotSocket.on("connect", () => { const { page } = useMrtStore.getState(); - if (!station || page !== "off") return; + if (!selectedStation || page !== "off") return; setPage({ page: "startup" }); }); - }, [setPage, station, setPopup]); + }, [setPage, selectedStation, setPopup]); return { handleKlick, handleHold }; }; diff --git a/apps/dispatch/app/(app)/pilot/page.tsx b/apps/dispatch/app/(app)/pilot/page.tsx index b5874665..34686bf2 100644 --- a/apps/dispatch/app/(app)/pilot/page.tsx +++ b/apps/dispatch/app/(app)/pilot/page.tsx @@ -97,7 +97,17 @@ const PilotPage = () => {
-

MRT & DME

+
+

MRT & DME

+ + Hilfe + +
{ const { + selectedRoom, speakingParticipants, resetSpeakingParticipants, isTalking, @@ -37,8 +38,8 @@ export const Audio = () => { room, message, removeMessage, + setSelectedRoom, } = useAudioStore(); - const [selectedRoom, setSelectedRoom] = useState("VAR_LST_RD_01"); useSounds({ isReceiving: speakingParticipants.length > 0, @@ -48,7 +49,7 @@ export const Audio = () => { }); const { selectedStation, status: pilotState } = usePilotConnectionStore((state) => state); - const { selectedZone, status: dispatcherState } = useDispatchConnectionStore((state) => state); + const { status: dispatcherState } = useDispatchConnectionStore((state) => state); const session = useSession(); const [isReceivingBlick, setIsReceivingBlick] = useState(false); const [recentSpeakers, setRecentSpeakers] = useState([]); @@ -93,7 +94,7 @@ export const Audio = () => { const canStopOtherSpeakers = dispatcherState === "connected"; const role = - (dispatcherState === "connected" && selectedZone) || + (dispatcherState === "connected" && "VAR LST") || (pilotState == "connected" && selectedStation?.bosCallsignShort) || session.data?.user?.publicId; @@ -190,9 +191,9 @@ export const Audio = () => { className="btn btn-sm btn-ghost relative flex items-center justify-start gap-2 text-left" onClick={() => { if (!role) return; - if (selectedRoom === r.name) return; - setSelectedRoom(r.name); - connect(r.name, role); + if (selectedRoom?.name === r.name) return; + setSelectedRoom(r); + connect(r, role); }} > {room?.name === r.name && ( diff --git a/apps/dispatch/app/_data/livekitRooms.ts b/apps/dispatch/app/_data/livekitRooms.ts index 0ed6c0b5..f98a61aa 100644 --- a/apps/dispatch/app/_data/livekitRooms.ts +++ b/apps/dispatch/app/_data/livekitRooms.ts @@ -1,7 +1,7 @@ export const ROOMS = [ - { name: "VAR_LST_RD_01", id: 2201 }, - { name: "VAR_LST_RD_02", id: 2202 }, - { name: "VAR_LST_RD_03", id: 2203 }, - { name: "VAR_LST_RD_04", id: 2204 }, - { name: "VAR_LST_RD_05", id: 2205 }, + { name: "VAR_LST_RD_01", id: "2201" }, + { name: "VAR_LST_RD_02", id: "2202" }, + { name: "VAR_LST_RD_03", id: "2203" }, + { name: "VAR_LST_RD_04", id: "2204" }, + { name: "VAR_LST_RD_05", id: "2205" }, ]; diff --git a/apps/dispatch/app/_store/audioStore.ts b/apps/dispatch/app/_store/audioStore.ts index 7ce25c64..714264b2 100644 --- a/apps/dispatch/app/_store/audioStore.ts +++ b/apps/dispatch/app/_store/audioStore.ts @@ -21,12 +21,15 @@ import { useDispatchConnectionStore } from "_store/dispatch/connectionStore"; import { changeDispatcherAPI } from "_querys/dispatcher"; import { getRadioStream } from "_helpers/radioEffect"; import { usePilotConnectionStore } from "_store/pilot/connectionStore"; +import { ROOMS } from "_data/livekitRooms"; let interval: NodeJS.Timeout; +const connectedSound = new Audio("/sounds/403.wav"); + type TalkState = { addSpeakingParticipant: (participant: Participant) => void; - connect: (roomName: string, role: string) => void; + connect: (room: (typeof ROOMS)[number] | undefined, role: string) => void; connectionQuality: ConnectionQuality; disconnect: () => void; isTalking: boolean; @@ -44,6 +47,8 @@ type TalkState = { radioVolume: number; dmeVolume: number; }; + selectedRoom?: (typeof ROOMS)[number]; + setSelectedRoom: (room: (typeof ROOMS)[number]) => void; speakingParticipants: Participant[]; state: "connecting" | "connected" | "disconnected" | "error"; toggleTalking: () => void; @@ -72,6 +77,10 @@ export const useAudioStore = create((set, get) => ({ remoteParticipants: 0, connectionQuality: ConnectionQuality.Unknown, room: null, + selectedRoom: ROOMS[0], + setSelectedRoom: (room) => { + set({ selectedRoom: room }); + }, resetSpeakingParticipants: (source: string) => { set({ speakingParticipants: [], @@ -117,11 +126,11 @@ export const useAudioStore = create((set, get) => ({ (oldSettings.micDeviceId !== newSettings.micDeviceId || oldSettings.micVolume !== newSettings.micVolume) ) { - const { room, disconnect, connect } = get(); + const { room, disconnect, connect, selectedRoom } = get(); const role = room?.localParticipant.attributes.role; - if (room?.name || role) { + if (selectedRoom || role) { disconnect(); - connect(room?.name || "", role || "user"); + connect(selectedRoom, role || "user"); } } }, @@ -160,7 +169,7 @@ export const useAudioStore = create((set, get) => ({ set((state) => ({ isTalking: !state.isTalking, transmitBlocked: false })); }, - connect: async (roomName, role) => { + connect: async (_room, role) => { set({ state: "connecting" }); try { @@ -172,10 +181,12 @@ export const useAudioStore = create((set, get) => ({ connectedRoom.removeAllListeners(); } + const { selectedRoom } = get(); + const url = process.env.NEXT_PUBLIC_LIVEKIT_URL; if (!url) return console.error("NEXT_PUBLIC_LIVEKIT_URL not set"); - const token = await getToken(roomName); + const token = await getToken(_room?.name || selectedRoom?.name || "VAR_LST_RD_01"); if (!token) throw new Error("Fehlende Berechtigung"); const room = new Room({}); await room.prepareConnection(url, token); @@ -186,7 +197,7 @@ export const useAudioStore = create((set, get) => ({ if (dispatchState.status === "connected" && dispatchState.connectedDispatcher?.id) { changeDispatcherAPI(dispatchState.connectedDispatcher?.id, { - zone: roomName, + zone: _room?.name || selectedRoom?.name || "VAR_LST_RD_01", ghostMode: dispatchState.ghostMode, }); } @@ -208,7 +219,7 @@ export const useAudioStore = create((set, get) => ({ source: Track.Source.Microphone, }); await publishedTrack.mute(); - + connectedSound.play().catch((e) => console.error("Fehler beim Abspielen des Sounds", e)); set({ localRadioTrack: publishedTrack }); set({ state: "connected", room, isTalking: false, message: null }); diff --git a/apps/dispatch/app/_store/dispatch/connectionStore.ts b/apps/dispatch/app/_store/dispatch/connectionStore.ts index 2e5bb4c1..9663e473 100644 --- a/apps/dispatch/app/_store/dispatch/connectionStore.ts +++ b/apps/dispatch/app/_store/dispatch/connectionStore.ts @@ -48,7 +48,7 @@ export const useDispatchConnectionStore = create((set) => ({ dispatchSocket.on("connect", () => { const { logoffTime, selectedZone, ghostMode } = useDispatchConnectionStore.getState(); - useAudioStore.getState().connect("VAR_LST_RD_01", selectedZone || "Leitstelle"); + useAudioStore.getState().connect(undefined, selectedZone || "Leitstelle"); dispatchSocket.emit("connect-dispatch", { logoffTime, selectedZone, diff --git a/apps/dispatch/app/_store/pilot/MrtStore.ts b/apps/dispatch/app/_store/pilot/MrtStore.ts index a2a4525f..f8432402 100644 --- a/apps/dispatch/app/_store/pilot/MrtStore.ts +++ b/apps/dispatch/app/_store/pilot/MrtStore.ts @@ -19,6 +19,10 @@ interface SetSdsReceivedPopupParams { popup: "sds-received"; } +interface SetGroupSelectionPopupParams { + popup: "group-selection"; +} + interface SetStatusSentPopupParams { popup: "status-sent"; } @@ -40,6 +44,7 @@ export type SetPageParams = export type SetPopupParams = | SetStatusSentPopupParams | SetSdsSentPopupParams + | SetGroupSelectionPopupParams | SetSdsReceivedPopupParams | SetLoginPopupParams; @@ -47,6 +52,7 @@ interface StringifiedData { sdsText?: string; sentSdsText?: string; + groupSelectionGroupId?: string; callTextHeader?: string; } @@ -69,7 +75,9 @@ interface MrtStore { export const useMrtStore = create((set) => ({ page: "off", nightMode: false, - stringifiedData: {}, + stringifiedData: { + groupSelectionGroupId: "2201", + }, setNightMode: (nightMode) => set({ nightMode }), setStringifiedData: (data) => set((state) => ({ diff --git a/apps/dispatch/app/_store/pilot/connectionStore.ts b/apps/dispatch/app/_store/pilot/connectionStore.ts index 15e3109d..1ca44645 100644 --- a/apps/dispatch/app/_store/pilot/connectionStore.ts +++ b/apps/dispatch/app/_store/pilot/connectionStore.ts @@ -86,7 +86,7 @@ pilotSocket.on("connect", () => { usePilotConnectionStore.setState({ status: "connected", message: "" }); const { logoffTime, selectedStation, debug } = usePilotConnectionStore.getState(); dispatchSocket.disconnect(); - useAudioStore.getState().connect("VAR_LST_RD_01", selectedStation?.bosCallsignShort || "pilot"); + useAudioStore.getState().connect(undefined, selectedStation?.bosCallsignShort || "pilot"); pilotSocket.emit("connect-pilot", { logoffTime,