diff --git a/src/config/Pages.ts b/src/config/Pages.ts index a3ed756..1d10353 100644 --- a/src/config/Pages.ts +++ b/src/config/Pages.ts @@ -15,6 +15,7 @@ export const Pages = { category: "/services/category", plan: "/services/plan/", review: "/services/reviews", + guide: "/services/guide/", }, sliders: { list: "/sliders/list", diff --git a/src/langs/fa.json b/src/langs/fa.json index e7a3602..6a1ed2d 100644 --- a/src/langs/fa.json +++ b/src/langs/fa.json @@ -105,7 +105,14 @@ "reviews": "نظرات", "create_plan": "ایجاد پلن", "plan_users": "کاربران پلن", - "plan_list": "لیست پلن ها" + "plan_list": "لیست پلن ها", + "guide": "راهنمای سرویس" + }, + "guide": { + "list_guide": "لیست راهنمای سرویس", + "submit_guide": "افزودن راهنمای سرویس", + "order": "ترتیب", + "content": "محتوا" }, "review": { "title": "عنوان", diff --git a/src/pages/guide/Create.tsx b/src/pages/guide/Create.tsx new file mode 100644 index 0000000..32ec2b7 --- /dev/null +++ b/src/pages/guide/Create.tsx @@ -0,0 +1,145 @@ +import { FC, useState } from 'react' +import { useParams, useNavigate } from 'react-router-dom' +import { useTranslation } from 'react-i18next' +import { useFormik } from 'formik' +import * as Yup from 'yup' +import Button from '../../components/Button' +import Input from '../../components/Input' +import Textarea from '../../components/Textarea' +import Switch from '../../components/Switch' +import { TickCircle } from 'iconsax-react' +import { useCreateGuide } from './hooks/useGuideData' +import { toast } from 'react-toastify' +import { ErrorType } from '../../helpers/types' +import { Pages } from '../../config/Pages' + +const Create: FC = () => { + const { t } = useTranslation('global') + const { id } = useParams() + const navigate = useNavigate() + const [isActive, setIsActive] = useState(true) + + const createGuide = useCreateGuide() + + type GuideFormValues = { + title: string; + description: string; + content: string; + order: number | string; + } + + const formik = useFormik({ + initialValues: { + title: '', + description: '', + content: '', + order: 1, + }, + validationSchema: Yup.object({ + title: Yup.string().required(t('errors.required')), + description: Yup.string().required(t('errors.required')), + content: Yup.string().required(t('errors.required')), + order: Yup.number().required(t('errors.required')), + }), + onSubmit: (values) => { + if (!id) return + createGuide.mutate({ + ...values, + order: Number(values.order), + isActive, + serviceId: id || '', + }, { + onSuccess: () => { + toast.success(t('success')) + navigate(Pages.services.guide + id) + }, + onError: (error: ErrorType) => { + toast.error(error.response?.data?.error?.message?.[0] || t('error')) + } + }) + } + }) + + return ( +
+
+
+ {t('guide.submit_guide')} +
+
+ +
+
+ +
+
+
+ + +
+