From d0be217ea1bd00c9227dd5591fc8ec4745b318f4 Mon Sep 17 00:00:00 2001 From: hamid zarghami Date: Tue, 18 Feb 2025 17:16:18 +0330 Subject: [PATCH] create role --- src/langs/fa.json | 3 +- src/pages/discounts/CreateDiscount.tsx | 5 +- src/pages/discounts/DiscountsList.tsx | 2 +- src/pages/service/AddService.tsx | 24 +++- src/pages/service/types/ServiceTypes.ts | 1 + src/pages/users/RoleCreate.tsx | 152 +++++++++++++++--------- src/pages/users/hooks/useUserData.ts | 16 +++ src/pages/users/service/UserService.ts | 12 ++ src/pages/users/types/UserTypes.ts | 4 + 9 files changed, 150 insertions(+), 69 deletions(-) create mode 100644 src/pages/users/hooks/useUserData.ts create mode 100644 src/pages/users/service/UserService.ts create mode 100644 src/pages/users/types/UserTypes.ts diff --git a/src/langs/fa.json b/src/langs/fa.json index 92f09d9..9a1ced1 100644 --- a/src/langs/fa.json +++ b/src/langs/fa.json @@ -539,7 +539,8 @@ "submit_role": "ثبت نقش", "title_role": "عنوان نقش", "permissions": "دسترسی ها", - "status_role": "وضعیت نقش" + "status_role": "وضعیت نقش", + "error_count_permission": "حداقل به دسترسی رو باید انتخاب کنید" }, "profile": { "account_user": "حساب کاربری", diff --git a/src/pages/discounts/CreateDiscount.tsx b/src/pages/discounts/CreateDiscount.tsx index 1a26ffb..ed691c0 100644 --- a/src/pages/discounts/CreateDiscount.tsx +++ b/src/pages/discounts/CreateDiscount.tsx @@ -19,6 +19,7 @@ import { CustomerItemType } from '../customer/types/CustomerTypes' import { useNavigate } from 'react-router-dom' import { Pages } from '../../config/Pages' import { ErrorType } from '../../helpers/types' +import moment from 'moment-jalaali' const CreateDiscount: FC = () => { @@ -57,8 +58,8 @@ const CreateDiscount: FC = () => { values.userIds = [customerId] const params: CreateDiscountType = { ...values, - startDate: new Date(values.startDate).toISOString(), - endDate: new Date(values.endDate).toISOString(), + startDate: moment(values.startDate, 'jYYYY-jMM-jDD').format('YYYY-MM-DD'), + endDate: moment(values.endDate, 'jYYYY-jMM-jDD').format('YYYY-MM-DD'), amount: +values.amount } createDiscount.mutate(params, { diff --git a/src/pages/discounts/DiscountsList.tsx b/src/pages/discounts/DiscountsList.tsx index 28b2bb6..8841158 100644 --- a/src/pages/discounts/DiscountsList.tsx +++ b/src/pages/discounts/DiscountsList.tsx @@ -85,7 +85,7 @@ const DiscountList: FC = () => { return ( - + diff --git a/src/pages/service/AddService.tsx b/src/pages/service/AddService.tsx index 5281da8..9d28f98 100644 --- a/src/pages/service/AddService.tsx +++ b/src/pages/service/AddService.tsx @@ -60,6 +60,7 @@ const AddService: FC = () => { link: '', metaDescription: '', name: '', + title: '', serviceLanguage: '', softwareLanguage: '', userCount: 0, @@ -67,6 +68,7 @@ const AddService: FC = () => { }, validationSchema: Yup.object({ name: Yup.string().required(t('errors.required')), + title: Yup.string().required(t('errors.required')), description: Yup.string().required(t('errors.required')), author: Yup.string().required(t('errors.required')), createDate: Yup.date().required(t('errors.required')), @@ -151,12 +153,22 @@ const AddService: FC = () => {
- +
+ + + +
+
{ const { t } = useTranslation('global') + const navigate = useNavigate() + const [permissions, setPermissions] = useState([]) + const getPermissions = useGetPermissions() + const createRole = useCreateRole() + + const handleAdd = (id: string) => { + if (permissions.includes(id)) { + setPermissions(permissions.filter(permission => permission !== id)) + } else { + setPermissions([...permissions, id]) + } + } + + const formik = useFormik({ + initialValues: { + name: '', + permissions: [], + }, + validationSchema: Yup.object({ + name: Yup.string() + .required(t('errors.required')) + }), + onSubmit: (values) => { + if (permissions.length > 0) { + values.permissions = permissions + createRole.mutate(values, { + onSuccess: () => { + formik.resetForm() + navigate(Pages.users.roleList) + }, + onError: (error: ErrorType) => { + toast.error(error.response?.data?.error?.message[0]) + } + }) + } else { + toast.error(t('user.error_count_permission')) + } + } + }) return (
@@ -18,6 +65,8 @@ const RoleCreate: FC = () => {
-
-
+ { + getPermissions.isPending ? + + : +
+
- + + +
+
+ {t('user.permissions')} +
+ +
+ { + getPermissions.data?.data?.permissions?.map((item: { id: string, name: string }) => { + return ( +
+ handleAdd(item.id)} + /> +
{item.name}
+
+ ) + }) + } +
+
-
-
- {t('user.permissions')}
-
-
- +
+
+ {t('user.status_role')} +
+ { }} /> -
{t('all')}
-
- { }} - /> -
{t('all')}
-
-
- { }} - /> -
{t('all')}
-
-
- { }} - /> -
{t('all')}
-
-
- { }} - /> -
{t('all')}
-
-
+
*/}
- -
- -
-
-
- {t('user.status_role')} -
- { }} - /> -
-
-
+ }
) } diff --git a/src/pages/users/hooks/useUserData.ts b/src/pages/users/hooks/useUserData.ts new file mode 100644 index 0000000..d244786 --- /dev/null +++ b/src/pages/users/hooks/useUserData.ts @@ -0,0 +1,16 @@ +import * as api from "../service/UserService"; +import { useMutation, useQuery } from "@tanstack/react-query"; +import { CreateRoleType } from "../types/UserTypes"; + +export const useGetPermissions = () => { + return useQuery({ + queryKey: ["permissions"], + queryFn: () => api.getPermissions(), + }); +}; + +export const useCreateRole = () => { + return useMutation({ + mutationFn: (variables: CreateRoleType) => api.createRole(variables), + }); +}; diff --git a/src/pages/users/service/UserService.ts b/src/pages/users/service/UserService.ts new file mode 100644 index 0000000..9d75f62 --- /dev/null +++ b/src/pages/users/service/UserService.ts @@ -0,0 +1,12 @@ +import axios from "../../../config/axios"; +import { CreateRoleType } from "../types/UserTypes"; + +export const getPermissions = async () => { + const { data } = await axios.get(`/users/permissions`); + return data; +}; + +export const createRole = async (params: CreateRoleType) => { + const { data } = await axios.post(`/users/roles`, params); + return data; +}; diff --git a/src/pages/users/types/UserTypes.ts b/src/pages/users/types/UserTypes.ts new file mode 100644 index 0000000..bfd4d72 --- /dev/null +++ b/src/pages/users/types/UserTypes.ts @@ -0,0 +1,4 @@ +export type CreateRoleType = { + name: string; + permissions: string[]; +};