diff --git a/ApiCore-Frontend/src/app/(app)/apiaries/[id]/apiary-edit-card.tsx b/ApiCore-Frontend/src/app/(app)/apiaries/[id]/apiary-edit-card.tsx index c8aa620..24a8819 100644 --- a/ApiCore-Frontend/src/app/(app)/apiaries/[id]/apiary-edit-card.tsx +++ b/ApiCore-Frontend/src/app/(app)/apiaries/[id]/apiary-edit-card.tsx @@ -1,24 +1,17 @@ "use client"; import { FormEvent, useState } from "react"; -import { MapPin } from "lucide-react"; import { useMutation, useQueryClient } from "@tanstack/react-query"; import { toast } from "sonner"; import { deactivateApiary, reactivateApiary, updateApiary } from "@/lib/apiaries/api"; -import { ApiError } from "@/lib/auth/api-client"; import { Apiary } from "@/lib/apiaries/types"; +import { errorMessage } from "@/lib/forms/error-message"; import { Button } from "@/components/ui/button"; -import { Badge } from "@/components/ui/badge"; import { Input } from "@/components/ui/input"; -import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; import { ConfirmDialog } from "@/components/confirm-dialog"; -import { - Card, - CardContent, - CardHeader, - CardTitle, -} from "@/components/ui/card"; +import { Field } from "@/components/form/field"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; export function ApiaryEditCard({ apiary }: { apiary: Apiary }) { const queryClient = useQueryClient(); @@ -29,6 +22,8 @@ export function ApiaryEditCard({ apiary }: { apiary: Apiary }) { const [longitude, setLongitude] = useState(apiary.longitude?.toString() ?? ""); const [address, setAddress] = useState(apiary.address ?? ""); const [notes, setNotes] = useState(apiary.notes ?? ""); + const [nameError, setNameError] = useState(null); + const [submitError, setSubmitError] = useState(null); const updateMutation = useMutation({ mutationFn: () => @@ -43,8 +38,10 @@ export function ApiaryEditCard({ apiary }: { apiary: Apiary }) { }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["apiaries"] }); + toast.success("Bienenstand gespeichert"); }, - onError: () => toast.error("Bienenstand konnte nicht gespeichert werden"), + onError: (error) => + setSubmitError(errorMessage(error, "Bienenstand konnte nicht gespeichert werden.")), }); const deactivateMutation = useMutation({ @@ -56,9 +53,7 @@ export function ApiaryEditCard({ apiary }: { apiary: Apiary }) { }); }, onError: (error) => - toast.error( - error instanceof ApiError ? error.message : "Bienenstand konnte nicht deaktiviert werden", - ), + toast.error(errorMessage(error, "Bienenstand konnte nicht deaktiviert werden.")), }); const reactivateMutation = useMutation({ @@ -67,106 +62,120 @@ export function ApiaryEditCard({ apiary }: { apiary: Apiary }) { void queryClient.invalidateQueries({ queryKey: ["apiaries"] }); toast.success("Bienenstand reaktiviert"); }, - onError: () => toast.error("Bienenstand konnte nicht reaktiviert werden"), + onError: (error) => + toast.error(errorMessage(error, "Bienenstand konnte nicht reaktiviert werden.")), }); function handleSubmit(event: FormEvent) { event.preventDefault(); + setSubmitError(null); + if (!name.trim()) { + setNameError("Bitte einen Namen angeben."); + return; + } updateMutation.mutate(); } return ( - -
- - - - {apiary.name} -
- - {apiary.status === "ACTIVE" ? "Aktiv" : "Inaktiv"} - + + Stammdaten -
-
- - setName(event.target.value)} - /> -
-
- -