import { FC, useState } from 'react' import { useTranslation } from 'react-i18next' import Button from '../../components/Button' import { useFormik } from 'formik' import { CategoryLearningType, CreateLearningType } from './types/LearningTypes' import * as Yup from 'yup' import { useCreateLearning, useGetCategory } from './hooks/useLearningData' import { useSingleUpload } from '../service/hooks/useServiceData' import { TickCircle } from 'iconsax-react' import Input from '../../components/Input' import Select from '../../components/Select' import Textarea from '../../components/Textarea' import PageLoading from '../../components/PageLoading' import CreateLearningSidebar from './components/CreateLearningSidebar' import { ErrorType } from '../../helpers/types' import { toast } from 'react-toastify' import { useNavigate } from 'react-router-dom' import { Pages } from '../../config/Pages' const CreateLearning: FC = () => { const navigate = useNavigate() const { t } = useTranslation('global') const singleUpload = useSingleUpload() const createLearning = useCreateLearning() const getCategory = useGetCategory() const [videoFile, setVideoFile] = useState() const [coverFile, setCoverFile] = useState() const formik = useFormik({ initialValues: { title: '', description: '', coverUrl: '', videoUrl: '', videoDuration: '', categoryId: '' }, validationSchema: Yup.object().shape({ title: Yup.string().required(t('errors.required')), description: Yup.string().required(t('errors.required')), videoDuration: Yup.string().required(t('errors.required')), categoryId: Yup.string().required(t('errors.required')) }), onSubmit: async (values) => { if (videoFile && coverFile) { const formData = new FormData() formData.append('file', videoFile) await singleUpload.mutateAsync(formData, { onSuccess: (data) => { values.videoUrl = data?.data?.url }, onError: (error: ErrorType) => { toast.error(error.response?.data?.error?.message[0]) } }) const formDataCover = new FormData() formDataCover.append('file', coverFile) await singleUpload.mutateAsync(formDataCover, { onSuccess: (data) => { values.coverUrl = data?.data?.url }, onError: (error: ErrorType) => { toast.error(error.response?.data?.error?.message[0]) } }) createLearning.mutate(values, { onSuccess: () => { toast.success(t('success')) navigate(Pages.learning.list) }, onError: (error: ErrorType) => { toast.error(error.response?.data?.error?.message[0]) } }) } else { toast.error(t('learning.error_video_cover_required')) } } }) return (
{t('learning.new_learning')}
{ getCategory.isPending ? :
{t('learning.description')}