web/plugins/BottomSheet/BottomSheetCreateRole.jsx

218 lines
6.0 KiB
React
Raw Normal View History

2023-10-19 11:44:56 +03:30
"use client";
2023-10-21 11:14:11 +03:30
import React, { useContext, useEffect, useRef, useState } from "react";
2023-10-19 11:44:56 +03:30
import { BottomSheet } from "react-spring-bottom-sheet";
import Input from "plugins/Input/page";
import AppContext from "@ctx/AppContext";
import SimpleReactValidator from "simple-react-validator";
import CheckBoxBriz from "plugins/CheckBoxBriz/page";
import Buttonbriz from "plugins/Buttonbriz/page";
import { toast } from "react-toastify";
const BottomSheetCreateRole = (props) => {
const CTX = useContext(AppContext);
const [persianName, setPersianName] = useState("");
const [englishName, setEnglishName] = useState("");
const [description, setDescription] = useState("");
const [, forceUpdate] = useState();
const permissionsData = CTX.state.permissions;
const permissionsChoose = CTX.state.permissionsChoose;
2023-10-21 11:14:11 +03:30
const goToEditRole = CTX.state.goToEditRole;
const idEditRole = CTX.state.idEditRole;
const roleData = CTX.state.roleData;
2023-10-19 11:44:56 +03:30
const validator = useRef(
new SimpleReactValidator({
messages: {
required: "پر کردن این فیلد الزامی میباشد",
},
element: (message) => (
<>
<div className="text-right px-1 ">
<small className="text-red-600 t-ig-small ">{message}</small>
</div>
</>
),
})
);
const body = {
persianName,
englishName,
description,
permissions: permissionsChoose,
};
2023-10-21 11:14:11 +03:30
const bodyUpdate = {
persianName,
englishName,
description,
permissions: permissionsChoose,
roleId: roleData.roleId,
};
const clear = () => {
setPersianName("");
setEnglishName("");
setDescription("");
CTX.setPermissionsChoose([]);
};
2023-10-19 11:44:56 +03:30
2023-10-21 11:14:11 +03:30
const handleCreateRole = (update) => {
2023-10-19 11:44:56 +03:30
if (validator.current.allValid()) {
2023-10-21 11:14:11 +03:30
if (update == "UPDATE") {
CTX.UpdateRole(bodyUpdate);
} else {
CTX.CreateRole(body);
}
2023-10-19 11:44:56 +03:30
} else {
toast.error("پرکردن همه ی فیلد ها واجب است", {
position: "bottom-right",
autoClose: 2000,
hideProgressBar: false,
closeOnClick: true,
pauseOnHover: true,
draggable: true,
progress: undefined,
});
validator.current.showMessages();
forceUpdate(1);
}
};
2023-10-21 11:14:11 +03:30
const handleBottomSheetCreateRole = (e) => {
if (e.type == "OPEN") {
CTX.GetPermissions();
if (goToEditRole) {
CTX.GetRole(idEditRole);
}
} else if (e.type == "CLOSE") {
clear();
CTX.setGoToEditRole(false);
CTX.setIdEditRole(null);
CTX.setRoleData([]);
}
};
useEffect(() => {
if (goToEditRole) {
setPersianName(roleData.persianName);
setEnglishName(roleData.englishName);
setDescription(roleData.description);
CTX.setPermissionsChoose(roleData.permissions);
}
}, [roleData]);
2023-10-19 11:44:56 +03:30
return (
<BottomSheet
2023-10-21 11:14:11 +03:30
onSpringStart={(e) => handleBottomSheetCreateRole(e)}
2023-10-19 11:44:56 +03:30
open={CTX.state.BottomSheetCreateRoleOpen}
onDismiss={() => CTX.setBottomSheetCreateRoleOpen(false)}
>
<div className="text-center py-2 bg-primary-300 ">
<p className="mb-0 text-white relative top-[-5px]">افزودن نقش جدید</p>
</div>
<div className="bg-body-100 p-4">
<div className="">
<Input
lable=" (فارسی) نام نقش"
id="persianName-id"
name="persianName"
type={"text"}
value={persianName}
inputEvent={(e) => {
setPersianName(e.target.value);
validator.current.showMessageFor("persianName");
}}
style="text-right"
validator={true}
validatorData={validator.current.message(
"persianName",
persianName,
"required"
)}
/>
</div>
<div className="">
<Input
lable=" (انگلیسی) نام نقش"
id="englishName-id"
name="englishName"
type={"text"}
value={englishName}
inputEvent={(e) => {
setEnglishName(e.target.value);
validator.current.showMessageFor("englishName");
}}
style="text-right"
validator={true}
validatorData={validator.current.message(
"englishName",
englishName,
"required"
)}
/>
</div>
<div className="">
<Input
lable=" توضیحات"
id="description-id"
name="description"
type={"text"}
value={description}
inputEvent={(e) => {
setDescription(e.target.value);
validator.current.showMessageFor("description");
}}
textarea={true}
style="text-right"
/>
</div>
<div className="my-10">
<div className="text-right m-2">
<h4 className="text-base font-bold text-primary-300">
دسترسی های مورد نظر{" "}
</h4>
</div>
{permissionsData &&
permissionsData.map((e) => (
<CheckBoxBriz
title={e.title}
detail={e.detail}
value={e.value}
checkBoxEvent={(e) => setRoleCheckBox(e.target.checked)}
/>
))}
</div>
2023-10-21 11:14:11 +03:30
{goToEditRole ? (
<Buttonbriz
title="ویرایش نقش"
color="INFO"
icon="CHECK"
buttonEvent={() => handleCreateRole("UPDATE")}
subButton={true}
subButtonTitle="حذف نقش"
subButtonEvent={() => CTX.DeleteRole(idEditRole)}
/>
) : (
<Buttonbriz
title="ثبت نقش"
color="PRIMARY"
icon="CHECK"
buttonEvent={() => handleCreateRole()}
/>
)}
2023-10-19 11:44:56 +03:30
</div>
</BottomSheet>
);
};
export default BottomSheetCreateRole;