diff --git a/src/config/Pages.ts b/src/config/Pages.ts index 0d63f49..888cd56 100644 --- a/src/config/Pages.ts +++ b/src/config/Pages.ts @@ -202,5 +202,7 @@ export const Pages = { requestCreateProduct: "/sellers/request-create-product", learningCategory: "/sellers/learning-category", learning: "/sellers/learning", + learningCreate: "/sellers/learning/create", + learningUpdate: "/sellers/learning/update/", }, }; diff --git a/src/pages/seller/CreateLearning.tsx b/src/pages/seller/CreateLearning.tsx new file mode 100644 index 0000000..c633dc7 --- /dev/null +++ b/src/pages/seller/CreateLearning.tsx @@ -0,0 +1,162 @@ +import { type FC, useState } from 'react' +import { useFormik } from 'formik' +import { type CreateLearningType } from './types/Types' +import * as Yup from 'yup' +import { useCreateLearning, useGetLearningCategory } from './hooks/useSellerData' +import { useNavigate } from 'react-router-dom' +import Input from '../../components/Input' +import Select from '../../components/Select' +import Textarea from '../../components/Textarea' +import Button from '../../components/Button' +import { TickCircle } from 'iconsax-react' +import { useUploadSingle } from '../uploader/hooks/useUploaderData' +import UploadBoxDraggble from '@/components/UploadBoxDraggble' +import { toast } from 'react-toastify' +import { extractErrorMessage } from '@/helpers/utils' +import { Pages } from '@/config/Pages' + +const CreateLearning: FC = () => { + const navigate = useNavigate() + const { data: categoriesData } = useGetLearningCategory() + const uploadSingle = useUploadSingle() + const createLearningMutation = useCreateLearning() + + const [videoFile, setVideoFile] = useState([]) + const [coverFile, setCoverFile] = useState([]) + + const formik = useFormik({ + initialValues: { + title: '', + description: '', + videoUrl: '', + cover: '', + category: '' + }, + validationSchema: Yup.object({ + title: Yup.string().required('عنوان یادگیری الزامی است'), + description: Yup.string().required('توضیحات یادگیری الزامی است'), + category: Yup.string().required('دسته‌بندی یادگیری الزامی است') + }), + onSubmit: async (values) => { + let videoUrl = values.videoUrl + let coverUrl = values.cover + + if (videoFile.length > 0) { + const videoResponse = await uploadSingle.mutateAsync(videoFile[0]) + videoUrl = videoResponse.results?.url?.url || '' + } + + if (coverFile.length > 0) { + const coverResponse = await uploadSingle.mutateAsync(coverFile[0]) + coverUrl = coverResponse.results?.url?.url || '' + } + + const submitData = { + ...values, + videoUrl, + cover: coverUrl + } + + createLearningMutation.mutate(submitData, { + onSuccess: () => { + toast.success('یادگیری با موفقیت ایجاد شد') + navigate(Pages.sellers.learning) + }, + onError: (error) => { + toast.error(extractErrorMessage(error)) + } + }) + }, + }) + + const categories = categoriesData?.results?.learningCategory || [] + const categoryOptions = categories.map(category => ({ + value: category._id, + label: category.title + })) + + console.log(formik.errors); + + + return ( +
+
+
+

ساخت یادگیری جدید

+
+
+ +
+
+ +
+ {/* اطلاعات اصلی */} +
+

اطلاعات اصلی

+ +
+ + +