From 06639e06ec17b79792e6a3c36eab821b80013d34 Mon Sep 17 00:00:00 2001 From: nocnico Date: Thu, 13 Mar 2025 22:48:16 +0100 Subject: [PATCH] User bearbeiten Page --- .../admin/user/[id]/_components/forms.tsx | 169 ++++++++++++++++++ apps/hub/app/(app)/admin/user/[id]/page.tsx | 31 ++-- 2 files changed, 190 insertions(+), 10 deletions(-) create mode 100644 apps/hub/app/(app)/admin/user/[id]/_components/forms.tsx diff --git a/apps/hub/app/(app)/admin/user/[id]/_components/forms.tsx b/apps/hub/app/(app)/admin/user/[id]/_components/forms.tsx new file mode 100644 index 00000000..7cea58d8 --- /dev/null +++ b/apps/hub/app/(app)/admin/user/[id]/_components/forms.tsx @@ -0,0 +1,169 @@ +"use client"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { BADGES, User } from "@repo/db"; +import { useState } from "react"; +import { useForm } from "react-hook-form"; +import { z } from "zod"; +import { updateUser } from "../../../../settings/actions"; +import { toast } from "react-hot-toast"; +import { + PersonIcon, + EnvelopeClosedIcon, + BookmarkIcon, + MixerHorizontalIcon, + LightningBoltIcon, + LockOpen1Icon, + HobbyKnifeIcon, + HeartIcon, +} from "@radix-ui/react-icons"; +import { Button } from "../../../../../_components/ui/Button"; +import { Select } from "../../../../../_components/ui/Select"; + +interface ProfileFormProps { + user: User | null; +} + +export const ProfileForm: React.FC = ({ user }) => { + const schema = z.object({ + firstname: z.string().min(2).max(30), + lastname: z.string().min(2).max(30), + email: z.string().email({ + message: "Bitte gebe eine gültige E-Mail Adresse ein", + }), + }); + const [isLoading, setIsLoading] = useState(false); + type IFormInput = z.infer; + + const form = useForm({ + defaultValues: { + firstname: user?.firstname, + lastname: user?.lastname, + email: user?.email, + }, + resolver: zodResolver(schema), + }); + return ( +
{ + setIsLoading(true); + await updateUser(values); + form.reset(values); + setIsLoading(false); + toast.success("Deine Änderungen wurden gespeichert!", { + style: { + background: "var(--color-base-100)", + color: "var(--color-base-content)", + }, + }); + })} + > +

+ User bearbeiten +

+
+ + {form.formState.errors.firstname && ( +

+ {form.formState.errors.firstname.message} +

+ )} + + {form.formState.errors.lastname && ( +

+ {form.formState.errors.lastname?.message} +

+ )} + + {form.formState.errors.email && ( +

{form.formState.errors.email?.message}

+ )} +