web/plugins/BottomSheet/BottomSheetCreateEmployees.jsx

419 lines
12 KiB
React
Raw Normal View History

2023-10-19 11:44:56 +03:30
"use client";
2023-10-21 15:57:05 +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 { toast } from "react-toastify";
import Buttonbriz from "plugins/Buttonbriz/page";
2023-10-19 20:02:54 +03:30
import DatePickerIran from "plugins/DatePickerIran/page";
2023-10-21 11:14:11 +03:30
import moment from "jalali-moment";
2023-10-21 15:57:05 +03:30
import validateIranPhone from "plugins/IranPhoneRegex";
2023-10-21 11:14:11 +03:30
const jalaliMoment = require("jalali-moment");
2023-10-19 11:44:56 +03:30
const BottomSheetCreateEmployees = (props) => {
const CTX = useContext(AppContext);
const [firstName, setFirstName] = useState("");
const [lastName, setLastName] = useState("");
const [phoneNumber, setPhoneNumber] = useState("");
2023-11-14 16:22:32 +03:30
// const [nationalId, setNationalId] = useState("");
2023-10-21 15:57:05 +03:30
const [gender, setGender] = useState(parseInt(0));
2023-11-14 16:22:32 +03:30
// const [birthDate, setBirthDate] = useState(null);
2023-10-21 11:14:11 +03:30
const [roleSelectCurrntData, setRoleSelectCurrntData] = useState("");
const [roleSelectData, setRoleSelectData] = useState([]);
2023-11-14 16:22:32 +03:30
2023-11-20 00:07:55 +03:30
// const [positionId, setPositionId] = useState("");
2023-11-14 16:22:32 +03:30
const [positionIdSelectData, setPositionIdSelectData] = useState("");
2023-10-19 11:44:56 +03:30
const [, forceUpdate] = useState();
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 rolesChoose = CTX.state.rolesChoose;
const rolesData = CTX.state.rolesData;
2023-10-21 15:57:05 +03:30
const goToEditUser = CTX.state.goToEditUser;
const idEditUser = CTX.state.idEditUser;
const userData = CTX.state.userData;
2023-11-14 16:22:32 +03:30
const positionsData = CTX.state.positionsData;
2023-10-19 11:44:56 +03:30
const body = {
phoneNumber,
firstName,
lastName,
2023-11-14 16:22:32 +03:30
// birthDateTimeStamp:
// birthDate &&
// moment
// .utc(
// [birthDate.year, birthDate.month, birthDate.day],
// "jYYYY-jMM-jDDTHH"
// )
// .unix(),
2023-10-21 11:14:11 +03:30
gender: parseInt(gender),
2023-11-14 16:22:32 +03:30
// nationalId,
2023-10-19 11:44:56 +03:30
roleIds: rolesChoose,
2023-11-20 00:07:55 +03:30
// positionId,
2023-10-19 11:44:56 +03:30
};
2023-10-21 15:57:05 +03:30
const bodyUpdate = {
phoneNumber,
firstName,
lastName,
2023-11-14 16:22:32 +03:30
// birthDateTimeStamp:
// birthDate &&
// moment
// .utc(
// [birthDate.year, birthDate.month, birthDate.day],
// "jYYYY-jMM-jDDTHH"
// )
// .unix(),
2023-10-21 15:57:05 +03:30
gender: parseInt(gender),
2023-11-14 16:22:32 +03:30
// nationalId,
2023-10-21 15:57:05 +03:30
roleIds: rolesChoose,
userId: userData.id,
2023-11-20 00:07:55 +03:30
// positionId,
2023-10-21 15:57:05 +03:30
};
console.log(bodyUpdate);
const clear = () => {
setFirstName("");
setLastName("");
setPhoneNumber("");
2023-11-14 16:22:32 +03:30
// setNationalId("");
2023-10-21 15:57:05 +03:30
setGender("");
2023-11-14 16:22:32 +03:30
// setBirthDate("");
2023-10-21 15:57:05 +03:30
setRoleSelectCurrntData("");
setRoleSelectData([]);
2023-11-20 00:07:55 +03:30
// setPositionId("");
2023-10-21 15:57:05 +03:30
CTX.setRolesChoose([]);
};
const handleCreateUser = (update) => {
if (validateIranPhone(phoneNumber)) {
if (validator.current.allValid()) {
if (update == "UPDATE") {
CTX.UpdateUser(bodyUpdate);
} else {
CTX.CreateUser(body);
}
} 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-19 11:44:56 +03:30
} else {
2023-10-21 15:57:05 +03:30
toast.error("شماره تماس را درست وارد کنید", {
2023-10-19 11:44:56 +03:30
position: "bottom-right",
autoClose: 2000,
hideProgressBar: false,
closeOnClick: true,
pauseOnHover: true,
draggable: true,
progress: undefined,
});
}
};
const deleteRole = (id) => {
CTX.setRolesChoose(rolesChoose.filter((el) => el !== id));
};
2023-10-21 15:57:05 +03:30
const handleBottomSheetCreateEmployeesOpen = (e) => {
setRoleSelectData(
rolesData.map((item) => ({
key: item.persianName,
value: item.id,
}))
);
2023-11-20 00:07:55 +03:30
// setPositionIdSelectData(
// positionsData.map((item) => ({
// key: item.name,
// value: item.id,
// }))
// );
2023-11-14 16:22:32 +03:30
2023-10-21 15:57:05 +03:30
console.log(idEditUser);
if (e.type == "OPEN") {
CTX.GetRoles();
if (goToEditUser) {
CTX.GetUser(idEditUser);
}
} else if (e.type == "CLOSE") {
clear();
CTX.setGoToEditUser(false);
CTX.setIdEditUser(null);
CTX.setUserData([]);
}
};
useEffect(() => {
if (goToEditUser) {
2023-11-14 16:22:32 +03:30
// const date = moment
// .unix(userData.birthDateTimeStamp)
// .locale("fa")
// .format("YYYY/MM/DD")
// .split("/");
2023-10-21 15:57:05 +03:30
setFirstName(userData.firstName);
setLastName(userData.lastName);
setPhoneNumber(userData.phoneNumber);
2023-11-14 16:22:32 +03:30
// setNationalId(userData.nationalId);
2023-10-21 15:57:05 +03:30
setGender(userData.gender);
2023-11-14 16:22:32 +03:30
// setBirthDate({
// day: parseInt(date[2]),
// month: parseInt(date[1]),
// year: parseInt(date[0]),
// });
2023-10-21 15:57:05 +03:30
// setRoleSelectCurrntData("");
CTX.setRolesChoose(userData.roleIds);
2023-11-20 00:07:55 +03:30
// setPositionId(userData.positionId);
2023-11-14 16:22:32 +03:30
2023-10-21 15:57:05 +03:30
console.log("userData2", userData);
}
}, [userData]);
2023-11-14 16:22:32 +03:30
console.log("positionIdSelectData", positionIdSelectData);
2023-10-19 11:44:56 +03:30
return (
<BottomSheet
2023-10-21 15:57:05 +03:30
onSpringStart={(e) => handleBottomSheetCreateEmployeesOpen(e)}
2023-10-19 11:44:56 +03:30
open={CTX.state.BottomSheetCreateEmployeesOpen}
onDismiss={() => CTX.setBottomSheetCreateEmployeesOpen(false)}
2023-10-26 00:26:44 +03:30
blocking={false}
2023-10-19 11:44:56 +03:30
>
<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="firstName-id"
name="firstName"
type={"text"}
value={firstName}
inputEvent={(e) => {
setFirstName(e.target.value);
validator.current.showMessageFor("firstName");
}}
style="text-right"
validator={true}
validatorData={validator.current.message(
"firstName",
firstName,
"required"
)}
/>
</div>
<div>
<Input
lable="نام خانوادگی"
id="lastName-id"
name="lastName"
type={"text"}
value={lastName}
inputEvent={(e) => {
setLastName(e.target.value);
validator.current.showMessageFor("lastName");
}}
style="text-right"
validator={true}
validatorData={validator.current.message(
"lastName",
lastName,
"required"
)}
/>
</div>
<div className="">
<Input
lable="جنسیت"
id="gender-id"
name="gender"
type={"text"}
value={gender}
inputEvent={(e) => {
setGender(e.target.value);
}}
style="text-right"
select={true}
selectData={[
2023-10-21 11:14:11 +03:30
{ key: "مرد", value: 0 },
{ key: "زن", value: 1 },
2023-10-19 11:44:56 +03:30
]}
/>
</div>
2023-11-14 16:22:32 +03:30
{/* <DatePickerIran
2023-10-21 11:14:11 +03:30
datePickerEvent={(e) => setBirthDate(e)}
date={birthDate}
2023-10-26 00:26:44 +03:30
zindex="z-[1000]"
2023-11-14 16:22:32 +03:30
/> */}
2023-10-19 20:02:54 +03:30
2023-10-19 11:44:56 +03:30
<div className="">
<Input
lable="شماره تماس"
id="phoneNumber-id"
name="phoneNumber"
type={"text"}
value={phoneNumber}
inputEvent={(e) => {
setPhoneNumber(e.target.value);
validator.current.showMessageFor("phoneNumber");
}}
style="text-right"
validator={true}
validatorData={validator.current.message(
"phoneNumber",
phoneNumber,
"required"
)}
/>
</div>
2023-11-14 16:22:32 +03:30
{/* <div className="">
2023-10-19 11:44:56 +03:30
<Input
lable="کد ملی"
id="nationalId-id"
name="nationalId"
type={"text"}
value={nationalId}
inputEvent={(e) => {
setNationalId(e.target.value);
}}
style="text-right"
/>
2023-11-14 16:22:32 +03:30
</div> */}
2023-10-19 11:44:56 +03:30
<div className="">
<Input
lable="سمت شغلی"
id="roleIds-id"
name="roleIds"
type={"text"}
2023-10-21 11:14:11 +03:30
value={roleSelectCurrntData}
2023-10-19 11:44:56 +03:30
inputEvent={(e) => {
2023-10-21 11:14:11 +03:30
setRoleSelectCurrntData(e.target.value);
2023-10-19 11:44:56 +03:30
if (!!rolesChoose.find((b) => b == e.target.value)) {
toast.error("نقش تکراری است", {
position: "bottom-right",
closeOnClick: true,
});
} else {
CTX.setRolesChoose((current) => [...current, e.target.value]);
}
}}
style="text-right"
validatorData={validator.current.message(
"phoneNumber",
phoneNumber,
"required"
)}
select={true}
2023-10-21 11:14:11 +03:30
selectData={roleSelectData}
2023-11-14 16:22:32 +03:30
defaultValue={"انتخاب کنید"}
2023-10-19 11:44:56 +03:30
/>
</div>
<div className="flex flex-wrap mt-3 rtl">
{rolesChoose &&
rolesChoose.map((e) => (
<div className="flex bg-gray-300 p-1 rounded-full m-1 justify-start">
<div
className="w-[30px] h-[30px] rounded-full bg-gray-400 "
onClick={() => deleteRole(e)}
></div>
<div>
<p className="mb-0 px-3 text-sm mt-1">
{rolesData?.find((b) => b.id == e).persianName}
</p>
</div>
</div>
))}
</div>
2023-10-21 15:57:05 +03:30
2023-11-20 00:07:55 +03:30
{/* <div className="">
2023-11-14 16:22:32 +03:30
<Input
lable="پوزیشن مد نظر"
id="positionId-id"
name="positionId"
type={"text"}
inputEvent={(e) => {
setPositionId(e.target.value);
}}
style="text-right"
validatorData={validator.current.message(
"positionId",
positionId,
"required"
)}
select={true}
selectData={positionIdSelectData}
defaultValue={"انتخاب کنید"}
/>
</div>
<div className="flex flex-wrap mt-3 rtl">
<div className="flex bg-gray-300 p-1 rounded-full m-1 justify-start">
<div>
<p className="mb-0 px-3 text-sm mt-1">
{positionsData?.find((b) => b.id == positionId)?.name}
</p>
</div>
</div>
2023-11-20 00:07:55 +03:30
</div> */}
2023-11-14 16:22:32 +03:30
2023-10-21 15:57:05 +03:30
{goToEditUser ? (
<Buttonbriz
title="ویرایش کاربر"
color="INFO"
icon="CHECK"
buttonEvent={() => handleCreateUser("UPDATE")}
subButton={true}
subButtonTitle="حذف کاربر"
subButtonEvent={() => CTX.DeleteUser(idEditUser)}
/>
) : (
<Buttonbriz
title="ثبت کاربر"
color="PRIMARY"
icon="CHECK"
buttonEvent={() => handleCreateUser()}
/>
)}
2023-10-19 11:44:56 +03:30
</div>
</BottomSheet>
);
};
2023-10-21 11:14:11 +03:30
2023-10-19 11:44:56 +03:30
export default BottomSheetCreateEmployees;