diff --git a/src/app/contact/hooks/useContactData.ts b/src/app/contact/hooks/useContactData.ts new file mode 100644 index 0000000..c4a4ea1 --- /dev/null +++ b/src/app/contact/hooks/useContactData.ts @@ -0,0 +1,8 @@ +import { useMutation } from "@tanstack/react-query"; +import * as api from "../service/Service"; + +export const useContactUs = () => { + return useMutation({ + mutationFn: api.contactUs, + }); +}; diff --git a/src/app/contact/page.tsx b/src/app/contact/page.tsx index 91d3a5a..0316866 100644 --- a/src/app/contact/page.tsx +++ b/src/app/contact/page.tsx @@ -1,3 +1,4 @@ +'use client' import Input from '@/components/Input' import { Textarea } from '@/components/ui/textarea' import { Button } from '@/components/ui/button' @@ -5,8 +6,33 @@ import Layout from '@/hoc/Layout' import { NextPage } from 'next' import Image from 'next/image' import { Call, Location, Sms } from 'iconsax-react' +import { useForm } from 'react-hook-form' +import { ContactUsType } from './types/Types' +import { useContactUs } from './hooks/useContactData' +import { useState } from 'react' +import { toast } from '@/components/Toast' +import { extractErrorMessage } from '@/helpers/errorUtils' const ContactPage: NextPage = () => { + + const { mutate: contactUs, isPending } = useContactUs() + const { register, handleSubmit, reset, formState: { errors } } = useForm() + const [successMessage, setSuccessMessage] = useState('') + + const onSubmit = (data: ContactUsType) => { + contactUs(data, { + onSuccess: () => { + toast('پیام شما با موفقیت ارسال شد.', 'success') + setSuccessMessage('پیام شما با موفقیت ارسال شد.') + reset() + setTimeout(() => setSuccessMessage(''), 5000) + }, + onError: (error) => { + toast(extractErrorMessage(error), 'error') + } + }) + } + return (
@@ -15,26 +41,47 @@ const ContactPage: NextPage = () => {

ارتباط با ما

اطلاعات تماس و متن پیام خود را وارد کنید

-
+ {successMessage && ( +
+ {successMessage} +
+ )} + +
+ {errors.fullName && ( +

{errors.fullName.message}

+ )} + - + {errors.email_phone && ( +

{errors.email_phone.message}

+ )}