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

@@ -5,10 +5,7 @@ import { zodResolver } from "@hookform/resolvers/zod";
import { BellRing, BookmarkPlus } from "lucide-react";
import { Select } from "_components/Select";
import { KEYWORD_CATEGORY, missionType, Prisma } from "@repo/db";
import {
MissionOptionalDefaults,
MissionOptionalDefaultsSchema,
} from "@repo/db/zod";
import { MissionOptionalDefaults, MissionOptionalDefaultsSchema } from "@repo/db/zod";
import { usePannelStore } from "_store/pannelStore";
import { useSession } from "next-auth/react";
import { toast } from "react-hot-toast";
@@ -23,10 +20,10 @@ import { getKeywordsAPI } from "querys/keywords";
import { getStationsAPI } from "querys/stations";
import { useMapStore } from "_store/mapStore";
import { getConnectedAircraftsAPI } from "querys/aircrafts";
import { HPGValidationRequired } from "helpers/hpgValidationRequired";
export const MissionForm = () => {
const { isEditingMission, editingMissionId, setEditingMission } =
usePannelStore();
const { isEditingMission, editingMissionId, setEditingMission } = usePannelStore();
const queryClient = useQueryClient();
const setSeachOSMElements = useMapStore((s) => s.setSearchElements);
@@ -57,13 +54,8 @@ export const MissionForm = () => {
});
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({
@@ -113,11 +105,11 @@ export const MissionForm = () => {
});
const { missionFormValues, setOpen } = usePannelStore((state) => state);
const validationRequired = /* form.watch("missionStationIds")?.some((id) => {
const aircraft = aircrafts?.find((a) => a.stationId === id);
return aircraft?.posH145active;
}) && form.watch("hpgMissionString")?.length !== 0; */ true;
const validationRequired = HPGValidationRequired(
form.watch("missionStationIds"),
aircrafts,
form.watch("hpgMissionString"),
);
useEffect(() => {
if (session.data?.user.id) {
@@ -159,8 +151,7 @@ export const MissionForm = () => {
disabled
/>
</div>
{(form.formState.errors.addressLat ||
form.formState.errors.addressLng) && (
{(form.formState.errors.addressLat || form.formState.errors.addressLng) && (
<p className="text-error">
Bitte wähle eine Postion übder das Context-Menu über der Karte aus.
</p>
@@ -236,10 +227,7 @@ export const MissionForm = () => {
{...form.register("missionKeywordCategory")}
className="select select-primary select-bordered w-full mb-4"
onChange={(e) => {
form.setValue(
"missionKeywordCategory",
e.target.value as string,
);
form.setValue("missionKeywordCategory", e.target.value as string);
form.setValue("missionKeywordName", null);
form.setValue("missionKeywordAbbreviation", "");
form.setValue("hpgMissionString", "");
@@ -259,14 +247,9 @@ export const MissionForm = () => {
{...form.register("missionKeywordAbbreviation")}
className="select select-primary select-bordered w-full mb-4"
onChange={(e) => {
const keyword = keywords?.find(
(k) => k.abreviation === e.target.value,
);
const keyword = keywords?.find((k) => k.abreviation === e.target.value);
form.setValue("missionKeywordName", keyword?.name || null);
form.setValue(
"missionKeywordAbbreviation",
keyword?.abreviation || null,
);
form.setValue("missionKeywordAbbreviation", keyword?.abreviation || null);
form.setValue("hpgMissionString", "default");
}}
defaultValue="default"
@@ -276,9 +259,7 @@ export const MissionForm = () => {
</option>
{keywords &&
keywords
.filter(
(k) => k.category === form.watch("missionKeywordCategory"),
)
.filter((k) => k.category === form.watch("missionKeywordCategory"))
.map((keyword) => (
<option key={keyword.id} value={keyword.abreviation}>
{keyword.name}
@@ -308,9 +289,7 @@ export const MissionForm = () => {
})}
</select>
{validationRequired && (
<p className="text-sm text-warning">
Szenario wird vor Alarmierung HPG-Validiert.
</p>
<p className="text-sm text-warning">Szenario wird vor Alarmierung HPG-Validiert.</p>
)}
</div>
</>
@@ -339,8 +318,7 @@ export const MissionForm = () => {
{missionFormValues?.addressOSMways?.length && (
<p className="text-sm text-info">
In diesem Einsatz gibt es {missionFormValues?.addressOSMways?.length}{" "}
Gebäude
In diesem Einsatz gibt es {missionFormValues?.addressOSMways?.length} Gebäude
</p>
)}
@@ -350,37 +328,33 @@ export const MissionForm = () => {
<button
type="button"
className="btn btn-primary flex-1"
onClick={form.handleSubmit(
async (mission: MissionOptionalDefaults) => {
try {
const hpgSzenario = mission.hpgMissionString?.split(":")[0];
const newMission = await editMissionMutation.mutateAsync({
id: Number(editingMissionId),
mission: {
...(mission as unknown as Prisma.MissionCreateInput),
missionAdditionalInfo:
!mission.missionAdditionalInfo.length && hpgSzenario
? `HPG-Szenario: ${hpgSzenario}`
: mission.missionAdditionalInfo,
},
});
if (validationRequired) {
await startHpgValidation(newMission.id);
}
toast.success(
`Einsatz ${newMission.id} erfolgreich aktualisiert`,
);
setSeachOSMElements([]); // Reset search elements
setEditingMission(false, null); // Reset editing state
form.reset(); // Reset the form
setOpen(false);
} catch (error) {
toast.error(
`Fehler beim Aktualisieren des Einsatzes: ${(error as Error).message}`,
);
onClick={form.handleSubmit(async (mission: MissionOptionalDefaults) => {
try {
const hpgSzenario = mission.hpgMissionString?.split(":")[0];
const newMission = await editMissionMutation.mutateAsync({
id: Number(editingMissionId),
mission: {
...(mission as unknown as Prisma.MissionCreateInput),
missionAdditionalInfo:
!mission.missionAdditionalInfo.length && hpgSzenario
? `HPG-Szenario: ${hpgSzenario}`
: mission.missionAdditionalInfo,
},
});
if (validationRequired) {
await startHpgValidation(newMission.id);
}
},
)}
toast.success(`Einsatz ${newMission.id} erfolgreich aktualisiert`);
setSeachOSMElements([]); // Reset search elements
setEditingMission(false, null); // Reset editing state
form.reset(); // Reset the form
setOpen(false);
} catch (error) {
toast.error(
`Fehler beim Aktualisieren des Einsatzes: ${(error as Error).message}`,
);
}
})}
>
Änderungen speichern
</button>
@@ -389,66 +363,54 @@ export const MissionForm = () => {
<button
type="submit"
className="btn btn-warning"
onClick={form.handleSubmit(
async (mission: MissionOptionalDefaults) => {
try {
const hpgSzenario =
mission.hpgMissionString?.split(":")[0];
const newMission =
await createMissionMutation.mutateAsync({
...(mission as unknown as Prisma.MissionCreateInput),
missionAdditionalInfo:
!mission.missionAdditionalInfo.length && hpgSzenario
? `HPG-Szenario: ${hpgSzenario}`
: mission.missionAdditionalInfo,
});
if (validationRequired) {
await startHpgValidation(newMission.id, {
alertWhenValid: true,
});
} else {
await sendAlertMutation.mutateAsync(newMission.id);
}
setSeachOSMElements([]); // Reset search elements
setOpen(false);
} catch (error) {
toast.error(
`Fehler beim Erstellen des Einsatzes: ${(error as Error).message}`,
);
onClick={form.handleSubmit(async (mission: MissionOptionalDefaults) => {
try {
const hpgSzenario = mission.hpgMissionString?.split(":")[0];
const newMission = await createMissionMutation.mutateAsync({
...(mission as unknown as Prisma.MissionCreateInput),
missionAdditionalInfo:
!mission.missionAdditionalInfo.length && hpgSzenario
? `HPG-Szenario: ${hpgSzenario}`
: mission.missionAdditionalInfo,
});
if (validationRequired) {
await startHpgValidation(newMission.id, {
alertWhenValid: true,
});
} else {
await sendAlertMutation.mutateAsync(newMission.id);
}
},
)}
setSeachOSMElements([]); // Reset search elements
setOpen(false);
} catch (error) {
toast.error(`Fehler beim Erstellen des Einsatzes: ${(error as Error).message}`);
}
})}
>
<BellRing className="h-4 w-4" /> Alarmieren
</button>
<button
type="submit"
className="btn btn-primary flex-1"
onClick={form.handleSubmit(
async (mission: MissionOptionalDefaults) => {
try {
const hpgSzenario =
mission.hpgMissionString?.split(":")[0];
const newMission =
await createMissionMutation.mutateAsync({
...(mission as unknown as Prisma.MissionCreateInput),
missionAdditionalInfo:
!mission.missionAdditionalInfo.length && hpgSzenario
? `HPG-Szenario: ${hpgSzenario}`
: mission.missionAdditionalInfo,
});
setSeachOSMElements([]); // Reset search elements
await startHpgValidation(newMission.id);
toast.success(`Einsatz ${newMission.publicId} erstellt`);
form.reset();
setOpen(false);
} catch (error) {
toast.error(
`Fehler beim Erstellen des Einsatzes: ${(error as Error).message}`,
);
}
},
)}
onClick={form.handleSubmit(async (mission: MissionOptionalDefaults) => {
try {
const hpgSzenario = mission.hpgMissionString?.split(":")[0];
const newMission = await createMissionMutation.mutateAsync({
...(mission as unknown as Prisma.MissionCreateInput),
missionAdditionalInfo:
!mission.missionAdditionalInfo.length && hpgSzenario
? `HPG-Szenario: ${hpgSzenario}`
: mission.missionAdditionalInfo,
});
setSeachOSMElements([]); // Reset search elements
await startHpgValidation(newMission.id);
toast.success(`Einsatz ${newMission.publicId} erstellt`);
form.reset();
setOpen(false);
} catch (error) {
toast.error(`Fehler beim Erstellen des Einsatzes: ${(error as Error).message}`);
}
})}
>
<BookmarkPlus className="h-5 w-5" /> Einsatz vorbereiten
</button>