diff --git a/src/app/[name]/(Dialogs)/report/hooks/useReportData.ts b/src/app/[name]/(Dialogs)/report/hooks/useReportData.ts new file mode 100644 index 0000000..e8050a7 --- /dev/null +++ b/src/app/[name]/(Dialogs)/report/hooks/useReportData.ts @@ -0,0 +1,8 @@ +import { useMutation } from "@tanstack/react-query"; +import * as api from "../service/ReportService"; + +export const useCreateReport = () => { + return useMutation({ + mutationFn: api.createReport, + }); +}; diff --git a/src/app/[name]/(Dialogs)/report/page.tsx b/src/app/[name]/(Dialogs)/report/page.tsx index b83f22c..b5458ec 100644 --- a/src/app/[name]/(Dialogs)/report/page.tsx +++ b/src/app/[name]/(Dialogs)/report/page.tsx @@ -2,21 +2,51 @@ import Button from '@/components/button/PrimaryButton'; import InputField from '@/components/input/InputField'; +import { useFormik } from 'formik'; import { ArrowLeft } from 'iconsax-react'; import Image from 'next/image' import { useRouter } from 'next/navigation'; import React from 'react' import { useTranslation } from 'react-i18next' +import { CreateReportType } from './types/Types'; +import * as Yup from 'yup'; +import { useCreateReport } from './hooks/useReportData'; +import { toast } from '@/components/Toast'; +import { extractErrorMessage } from '@/lib/func'; type Props = object; function ReportIndex({ }: Props) { - const router = useRouter(); + const router = useRouter(); + const { mutate: createReport, isPending } = useCreateReport(); const { t } = useTranslation('parallels', { keyPrefix: 'Report' }) + const formik = useFormik({ + initialValues: { + subject: '', + content: '', + }, + validationSchema: Yup.object({ + subject: Yup.string().required('این فیلد اجباری است'), + content: Yup.string().required('این فیلد اجباری است'), + }), + onSubmit: (values) => { + createReport(values, { + onSuccess: () => { + toast('با موفقیت ثبت شد', 'success'); + formik.resetForm() + router.back() + }, + onError: (error) => { + toast(extractErrorMessage(error), 'error'); + }, + }); + }, + }); + return (
@@ -31,7 +61,7 @@ function ReportIndex({ }: Props) {
-
+
@@ -43,26 +73,42 @@ function ReportIndex({ }: Props) { type='text' placeholder={t('InputTitle.Placeholder')} labelText={t('InputTitle.Label')} - htmlFor='report-title' - onChange={() => { }} + htmlFor='subject' + name='subject' + value={formik.values.subject} + onChange={formik.handleChange} + onBlur={formik.handleBlur} + valid={!(formik.touched.subject && formik.errors.subject)} + aria-errormessage={formik.touched.subject && formik.errors.subject ? formik.errors.subject : undefined} />
{t('InputDescription.Label')} + {formik.touched.content && formik.errors.content && ( + + {formik.errors.content} + + )}
diff --git a/src/app/[name]/(Dialogs)/report/service/ReportService.ts b/src/app/[name]/(Dialogs)/report/service/ReportService.ts new file mode 100644 index 0000000..fa59d78 --- /dev/null +++ b/src/app/[name]/(Dialogs)/report/service/ReportService.ts @@ -0,0 +1,7 @@ +import { api } from "@/config/axios"; +import { CreateReportType } from "../types/Types"; + +export const createReport = async (params: CreateReportType) => { + const { data } = await api.post("/public/contact", params); + return data; +}; diff --git a/src/app/[name]/(Dialogs)/report/types/Types.ts b/src/app/[name]/(Dialogs)/report/types/Types.ts new file mode 100644 index 0000000..b098628 --- /dev/null +++ b/src/app/[name]/(Dialogs)/report/types/Types.ts @@ -0,0 +1,4 @@ +export type CreateReportType = { + subject: string; + content: string; +};