Revert "Revert "PR v2.0.7""
This commit is contained in:
@@ -1,173 +1,92 @@
|
||||
import { MissionSdsLog, Station } from "@repo/db";
|
||||
import { fmsStatusDescription } from "_data/fmsStatusDescription";
|
||||
import { DisplayLineProps } from "(app)/pilot/_components/mrt/Mrt";
|
||||
import { create } from "zustand";
|
||||
import { syncTabs } from "zustand-sync-tabs";
|
||||
|
||||
interface SetSdsPageParams {
|
||||
page: "sds";
|
||||
station: Station;
|
||||
sdsMessage: MissionSdsLog;
|
||||
interface SetOffPageParams {
|
||||
page: "off";
|
||||
}
|
||||
|
||||
interface SetStartupPageParams {
|
||||
page: "startup";
|
||||
}
|
||||
|
||||
interface SetHomePageParams {
|
||||
page: "home";
|
||||
station: Station;
|
||||
fmsStatus: string;
|
||||
}
|
||||
|
||||
interface SetSendingStatusPageParams {
|
||||
page: "sending-status";
|
||||
station: Station;
|
||||
interface SetVoicecallPageParams {
|
||||
page: "voice-call";
|
||||
}
|
||||
interface SetSdsReceivedPopupParams {
|
||||
popup: "sds-received";
|
||||
}
|
||||
|
||||
interface SetNewStatusPageParams {
|
||||
page: "new-status";
|
||||
station: Station;
|
||||
interface SetGroupSelectionPopupParams {
|
||||
popup: "group-selection";
|
||||
}
|
||||
|
||||
type SetPageParams =
|
||||
interface SetStatusSentPopupParams {
|
||||
popup: "status-sent";
|
||||
}
|
||||
|
||||
interface SetLoginPopupParams {
|
||||
popup: "login";
|
||||
}
|
||||
|
||||
interface SetSdsSentPopupParams {
|
||||
popup: "sds-sent";
|
||||
}
|
||||
|
||||
export type SetPageParams =
|
||||
| SetHomePageParams
|
||||
| SetSendingStatusPageParams
|
||||
| SetSdsPageParams
|
||||
| SetNewStatusPageParams;
|
||||
| SetOffPageParams
|
||||
| SetStartupPageParams
|
||||
| SetVoicecallPageParams;
|
||||
|
||||
export type SetPopupParams =
|
||||
| SetStatusSentPopupParams
|
||||
| SetSdsSentPopupParams
|
||||
| SetGroupSelectionPopupParams
|
||||
| SetSdsReceivedPopupParams
|
||||
| SetLoginPopupParams;
|
||||
|
||||
interface StringifiedData {
|
||||
sdsText?: string;
|
||||
sentSdsText?: string;
|
||||
|
||||
groupSelectionGroupId?: string;
|
||||
callTextHeader?: string;
|
||||
}
|
||||
|
||||
interface MrtStore {
|
||||
page: SetPageParams["page"];
|
||||
popup?: SetPopupParams["popup"];
|
||||
|
||||
lines: DisplayLineProps[];
|
||||
stringifiedData: StringifiedData;
|
||||
setStringifiedData: (data: Partial<StringifiedData>) => void;
|
||||
|
||||
setPage: (pageData: SetPageParams) => void;
|
||||
setLines: (lines: MrtStore["lines"]) => void;
|
||||
setPopup: (popupData: SetPopupParams | null) => void;
|
||||
|
||||
// internal
|
||||
updateIntervall?: number;
|
||||
nightMode: boolean;
|
||||
setNightMode: (nightMode: boolean) => void;
|
||||
}
|
||||
|
||||
export const useMrtStore = create<MrtStore>(
|
||||
syncTabs(
|
||||
(set) => ({
|
||||
page: "home",
|
||||
pageData: {
|
||||
message: "",
|
||||
},
|
||||
lines: [
|
||||
{
|
||||
textLeft: "VAR.#",
|
||||
textSize: "2",
|
||||
},
|
||||
{
|
||||
textLeft: "No Data",
|
||||
textSize: "3",
|
||||
},
|
||||
],
|
||||
setLines: (lines) => set({ lines }),
|
||||
setPage: (pageData) => {
|
||||
switch (pageData.page) {
|
||||
case "home": {
|
||||
const { station, fmsStatus } = pageData as SetHomePageParams;
|
||||
set({
|
||||
page: "home",
|
||||
lines: [
|
||||
{
|
||||
textLeft: `${station?.bosCallsign}`,
|
||||
style: { fontWeight: "bold" },
|
||||
textSize: "2",
|
||||
},
|
||||
{ textLeft: "ILS VAR#", textSize: "3" },
|
||||
{
|
||||
textLeft: fmsStatus,
|
||||
style: { fontWeight: "extrabold" },
|
||||
textSize: "4",
|
||||
},
|
||||
{
|
||||
textLeft: fmsStatusDescription[fmsStatus],
|
||||
textSize: "1",
|
||||
},
|
||||
],
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
case "sending-status": {
|
||||
const { station } = pageData as SetSendingStatusPageParams;
|
||||
set({
|
||||
page: "sending-status",
|
||||
lines: [
|
||||
{
|
||||
textLeft: `${station?.bosCallsign}`,
|
||||
style: { fontWeight: "bold" },
|
||||
textSize: "2",
|
||||
},
|
||||
{ textLeft: "ILS VAR#", textSize: "3" },
|
||||
{
|
||||
textMid: "sending...",
|
||||
style: { fontWeight: "bold" },
|
||||
textSize: "4",
|
||||
},
|
||||
{
|
||||
textLeft: "Status wird gesendet...",
|
||||
textSize: "1",
|
||||
},
|
||||
],
|
||||
});
|
||||
break;
|
||||
}
|
||||
case "new-status": {
|
||||
const { station } = pageData as SetNewStatusPageParams;
|
||||
set({
|
||||
page: "new-status",
|
||||
lines: [
|
||||
{
|
||||
textLeft: `${station?.bosCallsign}`,
|
||||
style: { fontWeight: "bold" },
|
||||
textSize: "2",
|
||||
},
|
||||
{ textLeft: "ILS VAR#", textSize: "3" },
|
||||
{
|
||||
textLeft: "empfangen",
|
||||
style: { fontWeight: "bold" },
|
||||
textSize: "4",
|
||||
},
|
||||
],
|
||||
});
|
||||
break;
|
||||
}
|
||||
case "sds": {
|
||||
const { sdsMessage } = pageData as SetSdsPageParams;
|
||||
const msg = sdsMessage.data.message;
|
||||
set({
|
||||
page: "sds",
|
||||
lines: [
|
||||
{
|
||||
textLeft: `SDS-Nachricht`,
|
||||
style: { fontWeight: "bold" },
|
||||
textSize: "2",
|
||||
},
|
||||
{
|
||||
textLeft: msg,
|
||||
style: {
|
||||
whiteSpace: "normal",
|
||||
overflowWrap: "break-word",
|
||||
wordBreak: "break-word",
|
||||
display: "block",
|
||||
maxWidth: "100%",
|
||||
maxHeight: "100%",
|
||||
overflow: "auto",
|
||||
textOverflow: "ellipsis",
|
||||
lineHeight: "1.2em",
|
||||
},
|
||||
textSize: "2",
|
||||
},
|
||||
],
|
||||
});
|
||||
break;
|
||||
}
|
||||
default:
|
||||
set({ page: "home" });
|
||||
break;
|
||||
}
|
||||
},
|
||||
}),
|
||||
{
|
||||
name: "mrt-store", // unique name
|
||||
},
|
||||
),
|
||||
);
|
||||
export const useMrtStore = create<MrtStore>((set) => ({
|
||||
page: "off",
|
||||
nightMode: false,
|
||||
stringifiedData: {
|
||||
groupSelectionGroupId: "2201",
|
||||
},
|
||||
setNightMode: (nightMode) => set({ nightMode }),
|
||||
setStringifiedData: (data) =>
|
||||
set((state) => ({
|
||||
stringifiedData: { ...state.stringifiedData, ...data },
|
||||
})),
|
||||
setPopup: (popupData) => {
|
||||
set({ popup: popupData ? popupData.popup : undefined });
|
||||
},
|
||||
setPage: (pageData) => {
|
||||
set({ page: pageData.page });
|
||||
},
|
||||
}));
|
||||
|
||||
@@ -86,7 +86,7 @@ pilotSocket.on("connect", () => {
|
||||
usePilotConnectionStore.setState({ status: "connected", message: "" });
|
||||
const { logoffTime, selectedStation, debug } = usePilotConnectionStore.getState();
|
||||
dispatchSocket.disconnect();
|
||||
useAudioStore.getState().connect("LST_01", selectedStation?.bosCallsignShort || "pilot");
|
||||
useAudioStore.getState().connect(undefined, selectedStation?.bosCallsignShort || "pilot");
|
||||
|
||||
pilotSocket.emit("connect-pilot", {
|
||||
logoffTime,
|
||||
@@ -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();
|
||||
});
|
||||
|
||||
@@ -142,11 +142,13 @@ pilotSocket.on("mission-alert", (data: Mission & { Stations: Station[] }) => {
|
||||
});
|
||||
|
||||
pilotSocket.on("sds-message", (sdsMessage: MissionSdsLog) => {
|
||||
console.log("Received sds-message via socket:", sdsMessage);
|
||||
const station = usePilotConnectionStore.getState().selectedStation;
|
||||
if (!station) return;
|
||||
useMrtStore.getState().setPage({
|
||||
page: "sds",
|
||||
station,
|
||||
sdsMessage,
|
||||
useMrtStore.getState().setPopup({
|
||||
popup: "sds-received",
|
||||
});
|
||||
useMrtStore.getState().setStringifiedData({
|
||||
sdsText: sdsMessage.data.message,
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import { Mission, Station, User } from "@repo/db";
|
||||
import { DisplayLineProps } from "(app)/pilot/_components/dme/Dme";
|
||||
import { create } from "zustand";
|
||||
import { syncTabs } from "zustand-sync-tabs";
|
||||
|
||||
interface SetHomePageParams {
|
||||
page: "home";
|
||||
@@ -45,197 +44,190 @@ interface MrtStore {
|
||||
|
||||
let interval: NodeJS.Timeout | null = null;
|
||||
|
||||
export const useDmeStore = create<MrtStore>(
|
||||
syncTabs(
|
||||
(set) => ({
|
||||
page: "home",
|
||||
pageData: {
|
||||
message: "",
|
||||
},
|
||||
lines: [
|
||||
{
|
||||
textLeft: "",
|
||||
},
|
||||
{
|
||||
textMid: "VAR . DME# No Data",
|
||||
textSize: "2",
|
||||
},
|
||||
{
|
||||
textLeft: "",
|
||||
},
|
||||
],
|
||||
setLines: (lines) => set({ lines }),
|
||||
latestMission: null,
|
||||
setPage: (pageData) => {
|
||||
if (interval) clearInterval(interval);
|
||||
switch (pageData.page) {
|
||||
case "home": {
|
||||
const setHomePage = () =>
|
||||
set({
|
||||
page: "home",
|
||||
lines: [
|
||||
{
|
||||
textMid: pageData.station.bosCallsign
|
||||
? `${pageData.station.bosCallsign}`
|
||||
: "no Data",
|
||||
style: { fontWeight: "bold" },
|
||||
},
|
||||
{ textMid: "⠀" },
|
||||
{
|
||||
textMid: new Date().toLocaleDateString("de-DE", {
|
||||
year: "numeric",
|
||||
month: "2-digit",
|
||||
day: "2-digit",
|
||||
}),
|
||||
},
|
||||
{
|
||||
textMid: new Date().toLocaleTimeString(),
|
||||
style: { fontWeight: "bold" },
|
||||
},
|
||||
{ textMid: "⠀" },
|
||||
{
|
||||
textMid: `${pageData.user.lastname} ${pageData.user.firstname}`,
|
||||
},
|
||||
{ textMid: "⠀" },
|
||||
],
|
||||
});
|
||||
setHomePage();
|
||||
|
||||
interval = setInterval(() => {
|
||||
setHomePage();
|
||||
}, 1000);
|
||||
break;
|
||||
}
|
||||
|
||||
case "new-mission": {
|
||||
set({
|
||||
page: "new-mission",
|
||||
lines: [
|
||||
{ textMid: "⠀" },
|
||||
{
|
||||
textMid: "new mission received",
|
||||
style: { fontWeight: "bold" },
|
||||
},
|
||||
{ textMid: "⠀" },
|
||||
],
|
||||
});
|
||||
break;
|
||||
}
|
||||
case "mission": {
|
||||
set({
|
||||
latestMission: pageData.mission,
|
||||
page: "mission",
|
||||
lines: [
|
||||
{
|
||||
textLeft: `${pageData.mission.missionKeywordAbbreviation}`,
|
||||
textRight: pageData.mission.Stations.map((s) => s.bosCallsignShort).join(","),
|
||||
style: { fontWeight: "bold" },
|
||||
},
|
||||
...(pageData.mission.type == "primär"
|
||||
? [
|
||||
{
|
||||
textMid: `${pageData.mission.missionKeywordName}`,
|
||||
style: { fontWeight: "bold" },
|
||||
},
|
||||
]
|
||||
: []),
|
||||
|
||||
{ textLeft: `${pageData.mission.addressStreet}` },
|
||||
{
|
||||
textLeft: `${pageData.mission.addressZip} ${pageData.mission.addressCity}`,
|
||||
},
|
||||
{
|
||||
textMid: "Weitere Standortinformationen:",
|
||||
style: { fontWeight: "bold" },
|
||||
},
|
||||
{
|
||||
textLeft: pageData.mission.addressAdditionalInfo || "keine Daten",
|
||||
},
|
||||
...(pageData.mission.type === "sekundär"
|
||||
? [
|
||||
{
|
||||
textMid: "Zielort:",
|
||||
style: { fontWeight: "bold" },
|
||||
},
|
||||
{
|
||||
textLeft: pageData.mission.addressMissionDestination || "keine Daten",
|
||||
},
|
||||
]
|
||||
: []),
|
||||
...(pageData.mission.missionPatientInfo &&
|
||||
pageData.mission.missionPatientInfo.length > 0
|
||||
? [
|
||||
{
|
||||
textMid: "Patienteninfos:",
|
||||
style: { fontWeight: "bold" },
|
||||
},
|
||||
{
|
||||
textLeft: pageData.mission.missionPatientInfo,
|
||||
},
|
||||
]
|
||||
: []),
|
||||
...(pageData.mission.missionAdditionalInfo &&
|
||||
pageData.mission.missionAdditionalInfo.length > 0
|
||||
? [
|
||||
{
|
||||
textMid: "Weitere Infos:",
|
||||
style: { fontWeight: "bold" },
|
||||
},
|
||||
{
|
||||
textLeft: pageData.mission.missionAdditionalInfo,
|
||||
},
|
||||
]
|
||||
: []),
|
||||
],
|
||||
});
|
||||
break;
|
||||
}
|
||||
case "error": {
|
||||
set({
|
||||
page: "error",
|
||||
lines: [
|
||||
{ textMid: "Fehler:" },
|
||||
{
|
||||
textMid: pageData.error,
|
||||
style: { fontWeight: "bold" },
|
||||
},
|
||||
{ textMid: "⠀" },
|
||||
],
|
||||
});
|
||||
break;
|
||||
}
|
||||
case "acknowledge": {
|
||||
set({
|
||||
page: "acknowledge",
|
||||
lines: [
|
||||
{ textMid: "⠀" },
|
||||
{
|
||||
textMid: "Einsatz angenommen",
|
||||
style: { fontWeight: "bold" },
|
||||
},
|
||||
{ textMid: "⠀" },
|
||||
],
|
||||
});
|
||||
break;
|
||||
}
|
||||
default:
|
||||
set({
|
||||
page: "error",
|
||||
lines: [
|
||||
{ textMid: "Fehler:" },
|
||||
{
|
||||
textMid: `Unbekannte Seite`,
|
||||
style: { fontWeight: "bold" },
|
||||
},
|
||||
{ textMid: "⠀" },
|
||||
],
|
||||
});
|
||||
break;
|
||||
}
|
||||
},
|
||||
}),
|
||||
export const useDmeStore = create<MrtStore>((set) => ({
|
||||
page: "home",
|
||||
pageData: {
|
||||
message: "",
|
||||
},
|
||||
lines: [
|
||||
{
|
||||
name: "dme-store", // unique name
|
||||
textLeft: "",
|
||||
},
|
||||
),
|
||||
);
|
||||
{
|
||||
textMid: "VAR . DME# No Data",
|
||||
textSize: "2",
|
||||
},
|
||||
{
|
||||
textLeft: "",
|
||||
},
|
||||
],
|
||||
setLines: (lines) => set({ lines }),
|
||||
latestMission: null,
|
||||
setPage: (pageData) => {
|
||||
if (interval) clearInterval(interval);
|
||||
switch (pageData.page) {
|
||||
case "home": {
|
||||
const setHomePage = () =>
|
||||
set({
|
||||
page: "home",
|
||||
lines: [
|
||||
{
|
||||
textMid: pageData.station.bosCallsign
|
||||
? `${pageData.station.bosCallsign}`
|
||||
: "no Data",
|
||||
style: { fontWeight: "bold" },
|
||||
},
|
||||
{ textMid: "⠀" },
|
||||
{
|
||||
textMid: new Date().toLocaleDateString("de-DE", {
|
||||
year: "numeric",
|
||||
month: "2-digit",
|
||||
day: "2-digit",
|
||||
}),
|
||||
},
|
||||
{
|
||||
textMid: new Date().toLocaleTimeString(),
|
||||
style: { fontWeight: "bold" },
|
||||
},
|
||||
{ textMid: "⠀" },
|
||||
{
|
||||
textMid: `${pageData.user.lastname} ${pageData.user.firstname}`,
|
||||
},
|
||||
{ textMid: "⠀" },
|
||||
],
|
||||
});
|
||||
setHomePage();
|
||||
|
||||
interval = setInterval(() => {
|
||||
setHomePage();
|
||||
}, 1000);
|
||||
break;
|
||||
}
|
||||
|
||||
case "new-mission": {
|
||||
set({
|
||||
page: "new-mission",
|
||||
lines: [
|
||||
{ textMid: "⠀" },
|
||||
{
|
||||
textMid: "new mission received",
|
||||
style: { fontWeight: "bold" },
|
||||
},
|
||||
{ textMid: "⠀" },
|
||||
],
|
||||
});
|
||||
break;
|
||||
}
|
||||
case "mission": {
|
||||
set({
|
||||
latestMission: pageData.mission,
|
||||
page: "mission",
|
||||
lines: [
|
||||
{
|
||||
textLeft: `${pageData.mission.missionKeywordAbbreviation}`,
|
||||
textRight: pageData.mission.Stations.map((s) => s.bosCallsignShort).join(","),
|
||||
style: { fontWeight: "bold" },
|
||||
},
|
||||
...(pageData.mission.type == "primär"
|
||||
? [
|
||||
{
|
||||
textMid: `${pageData.mission.missionKeywordName}`,
|
||||
style: { fontWeight: "bold" },
|
||||
},
|
||||
]
|
||||
: []),
|
||||
|
||||
{ textLeft: `${pageData.mission.addressStreet}` },
|
||||
{
|
||||
textLeft: `${pageData.mission.addressZip} ${pageData.mission.addressCity}`,
|
||||
},
|
||||
{
|
||||
textMid: "Weitere Standortinformationen:",
|
||||
style: { fontWeight: "bold" },
|
||||
},
|
||||
{
|
||||
textLeft: pageData.mission.addressAdditionalInfo || "keine Daten",
|
||||
},
|
||||
...(pageData.mission.type === "sekundär"
|
||||
? [
|
||||
{
|
||||
textMid: "Zielort:",
|
||||
style: { fontWeight: "bold" },
|
||||
},
|
||||
{
|
||||
textLeft: pageData.mission.addressMissionDestination || "keine Daten",
|
||||
},
|
||||
]
|
||||
: []),
|
||||
...(pageData.mission.missionPatientInfo &&
|
||||
pageData.mission.missionPatientInfo.length > 0
|
||||
? [
|
||||
{
|
||||
textMid: "Patienteninfos:",
|
||||
style: { fontWeight: "bold" },
|
||||
},
|
||||
{
|
||||
textLeft: pageData.mission.missionPatientInfo,
|
||||
},
|
||||
]
|
||||
: []),
|
||||
...(pageData.mission.missionAdditionalInfo &&
|
||||
pageData.mission.missionAdditionalInfo.length > 0
|
||||
? [
|
||||
{
|
||||
textMid: "Weitere Infos:",
|
||||
style: { fontWeight: "bold" },
|
||||
},
|
||||
{
|
||||
textLeft: pageData.mission.missionAdditionalInfo,
|
||||
},
|
||||
]
|
||||
: []),
|
||||
],
|
||||
});
|
||||
break;
|
||||
}
|
||||
case "error": {
|
||||
set({
|
||||
page: "error",
|
||||
lines: [
|
||||
{ textMid: "Fehler:" },
|
||||
{
|
||||
textMid: pageData.error,
|
||||
style: { fontWeight: "bold" },
|
||||
},
|
||||
{ textMid: "⠀" },
|
||||
],
|
||||
});
|
||||
break;
|
||||
}
|
||||
case "acknowledge": {
|
||||
set({
|
||||
page: "acknowledge",
|
||||
lines: [
|
||||
{ textMid: "⠀" },
|
||||
{
|
||||
textMid: "Einsatz angenommen",
|
||||
style: { fontWeight: "bold" },
|
||||
},
|
||||
{ textMid: "⠀" },
|
||||
],
|
||||
});
|
||||
break;
|
||||
}
|
||||
default:
|
||||
set({
|
||||
page: "error",
|
||||
lines: [
|
||||
{ textMid: "Fehler:" },
|
||||
{
|
||||
textMid: `Unbekannte Seite`,
|
||||
style: { fontWeight: "bold" },
|
||||
},
|
||||
{ textMid: "⠀" },
|
||||
],
|
||||
});
|
||||
break;
|
||||
}
|
||||
},
|
||||
}));
|
||||
|
||||
Reference in New Issue
Block a user