added Mission Closed Toeast, enhanced logic
This commit is contained in:
@@ -11,6 +11,7 @@ import { useMapStore } from "_store/mapStore";
|
||||
import { AdminMessageToast } from "_components/customToasts/AdminMessage";
|
||||
import { pilotSocket } from "(app)/pilot/socket";
|
||||
import { QUICK_RESPONSE, StatusToast } from "_components/customToasts/StationStatusToast";
|
||||
import { MissionAutoCloseToast } from "_components/customToasts/MissionAutoClose";
|
||||
|
||||
export function QueryProvider({ children }: { children: ReactNode }) {
|
||||
const mapStore = useMapStore((s) => s);
|
||||
@@ -79,6 +80,14 @@ export function QueryProvider({ children }: { children: ReactNode }) {
|
||||
duration: 60000,
|
||||
});
|
||||
break;
|
||||
case "mission-auto-close":
|
||||
toast.custom(
|
||||
(t) => <MissionAutoCloseToast event={notification} t={t} mapStore={mapStore} />,
|
||||
{
|
||||
duration: 60000,
|
||||
},
|
||||
);
|
||||
break;
|
||||
default:
|
||||
toast("unbekanntes Notification-Event");
|
||||
break;
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
import { getPublicUser, MissionAutoClose, Prisma } from "@repo/db";
|
||||
import { JsonValueType } from "@repo/db/zod";
|
||||
import { useMutation, useQueryClient } from "@tanstack/react-query";
|
||||
import { BaseNotification } from "_components/customToasts/BaseNotification";
|
||||
import { editMissionAPI } from "_querys/missions";
|
||||
import { MapStore } from "_store/mapStore";
|
||||
import { Clock, X } from "lucide-react";
|
||||
import { useSession } from "next-auth/react";
|
||||
import toast, { Toast } from "react-hot-toast";
|
||||
|
||||
export const MissionAutoCloseToast = ({
|
||||
event,
|
||||
t,
|
||||
mapStore,
|
||||
}: {
|
||||
event: MissionAutoClose;
|
||||
t: Toast;
|
||||
mapStore: MapStore;
|
||||
}) => {
|
||||
const { data: session } = useSession();
|
||||
const queryClient = useQueryClient();
|
||||
const editMissionMutation = useMutation({
|
||||
mutationFn: ({ id, mission }: { id: number; mission: Partial<Prisma.MissionUpdateInput> }) =>
|
||||
editMissionAPI(id, mission),
|
||||
mutationKey: ["missions"],
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({
|
||||
queryKey: ["missions"],
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
return (
|
||||
<BaseNotification icon={<Clock />} className="flex flex-row">
|
||||
<div className="flex-1">
|
||||
<h1 className="text-warning font-bold">Inaktiver Einsatz wurde automatisch geschlossen</h1>
|
||||
<p>{event.message}</p>
|
||||
</div>
|
||||
<div className="ml-11">
|
||||
<button
|
||||
className="btn"
|
||||
onClick={async () => {
|
||||
if (!session?.user) return;
|
||||
const mission = await editMissionMutation.mutateAsync({
|
||||
id: event.data.missionId,
|
||||
mission: {
|
||||
state: "running",
|
||||
missionLog: {
|
||||
push: {
|
||||
type: "reopened-log",
|
||||
timeStamp: new Date().toISOString(),
|
||||
data: {
|
||||
user: getPublicUser(session?.user, {
|
||||
ignorePrivacy: true,
|
||||
}) as unknown as JsonValueType,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
mapStore.setMap({
|
||||
zoom: 14,
|
||||
center: {
|
||||
lat: mission.addressLat,
|
||||
lng: mission.addressLng,
|
||||
},
|
||||
});
|
||||
mapStore.setOpenMissionMarker({
|
||||
open: [
|
||||
{
|
||||
id: mission.id,
|
||||
tab: "home",
|
||||
},
|
||||
],
|
||||
close: [],
|
||||
});
|
||||
toast.dismiss(t.id);
|
||||
}}
|
||||
>
|
||||
schließen widerrufen
|
||||
</button>
|
||||
<button className="btn btn-ghost btn-sm" onClick={() => toast.remove(t.id)}>
|
||||
<X size={16} />
|
||||
</button>
|
||||
</div>
|
||||
</BaseNotification>
|
||||
);
|
||||
};
|
||||
@@ -735,10 +735,15 @@ const FMSStatusHistory = ({ mission }: { mission: Mission }) => {
|
||||
<span className="text-base-content">{entry.data.message}</span>
|
||||
</li>
|
||||
);
|
||||
if (entry.type === "alert-log") {
|
||||
const alertReceiver = entry.auto
|
||||
? null
|
||||
: entry.data.station?.bosCallsignShort || entry.data.vehicle;
|
||||
if (
|
||||
entry.type === "alert-log" ||
|
||||
entry.type === "completed-log" ||
|
||||
entry.type === "reopened-log"
|
||||
) {
|
||||
const alertReceiver =
|
||||
entry.auto || entry.type !== "alert-log"
|
||||
? null
|
||||
: entry.data.station?.bosCallsignShort || entry.data.vehicle;
|
||||
return (
|
||||
<li key={index} className="flex items-center gap-2">
|
||||
<span className="text-base-content">
|
||||
@@ -755,8 +760,8 @@ const FMSStatusHistory = ({ mission }: { mission: Mission }) => {
|
||||
>
|
||||
{!entry.auto && (
|
||||
<>
|
||||
{entry.data.user.firstname?.[0]?.toUpperCase() ?? "?"}
|
||||
{entry.data.user.lastname?.[0]?.toUpperCase() ?? "?"}
|
||||
{entry.data.user?.firstname?.[0]?.toUpperCase() ?? "?"}
|
||||
{entry.data.user?.lastname?.[0]?.toUpperCase() ?? "?"}
|
||||
</>
|
||||
)}
|
||||
{entry.auto && "AUTO"}
|
||||
@@ -781,7 +786,15 @@ const FMSStatusHistory = ({ mission }: { mission: Mission }) => {
|
||||
</>
|
||||
)}
|
||||
</span>
|
||||
<span className="text-base-content">Einsatz alarmiert</span>
|
||||
{entry.type === "alert-log" && (
|
||||
<span className="text-base-content">Einsatz alarmiert</span>
|
||||
)}
|
||||
{entry.type === "completed-log" && (
|
||||
<span className="text-base-content">Einsatz abgeschlossen</span>
|
||||
)}
|
||||
{entry.type === "reopened-log" && (
|
||||
<span className="text-base-content">Einsatz wiedereröffnet</span>
|
||||
)}
|
||||
</li>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user