diff --git a/auth.config.ts b/auth.config.ts index 590c219..2ffd20f 100644 --- a/auth.config.ts +++ b/auth.config.ts @@ -16,7 +16,7 @@ declare module "next-auth" { firstName?: string | null; lastName?: string | null; address?: string | null; - phoneNumber?: string | null; + phoneNumber?: number | null; } } diff --git a/src/app/_components/userpro/UserPro.tsx b/src/app/_components/userpro/UserPro.tsx deleted file mode 100644 index 1cda9db..0000000 --- a/src/app/_components/userpro/UserPro.tsx +++ /dev/null @@ -1,53 +0,0 @@ -"use client"; -import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; -import { useSession } from "next-auth/react"; -import { Button } from "@/components/ui/button"; - -import React from "react"; - -export const UserProfile = () => { - const session = useSession(); - console.log(session); - - const user = session.data?.user; - - return ( - <> -
-
- - - CN - - -

{user?.name}

-
-
-

Email:

-

{user?.email}

-
-
-

Phone:

-

96750533

-
-
-

Address:

-

Sapporo

-
- -
-
-
-
- - -
-
- - ); -}; diff --git a/src/app/_components/userpro/UserProfile.tsx b/src/app/_components/userpro/UserProfile.tsx new file mode 100644 index 0000000..825d72d --- /dev/null +++ b/src/app/_components/userpro/UserProfile.tsx @@ -0,0 +1,197 @@ +"use client"; +import React, { + useState, + ChangeEvent, + FormEvent, + useTransition, + useEffect, +} from "react"; +import { useSession } from "next-auth/react"; +import { + Form, + FormControl, + FormField, + FormItem, + FormLabel, + FormMessage, +} from "@/components/ui/form"; +import { useForm } from "react-hook-form"; +import { zodResolver } from "@hookform/resolvers/zod"; +import * as z from "zod"; +import { Button } from "@/components/ui/button"; +import { editProfileSchema } from "@/lib/schema"; +import { Input } from "@/components/ui/input"; + +type userDataType = { + firstName: string | undefined; + lastName: string | undefined; + phoneNumber: number | undefined; + address: string | undefined; + email: string | undefined; +}; + +function UserProfile() { + const session = useSession(); + const [isPending, startTransition] = useTransition(); + const user = session.data?.user; + + const form = useForm>({ + resolver: zodResolver(editProfileSchema), + mode: "onChange", + defaultValues: { + firstName: "", + lastName: "", + phoneNumber: 0, + address: "", + email: "", + }, + reValidateMode: "onChange", + shouldUnregister: true, + }); + console.log(user); + + useEffect(() => { + if (user) { + startTransition(() => { + form.setValue("firstName", user?.firstName || ""); + form.setValue("lastName", user?.lastName || ""); + form.setValue("phoneNumber", user?.phoneNumber || 0); + form.setValue("address", user?.address || ""); + form.setValue("email", user?.email || ""); + }); + } + }, [user]); + + console.log(form.getValues()); + const onSubmit = async (values: z.infer) => { + console.log(values); + }; + + return ( +
+
+ +
+ ( + + Firstname + + + + + + )} + />{" "} + ( + + Lastname + + + + + + )} + /> + ( + + PhoneNumber + + + + + + )} + /> + ( + + address + + + + + + )} + /> + ( + + email + + + + + + )} + /> + +
+ {/* */} +
+ +
+ ); +} + +export default UserProfile; diff --git a/src/app/userpro/page.tsx b/src/app/userpro/page.tsx index 09d1e9e..e25bb1c 100644 --- a/src/app/userpro/page.tsx +++ b/src/app/userpro/page.tsx @@ -1,16 +1,16 @@ -import React from 'react' -import { UserProfile } from '../_components/userpro/UserPro' -import Header from '../_components/Header/Header' -import Footer from '../_components/Footer/Footer' - +import React from "react"; +import Header from "../_components/Header/Header"; +import Footer from "../_components/Footer/Footer"; +import UserProfile from "../_components/userpro/UserProfile"; + function userpro() { return ( -
-
- -
-
- ) +
+
+ +
+ ); } - -export default userpro + +export default userpro; diff --git a/src/lib/schema.tsx b/src/lib/schema.tsx index 438f48a..65af742 100644 --- a/src/lib/schema.tsx +++ b/src/lib/schema.tsx @@ -84,3 +84,16 @@ export const NewCarSchema = z.object({ message: "Must fill", }), }); +export const editProfileSchema = z.object({ + firstName: z.string().min(1, { + message: "Must fill", + }), + lastName: z.string().min(1, { + message: "Must fill", + }), + phoneNumber: z.coerce.number().min(8, { + message: "Phone number must have 8 digits", + }), + email: z.string().email(), + address: z.string().optional(), +});