Pramod_Bug#80 #38
@ -23,8 +23,10 @@ const ManageEmployee = () => {
|
|||||||
employee,
|
employee,
|
||||||
error,
|
error,
|
||||||
loading: empLoading,
|
loading: empLoading,
|
||||||
} = useEmployeeProfile(employeeId);
|
} = useEmployeeProfile( employeeId );
|
||||||
dispatch(changeMaster("Job Role"));
|
|
||||||
|
dispatch( changeMaster( "Job Role" ) );
|
||||||
|
|
||||||
const [disabledEmail, setDisabledEmail] = useState(false);
|
const [disabledEmail, setDisabledEmail] = useState(false);
|
||||||
const { data: job_role, loading } = useMaster();
|
const { data: job_role, loading } = useMaster();
|
||||||
const [isloading, setLoading] = useState(false);
|
const [isloading, setLoading] = useState(false);
|
||||||
@ -39,7 +41,7 @@ const ManageEmployee = () => {
|
|||||||
MiddleName: z.string().optional(),
|
MiddleName: z.string().optional(),
|
||||||
LastName: z.string().min(1, { message: "Last Name is required" }),
|
LastName: z.string().min(1, { message: "Last Name is required" }),
|
||||||
Email: z
|
Email: z
|
||||||
.string()
|
.string().max(80,"Email cannot exceed 80 characters")
|
||||||
.optional()
|
.optional()
|
||||||
.refine((val) => !val || /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(val), {
|
.refine((val) => !val || /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(val), {
|
||||||
message: "Invalid email format",
|
message: "Invalid email format",
|
||||||
@ -59,7 +61,7 @@ const ManageEmployee = () => {
|
|||||||
CurrentAddress: z
|
CurrentAddress: z
|
||||||
.string()
|
.string()
|
||||||
.min(1, { message: "Current Address is required" })
|
.min(1, { message: "Current Address is required" })
|
||||||
.max(500, { message: "Address cannot exceed 250 characters" }),
|
.max(500, { message: "Address cannot exceed 500 characters" }),
|
||||||
BirthDate: z
|
BirthDate: z
|
||||||
.string()
|
.string()
|
||||||
.min(1, { message: "Birth Date is required" })
|
.min(1, { message: "Birth Date is required" })
|
||||||
@ -111,7 +113,7 @@ const ManageEmployee = () => {
|
|||||||
PermanentAddress: z
|
PermanentAddress: z
|
||||||
.string()
|
.string()
|
||||||
.min(1, { message: "Permanent Address is required" })
|
.min(1, { message: "Permanent Address is required" })
|
||||||
.max(500, { message: "Address cannot exceed 250 characters" }),
|
.max(500, { message: "Address cannot exceed 500 characters" }),
|
||||||
PhoneNumber: z
|
PhoneNumber: z
|
||||||
.string()
|
.string()
|
||||||
.min(1, { message: "Phone Number is required" })
|
.min(1, { message: "Phone Number is required" })
|
||||||
@ -150,7 +152,8 @@ const ManageEmployee = () => {
|
|||||||
mode: "onChange",
|
mode: "onChange",
|
||||||
});
|
});
|
||||||
|
|
||||||
const AadharNumberValue = watch("AadharNumber") || "";
|
const AadharNumberValue = watch( "AadharNumber" ) || "";
|
||||||
|
|
||||||
|
|
||||||
const onSubmit = (data) => {
|
const onSubmit = (data) => {
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
@ -181,8 +184,11 @@ const ManageEmployee = () => {
|
|||||||
.then((response) => {
|
.then((response) => {
|
||||||
showToast("Employee details updated successfully.", "success");
|
showToast("Employee details updated successfully.", "success");
|
||||||
clearCacheKey("employeeListByProject");
|
clearCacheKey("employeeListByProject");
|
||||||
clearCacheKey("allEmployeeList");
|
clearCacheKey( "allEmployeeList" );
|
||||||
setLoading(false);
|
clearCacheKey("employeeProfile")
|
||||||
|
|
||||||
|
setLoading( false );
|
||||||
|
reset()
|
||||||
navigation("/employees");
|
navigation("/employees");
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
@ -251,7 +257,7 @@ const ManageEmployee = () => {
|
|||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div className="card-body">
|
<div className="card-body">
|
||||||
{!currentEmployee && empLoading && (
|
{(!currentEmployee && empLoading) && (
|
||||||
<p>Loading Employee Data...</p>
|
<p>Loading Employee Data...</p>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
@ -324,7 +330,7 @@ const ManageEmployee = () => {
|
|||||||
{...register("Email")}
|
{...register("Email")}
|
||||||
className="form-control form-control-sm"
|
className="form-control form-control-sm"
|
||||||
placeholder="example@domain.com"
|
placeholder="example@domain.com"
|
||||||
aria-label=""
|
maxLength={80}
|
||||||
aria-describedby="Email"
|
aria-describedby="Email"
|
||||||
disabled={!!currentEmployee?.email}
|
disabled={!!currentEmployee?.email}
|
||||||
/>
|
/>
|
||||||
@ -438,15 +444,16 @@ const ManageEmployee = () => {
|
|||||||
placeholder="Current Address"
|
placeholder="Current Address"
|
||||||
aria-label="Current Address"
|
aria-label="Current Address"
|
||||||
aria-describedby="basic-icon-default-message2"
|
aria-describedby="basic-icon-default-message2"
|
||||||
{...register("CurrentAddress")}
|
{...register( "CurrentAddress" )}
|
||||||
|
maxLength={500}
|
||||||
onChange={(e) => {
|
onChange={(e) => {
|
||||||
setCurrentAddressLength(e.target.value.length);
|
setCurrentAddressLength(e.target.value.length);
|
||||||
// let react-hook-form still handle it
|
// let react-hook-form still handle it
|
||||||
register("CurrentAddress").onChange(e);
|
register("CurrentAddress").onChange(e);
|
||||||
}}
|
}}
|
||||||
></textarea>
|
></textarea>
|
||||||
<div className="text-end small">
|
<div className="text-end muted">
|
||||||
{500 - currentAddressLength} characters left
|
<small> {500 - currentAddressLength} characters left</small>
|
||||||
</div>
|
</div>
|
||||||
{errors.CurrentAddress && (
|
{errors.CurrentAddress && (
|
||||||
<div
|
<div
|
||||||
@ -468,14 +475,15 @@ const ManageEmployee = () => {
|
|||||||
placeholder="Permanent Address"
|
placeholder="Permanent Address"
|
||||||
aria-label="Permanent Address"
|
aria-label="Permanent Address"
|
||||||
aria-describedby="basic-icon-default-message2"
|
aria-describedby="basic-icon-default-message2"
|
||||||
{...register("PermanentAddress")}
|
{...register( "PermanentAddress" )}
|
||||||
|
maxLength={500}
|
||||||
onChange={(e) => {
|
onChange={(e) => {
|
||||||
setPermanentAddressLength(e.target.value.length);
|
setPermanentAddressLength(e.target.value.length);
|
||||||
register("PermanentAddress").onChange(e);
|
register("PermanentAddress").onChange(e);
|
||||||
}}
|
}}
|
||||||
></textarea>
|
></textarea>
|
||||||
<div className="text-end small">
|
<div className="text-end muted">
|
||||||
{500 - permanentAddressLength} characters left
|
<small>{500 - permanentAddressLength} characters left</small>
|
||||||
</div>
|
</div>
|
||||||
{errors.PermanentAddress && (
|
{errors.PermanentAddress && (
|
||||||
<div
|
<div
|
||||||
|
@ -30,7 +30,7 @@ const ManageRole = ({ employeeId, onClosed }) => {
|
|||||||
const buildDefaultRoles = () => {
|
const buildDefaultRoles = () => {
|
||||||
const defaults = {};
|
const defaults = {};
|
||||||
data.forEach((role) => {
|
data.forEach((role) => {
|
||||||
const isRoleEnabled = employeeRoles?.data?.some(
|
const isRoleEnabled = employeeRoles?.some(
|
||||||
(empRole) => empRole.roleId === role.id
|
(empRole) => empRole.roleId === role.id
|
||||||
);
|
);
|
||||||
defaults[role.id] = isRoleEnabled;
|
defaults[role.id] = isRoleEnabled;
|
||||||
|
@ -97,8 +97,8 @@ export const useEmployeeRoles = (employeeId)=>{
|
|||||||
try {
|
try {
|
||||||
RolesRepository.getEmployeeRoles(employeeid)
|
RolesRepository.getEmployeeRoles(employeeid)
|
||||||
.then((response) => {
|
.then((response) => {
|
||||||
setEmployeeRoles(response);
|
setEmployeeRoles(response.data);
|
||||||
cacheData("employeelist", response);
|
cacheData("employeelist", response.data);
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
setError("Failed to fetch data.");
|
setError("Failed to fetch data.");
|
||||||
|
@ -458,30 +458,30 @@ const EmployeeList = () => {
|
|||||||
onClick={() =>
|
onClick={() =>
|
||||||
navigate(`/employee/${item.id}`)
|
navigate(`/employee/${item.id}`)
|
||||||
}
|
}
|
||||||
className="dropdown-item"
|
className="dropdown-item py-1"
|
||||||
>
|
>
|
||||||
View
|
<i className="bx bx-detail bx-sm"></i> View
|
||||||
</button>
|
</button>
|
||||||
<Link
|
<Link
|
||||||
to={`/employee/manage/${item.id}`}
|
to={`/employee/manage/${item.id}`}
|
||||||
className="dropdown-item"
|
className="dropdown-item py-1"
|
||||||
>
|
>
|
||||||
Edit
|
<i class='bx bx-edit bx-sm'></i> Edit
|
||||||
</Link>
|
</Link>
|
||||||
<button
|
<button
|
||||||
className="dropdown-item"
|
className="dropdown-item py-1"
|
||||||
onClick={handleShow}
|
onClick={handleShow}
|
||||||
>
|
>
|
||||||
Suspend
|
<i class='bx bx-task-x bx-sm'></i> Suspend
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
className="dropdown-item"
|
className="dropdown-item py-1"
|
||||||
type="button"
|
type="button"
|
||||||
data-bs-toggle="modal"
|
data-bs-toggle="modal"
|
||||||
data-bs-target="#managerole-modal"
|
data-bs-target="#managerole-modal"
|
||||||
onClick={() => handleConfigData(item.id)}
|
onClick={() => handleConfigData(item.id)}
|
||||||
>
|
>
|
||||||
Manage Role
|
<i class='bx bx-cog bx-sm'></i> Manage Role
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user