cleaned code, added hpg validation in Mission Marker

This commit is contained in:
PxlLoewe
2025-05-22 01:10:08 -07:00
parent 8a4b42f02b
commit 05e74077a5
7 changed files with 209 additions and 296 deletions

View File

@@ -31,16 +31,18 @@ import {
import { usePannelStore } from "_store/pannelStore";
import { useSession } from "next-auth/react";
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import {
deleteMissionAPI,
editMissionAPI,
sendMissionAPI,
} from "querys/missions";
import { deleteMissionAPI, editMissionAPI, sendMissionAPI } from "querys/missions";
import { getConnectedAircraftsAPI } from "querys/aircrafts";
import { getStationsAPI } from "querys/stations";
import { useDispatchConnectionStore } from "_store/dispatch/connectionStore";
const Einsatzdetails = ({ mission }: { mission: Mission }) => {
const Einsatzdetails = ({
mission,
hpgNeedsAttention,
}: {
mission: Mission;
hpgNeedsAttention?: boolean;
}) => {
const queryClient = useQueryClient();
const deleteMissionMutation = useMutation({
mutationKey: ["missions"],
@@ -67,13 +69,8 @@ const Einsatzdetails = ({ mission }: { mission: Mission }) => {
});
const editMissionMutation = useMutation({
mutationKey: ["missions"],
mutationFn: ({
id,
mission,
}: {
id: number;
mission: Prisma.MissionUpdateInput;
}) => editMissionAPI(id, mission),
mutationFn: ({ id, mission }: { id: number; mission: Prisma.MissionUpdateInput }) =>
editMissionAPI(id, mission),
onSuccess: () => {
toast.success("Gespeichert");
queryClient.invalidateQueries({
@@ -81,9 +78,9 @@ const Einsatzdetails = ({ mission }: { mission: Mission }) => {
});
},
});
const dispatcherConnected =
useDispatchConnectionStore((s) => s.status) === "connected";
const dispatcherConnected = useDispatchConnectionStore((s) => s.status) === "connected";
const { setMissionFormValues, setOpen } = usePannelStore((state) => state);
const [ignoreHpg, setIgnoreHpg] = useState(false);
return (
<div className="p-4 text-base-content">
<div className="flex items-center justify-between mb-3">
@@ -170,6 +167,8 @@ const Einsatzdetails = ({ mission }: { mission: Mission }) => {
<input
type="checkbox"
className="checkbox checkbox-sm checkbox-primary"
checked={ignoreHpg}
onChange={(e) => setIgnoreHpg(e.target.checked)}
/>
<span className="label-text font-semibold leading-6">
Ohne HPG-Mission alarmieren
@@ -178,9 +177,7 @@ const Einsatzdetails = ({ mission }: { mission: Mission }) => {
</div>
<div className="flex items-center gap-2 w-full">
{(mission.hpgValidationState === HpgValidationState.VALID ||
mission.hpgValidationState ===
HpgValidationState.NOT_VALIDATED) && (
{(!hpgNeedsAttention || ignoreHpg) && (
<button
className="btn btn-sm btn-info btn-outline flex-3"
onClick={() => sendAlertMutation.mutate(mission.id)}
@@ -190,45 +187,31 @@ const Einsatzdetails = ({ mission }: { mission: Mission }) => {
</span>
</button>
)}
{(mission.hpgValidationState === HpgValidationState.PENDING ||
mission.hpgValidationState === HpgValidationState.HPG_BUSY ||
mission.hpgValidationState ===
HpgValidationState.HPG_DISCONNECT ||
mission.hpgValidationState === HpgValidationState.INVALID ||
HpgValidationState.HPG_INVALID_MISSION) &&
mission.hpgValidationState !== HpgValidationState.NOT_VALIDATED &&
mission.hpgValidationState !==
HpgValidationState.POSITION_AMANDED &&
mission.hpgValidationState !== HpgValidationState.VALID && (
<button
className="btn btn-sm btn-info btn-outline flex-3"
onClick={() => sendAlertMutation.mutate(mission.id)}
disabled
>
<span className="flex items-center gap-2">
{mission.hpgValidationState ===
HpgValidationState.PENDING && (
<div>
<span className="loading loading-spinner loading-md"></span>{" "}
HPG-Validierung läuft...
</div>
)}
{mission.hpgValidationState ===
HpgValidationState.HPG_BUSY && "HPG-Client busy"}
{mission.hpgValidationState ===
HpgValidationState.HPG_DISCONNECT &&
"HPG-Client nicht verbunden"}
{mission.hpgValidationState ===
HpgValidationState.INVALID && "HPG-Client fehlerhaft"}
{mission.hpgValidationState ===
HpgValidationState.HPG_INVALID_MISSION &&
"Fehlerhafte HPG-Mission"}
</span>
</button>
)}
{hpgNeedsAttention && (
<button
className="btn btn-sm btn-info btn-outline flex-3"
onClick={() => sendAlertMutation.mutate(mission.id)}
disabled
>
<span className="flex items-center gap-2">
{mission.hpgValidationState === HpgValidationState.PENDING && (
<div>
<span className="loading loading-spinner loading-md"></span> HPG-Validierung
läuft...
</div>
)}
{mission.hpgValidationState === HpgValidationState.HPG_BUSY && "HPG-Client busy"}
{mission.hpgValidationState === HpgValidationState.HPG_DISCONNECT &&
"HPG-Client nicht verbunden"}
{mission.hpgValidationState === HpgValidationState.INVALID &&
"HPG-Client fehlerhaft"}
{mission.hpgValidationState === HpgValidationState.HPG_INVALID_MISSION &&
"Fehlerhafte HPG-Mission"}
</span>
</button>
)}
{mission.hpgValidationState ===
HpgValidationState.POSITION_AMANDED && (
{mission.hpgValidationState === HpgValidationState.POSITION_AMANDED && (
<button
className="btn btn-sm btn-warning btn-outline flex-3"
onClick={() => sendAlertMutation.mutate(mission.id)}
@@ -278,16 +261,12 @@ const Patientdetails = ({ mission }: { mission: Mission }) => {
<h2 className="flex items-center gap-2 text-lg font-bold mb-3">
<User /> Patientendetails
</h2>
<p className="text-base-content font-semibold">
{mission.missionPatientInfo}
</p>
<p className="text-base-content font-semibold">{mission.missionPatientInfo}</p>
<div className="divider my-2" />
<h2 className="flex items-center gap-2 text-lg font-bold mb-3">
<Cross /> Einsatzinformationen
</h2>
<p className="text-base-content font-semibold">
{mission.missionAdditionalInfo}
</p>
<p className="text-base-content font-semibold">{mission.missionAdditionalInfo}</p>
</div>
);
};
@@ -303,13 +282,8 @@ const Rettungsmittel = ({ mission }: { mission: Mission }) => {
});
const updateMissionMutation = useMutation({
mutationKey: ["missions", "stations-mission", mission.id],
mutationFn: ({
id,
missionEdit,
}: {
id: number;
missionEdit: Prisma.MissionUpdateInput;
}) => editMissionAPI(id, missionEdit),
mutationFn: ({ id, missionEdit }: { id: number; missionEdit: Prisma.MissionUpdateInput }) =>
editMissionAPI(id, missionEdit),
onError: (error) => {
console.error(error);
@@ -323,17 +297,15 @@ const Rettungsmittel = ({ mission }: { mission: Mission }) => {
},
});
const { data: missionStations, refetch: refetchMissionStationIds } = useQuery(
{
queryKey: ["stations-mission", mission.id],
queryFn: () =>
getStationsAPI({
id: {
in: mission.missionStationIds,
},
}),
},
);
const { data: missionStations, refetch: refetchMissionStationIds } = useQuery({
queryKey: ["stations-mission", mission.id],
queryFn: () =>
getStationsAPI({
id: {
in: mission.missionStationIds,
},
}),
});
useEffect(() => {
refetchMissionStationIds();
}, [mission.missionStationIds, refetchMissionStationIds]);
@@ -426,22 +398,14 @@ const Rettungsmittel = ({ mission }: { mission: Mission }) => {
<select
className="select select-sm select-primary select-bordered flex-1"
onChange={(e) => {
const selected = allStations?.find(
(s) => s.id.toString() === e.target.value,
);
const selected = allStations?.find((s) => s.id.toString() === e.target.value);
if (selected) {
setSelectedStation(selected);
} else {
setSelectedStation(
e.target.value as "ambulance" | "police" | "firebrigade",
);
setSelectedStation(e.target.value as "ambulance" | "police" | "firebrigade");
}
}}
value={
typeof selectedStation === "string"
? selectedStation
: selectedStation?.id
}
value={typeof selectedStation === "string" ? selectedStation : selectedStation?.id}
>
{allStations
?.filter((s) => !mission.missionStationIds.includes(s.id))
@@ -498,17 +462,11 @@ const FMSStatusHistory = ({ mission }: { mission: Mission }) => {
const [note, setNote] = useState("");
const queryClient = useQueryClient();
const dispatcherConnected =
useDispatchConnectionStore((s) => s.status) === "connected";
const dispatcherConnected = useDispatchConnectionStore((s) => s.status) === "connected";
const editMissionMutation = useMutation({
mutationFn: ({
id,
mission,
}: {
id: number;
mission: Partial<Prisma.MissionUpdateInput>;
}) => editMissionAPI(id, mission),
mutationFn: ({ id, mission }: { id: number; mission: Partial<Prisma.MissionUpdateInput> }) =>
editMissionAPI(id, mission),
mutationKey: ["missions"],
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ["missions"] });
@@ -608,9 +566,7 @@ const FMSStatusHistory = ({ mission }: { mission: Mission }) => {
>
{entry.data.newFMSstatus}
</span>
<span className="text-base-content">
{entry.data.station.bosCallsign}
</span>
<span className="text-base-content">{entry.data.station.bosCallsign}</span>
</li>
);
if (entry.type === "message-log" || entry.type === "sds-log")
@@ -651,9 +607,7 @@ const FMSStatusHistory = ({ mission }: { mission: Mission }) => {
</>
)}
</span>
<span className="text-base-content">
{entry.data.message}
</span>
<span className="text-base-content">{entry.data.message}</span>
</li>
);