From 3569d10ecccda65fe9461994a3a804234212b22f Mon Sep 17 00:00:00 2001 From: mhmjalali Date: Tue, 29 Jul 2025 14:39:39 +0330 Subject: [PATCH] complete store part of role and start delete and edit --- .../Roles/Toolbar/Create/Form/index.jsx | 103 ++++++++++++------ src/lib/hooks/usePermissionsList.js | 40 ++++--- 2 files changed, 93 insertions(+), 50 deletions(-) diff --git a/src/components/dashboard/Roles/Toolbar/Create/Form/index.jsx b/src/components/dashboard/Roles/Toolbar/Create/Form/index.jsx index 01fc9f0..dbc11e9 100644 --- a/src/components/dashboard/Roles/Toolbar/Create/Form/index.jsx +++ b/src/components/dashboard/Roles/Toolbar/Create/Form/index.jsx @@ -1,52 +1,55 @@ import LtrTextField from "@/core/components/LtrTextField"; import StyledForm from "@/core/components/StyledForm"; import { yupResolver } from "@hookform/resolvers/yup"; -import { Button, Checkbox, Chip, DialogActions, DialogContent, Divider, Grid, Stack } from "@mui/material"; +import { + Box, + Button, + Checkbox, + Chip, + DialogActions, + DialogContent, + Divider, + FormControlLabel, FormHelperText, + Grid, Skeleton, + Stack, +} from "@mui/material"; import { Controller, useForm } from "react-hook-form"; -import { object, string } from "yup"; +import { array, object, string } from "yup"; import useRequest from "@/lib/hooks/useRequest"; import { CREATE_ROLE } from "@/core/utils/routes"; -import { useState } from "react"; -import { usePermissionsList } from "@/lib/hooks/usePermissionsList"; +import usePermissionsList from "@/lib/hooks/usePermissionsList"; const defaultValues = { name: "", name_fa: "", + permissions: [] }; const validationSchema = object().shape({ name: string().required("نام فارسی نقش را وارد کنید"), name_fa: string().required("نام انگلیسی نقش را وارد کنید"), + permissions: array().min(1, "حداقل یک دسترسی را انتخاب نمایید") }); const CreateRoleForm = ({ setOpen, mutate }) => { - const [permissionChecked, setPermissionChecked] = useState({}); const requestServer = useRequest({ notificationSuccess: true }); - const { data } = usePermissionsList(); - - console.log("data", data); - - const handleCheckboxChange = (index) => { - setPermissionChecked((prev) => ({ - ...prev, - [index]: !prev[index], - })); - }; + const { permissions, loadingPermissions } = usePermissionsList(); const { control, handleSubmit, formState: { isSubmitting, errors }, + watch, } = useForm({ defaultValues, resolver: yupResolver(validationSchema) }); const onSubmit = async (data) => { - const formData = new FormData(); - Object.keys(data).forEach((key) => { - formData.append(key, data[key]); - }); try { await requestServer(CREATE_ROLE, "post", { - data: formData, + data: { + permissions: data.permissions, + name: data.name, + name_fa: data.name_fa, + }, }); setOpen(false); mutate(); @@ -60,7 +63,7 @@ const CreateRoleForm = ({ setOpen, mutate }) => { @@ -102,21 +105,53 @@ const CreateRoleForm = ({ setOpen, mutate }) => { name={"name_fa"} /> - + - + - - {permissions.map((permission, index) => ( - - handleCheckboxChange(index)} - /> - {permission.label} - - ))} - + + + {!loadingPermissions ? ( + ( + <> + {permissions.map((permission) => ( + + { + const value = parseInt(e.target.value, 10); + if (e.target.checked) { + field.onChange([...field.value, value]); + } else { + field.onChange(field.value.filter((id) => id !== value)); + } + }} + /> + } + label={permission.name_fa} + /> + + ))} + {!!error && error.message} + + )} + /> + ) : ( + + + + + + + + + )} diff --git a/src/lib/hooks/usePermissionsList.js b/src/lib/hooks/usePermissionsList.js index 1ceff74..84cd1cc 100644 --- a/src/lib/hooks/usePermissionsList.js +++ b/src/lib/hooks/usePermissionsList.js @@ -1,21 +1,29 @@ +import { useEffect, useState } from "react"; import { GET_PERMISSIONS_LIST } from "@/core/utils/routes"; -import useSWR from "swr"; -import useRequest from "./useRequest"; +import useRequest from "@/lib/hooks/useRequest"; -export const usePermissionsList = () => { - const request = useRequest(); +const usePermissionsList = () => { + const requestServer = useRequest(); + const [permissions, setPermissions] = useState([]); + const [loadingPermissions, setLoadingPermissions] = useState(true); + const [errorPermissions, setErrorPermissions] = useState(null); - const fetcher = async (url) => { - try { - const response = await request(url); - return response.data.data; - } catch (error) { - throw new Error(); - } - }; + useEffect(() => { + const fetchPermissions = async () => { + try { + const response = await requestServer(`${GET_PERMISSIONS_LIST}`); + setPermissions(response.data.data); + setLoadingPermissions(false); + } catch (e) { + setErrorPermissions(e); + setLoadingPermissions(false); + } + }; - return useSWR(GET_PERMISSIONS_LIST, fetcher, { - keepPreviousData: true, - dedupingInterval: 30000, - }); + fetchPermissions(); + }, []); + + return { permissions, loadingPermissions, errorPermissions }; }; + +export default usePermissionsList;