diff --git a/src/langs/fa.json b/src/langs/fa.json index 9a1ced1..ff75285 100644 --- a/src/langs/fa.json +++ b/src/langs/fa.json @@ -540,8 +540,11 @@ "title_role": "عنوان نقش", "permissions": "دسترسی ها", "status_role": "وضعیت نقش", - "error_count_permission": "حداقل به دسترسی رو باید انتخاب کنید" + "error_count_permission": "حداقل به دسترسی رو باید انتخاب کنید", + "is_admin": "آیا ادمین است؟" }, + "yes": "بله", + "no": "خیر", "profile": { "account_user": "حساب کاربری", "image_profile": "تصویر حساب کاربری", diff --git a/src/pages/users/Create.tsx b/src/pages/users/Create.tsx index 8b4f95f..9ed7774 100644 --- a/src/pages/users/Create.tsx +++ b/src/pages/users/Create.tsx @@ -1,14 +1,80 @@ -import { FC } from 'react' +import { FC, useState } from 'react' import { useTranslation } from 'react-i18next' import Button from '../../components/Button' import { TickCircle } from 'iconsax-react' import Input from '../../components/Input' import Select from '../../components/Select' import UploadBoxDraggble from '../../components/UploadBoxDraggble' +import { useFormik } from 'formik' +import { CreateUserType, RoleItemType } from './types/UserTypes' +import * as Yup from 'yup' +import { useSingleUpload } from '../service/hooks/useServiceData' +import { useCreateUser, useGetRoles } from './hooks/useUserData' +import { toast } from 'react-toastify' +import { ErrorType } from '../../helpers/types' +import { useNavigate } from 'react-router-dom' +import { Pages } from '../../config/Pages' const CreateUser: FC = () => { + const navigate = useNavigate() const { t } = useTranslation('global') + const [file, setFile] = useState() + const getRoles = useGetRoles('') + const singleUpload = useSingleUpload() + const createUser = useCreateUser() + + const handleCreateUser = (values: CreateUserType) => { + createUser.mutate(values, { + onSuccess: () => { + toast.success(t('success')) + navigate(Pages.users.list) + }, + onError: (error: ErrorType) => { + toast.error(error.response?.data?.error?.message[0]) + } + }) + } + + const formik = useFormik({ + initialValues: { + email: '', + firstName: '', + lastName: '', + password: '', + repeatPassword: '', + phone: '', + profilePic: '', + roleId: '' + }, + validationSchema: Yup.object({ + email: Yup.string().email('Invalid email').required(t('errors.required')), + firstName: Yup.string().required(t('errors.required')), + lastName: Yup.string().required(t('errors.required')), + password: Yup.string().required(t('errors.required')), + repeatPassword: Yup.string().required(t('errors.required')), + phone: Yup.string().required(t('errors.required')), + roleId: Yup.string().required(t('errors.required')), + }), + onSubmit: async (values) => { + if (file) { + const formData = new FormData() + formData.append('file', file) + await singleUpload.mutateAsync(formData, { + onSuccess: (data) => { + values.profilePic = data?.data?.url + handleCreateUser(values) + }, + onError: (error: ErrorType) => { + toast.error(error.response?.data?.error?.message[0]) + } + }) + } else { + values.profilePic = undefined + handleCreateUser(values) + } + } + }) return (
@@ -18,6 +84,8 @@ const CreateUser: FC = () => {