Improved StationSelect

This commit is contained in:
PxlLoewe
2025-07-15 23:46:22 -07:00
parent 7be21a738a
commit 515ff6d6c3
2 changed files with 59 additions and 12 deletions

View File

@@ -107,8 +107,27 @@ export function StationsSelect({
menuPlacement={menuPlacement}
isMulti={isMulti}
onChange={(v) => {
console.log("Selected values:", v);
setValue(v);
if (!isMulti) return onChange?.(v);
if (!isMulti) {
const singleValue = v as string;
const isVehicle = ["RTW", "FW", "POL"].includes(singleValue);
const hpgAmbulanceState =
singleValue === "RTW" ? HpgState.DISPATCHED : HpgState.NOT_REQUESTED;
const hpgFireEngineState =
singleValue === "FW" ? HpgState.DISPATCHED : HpgState.NOT_REQUESTED;
const hpgPoliceState =
singleValue === "POL" ? HpgState.DISPATCHED : HpgState.NOT_REQUESTED;
onChange?.({
selectedStationIds: isVehicle ? [] : [Number(singleValue)],
hpgAmbulanceState,
hpgFireEngineState,
hpgPoliceState,
});
return;
}
const hpgAmbulanceState = v.includes("RTW") ? HpgState.DISPATCHED : HpgState.NOT_REQUESTED;
const hpgFireEngineState = v.includes("FW") ? HpgState.DISPATCHED : HpgState.NOT_REQUESTED;
const hpgPoliceState = v.includes("POL") ? HpgState.DISPATCHED : HpgState.NOT_REQUESTED;

View File

@@ -370,9 +370,17 @@ const Patientdetails = ({ mission }: { mission: Mission }) => {
const Rettungsmittel = ({ mission }: { mission: Mission }) => {
const queryClient = useQueryClient();
const [selectedStation, setSelectedStation] = useState<number | "RTW" | "POL" | "FW" | null>(
null,
);
const [selectedStation, setSelectedStation] = useState<{
selectedStationId: number | undefined;
hpgAmbulanceState: HpgState;
hpgFireEngineState: HpgState;
hpgPoliceState: HpgState;
}>({
selectedStationId: undefined,
hpgAmbulanceState: HpgState.NOT_REQUESTED,
hpgFireEngineState: HpgState.NOT_REQUESTED,
hpgPoliceState: HpgState.NOT_REQUESTED,
});
const { data: connectedAircrafts } = useQuery({
queryKey: ["aircrafts"],
queryFn: () => getConnectedAircraftsAPI(),
@@ -521,9 +529,14 @@ const Rettungsmittel = ({ mission }: { mission: Mission }) => {
menuPlacement="top"
className="min-w-[320px] flex-1"
isMulti={false}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
onChange={(v: any) => {
setSelectedStation(v);
onChange={(v) => {
console.log("Selected station:", v);
setSelectedStation({
selectedStationId: v?.selectedStationIds[0],
hpgAmbulanceState: mission.hpgAmbulanceState || HpgState.NOT_REQUESTED,
hpgFireEngineState: mission.hpgFireEngineState || HpgState.NOT_REQUESTED,
hpgPoliceState: mission.hpgPoliceState || HpgState.NOT_REQUESTED,
});
}}
selectedStations={mission.missionStationIds}
filterSelected
@@ -536,24 +549,39 @@ const Rettungsmittel = ({ mission }: { mission: Mission }) => {
<button
className="btn btn-sm btn-primary btn-outline"
onClick={async () => {
if (typeof selectedStation === "string") {
if (
selectedStation.hpgAmbulanceState !== "NOT_REQUESTED" ||
selectedStation.hpgFireEngineState !== "NOT_REQUESTED" ||
selectedStation.hpgPoliceState !== "NOT_REQUESTED"
) {
// Determine which vehicle type is selected
let vehicleName: "RTW" | "POL" | "FW" | undefined;
if (selectedStation.hpgAmbulanceState !== "NOT_REQUESTED") {
vehicleName = "RTW";
} else if (selectedStation.hpgPoliceState !== "NOT_REQUESTED") {
vehicleName = "POL";
} else if (selectedStation.hpgFireEngineState !== "NOT_REQUESTED") {
vehicleName = "FW";
}
await sendAlertMutation.mutate({
id: mission.id,
vehicleName: selectedStation,
vehicleName: vehicleName,
});
} else {
if (!selectedStation) return;
if (typeof selectedStation.selectedStationId !== "number") return;
await updateMissionMutation.mutateAsync({
id: mission.id,
missionEdit: {
missionStationIds: {
push: selectedStation,
push: selectedStation.selectedStationId,
},
},
});
await sendAlertMutation.mutate({
id: mission.id,
stationId: selectedStation,
stationId: selectedStation.selectedStationId,
});
}
}}