diff --git a/src/pages/roles/Create.tsx b/src/pages/roles/Create.tsx new file mode 100644 index 0000000..38addac --- /dev/null +++ b/src/pages/roles/Create.tsx @@ -0,0 +1,78 @@ +import { type FC } from 'react' +import { useFormik } from 'formik' +import * as Yup from 'yup' +import { TickCircle } from 'iconsax-react' +import { toast } from 'react-toastify' +import { useNavigate } from 'react-router-dom' +import Button from '@/components/Button' +import Input from '@/components/Input' +import { useCreateRole } from './hooks/useRolesData' +import type { CreateRoleType } from './types/Types' +import { Pages } from '@/config/Pages' +import type { ErrorType } from '@/helpers/types' +import { extractErrorMessage } from '@/config/func' + +const CreateRole: FC = () => { + const { mutate: createRole, isPending } = useCreateRole() + const navigate = useNavigate() + + const formik = useFormik({ + initialValues: { + name: '', + permissionIds: [], + }, + validationSchema: Yup.object().shape({ + name: Yup.string().required('نام نقش الزامی است'), + permissionIds: Yup.array().of(Yup.string()), + }), + onSubmit: (values) => { + createRole(values, { + onSuccess: () => { + toast.success('نقش با موفقیت ایجاد شد') + navigate(Pages.roles.list) + }, + onError: (error: ErrorType) => { + toast.error(extractErrorMessage(error)) + }, + }) + }, + }) + + return ( +
+
+
+ نقش جدید +
+
+ +
+
+ +
+
+
+ +
+
+
+
+ ) +} + +export default CreateRole \ No newline at end of file diff --git a/src/pages/roles/hooks/useRolesData.ts b/src/pages/roles/hooks/useRolesData.ts index 014cbf8..f10b189 100644 --- a/src/pages/roles/hooks/useRolesData.ts +++ b/src/pages/roles/hooks/useRolesData.ts @@ -17,3 +17,13 @@ export const useDeleteRole = () => { }, }); }; + +export const useCreateRole = () => { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: api.createRole, + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ["roles"] }); + }, + }); +}; diff --git a/src/router/Main.tsx b/src/router/Main.tsx index ec367ea..d2db34b 100644 --- a/src/router/Main.tsx +++ b/src/router/Main.tsx @@ -20,6 +20,7 @@ import CommentsDetails from '@/pages/comments/Details' import ScheduleList from '@/pages/schedule/List' import CreateSchedule from '@/pages/schedule/Create' import RolesList from '@/pages/roles/List' +import CreateRole from '@/pages/roles/Create' const MainRouter: FC = () => { const { hasSubMenu } = useSharedStore() @@ -51,6 +52,7 @@ const MainRouter: FC = () => { } /> } /> } /> + } />