diff --git a/src/components/Project/ProjectPermission.jsx b/src/components/Project/ProjectPermission.jsx index e12e8e91..6bfd5e5a 100644 --- a/src/components/Project/ProjectPermission.jsx +++ b/src/components/Project/ProjectPermission.jsx @@ -43,67 +43,62 @@ const ProjectPermission = () => { selectedProject ); - useEffect(() => { - if (!employees.length) return; +useEffect(() => { + if (!selectedEmployee) return; - const enabledPerms = - selectedEmpPermissions?.permissions - ?.filter((perm) => perm.isEnabled) - ?.map((perm) => perm.id) || []; + const enabledPerms = + selectedEmpPermissions?.permissions + ?.filter((perm) => perm.isEnabled) + ?.map((perm) => perm.id) || []; + + reset((prev) => ({ + ...prev, + selectedPermissions: enabledPerms, + })); +}, [selectedEmpPermissions, reset, selectedEmployee]); - reset({ - employeeId: selectedEmployee || employees[0]?.id || "", - selectedPermissions: enabledPerms, - }); - }, [selectedEmpPermissions, reset, selectedEmployee, employees]); const { mutate: updatePermission, isPending } = useUpdateProjectLevelEmployeePermission(); - const onSubmit = (formData) => { - if (!formData.employeeId) { - showToast("Please select an employee", "warn"); - return; - } + const onSubmit = (formData) => { + if (!formData.employeeId) { + showToast("Please select an employee", "warn"); + return; + } - const existingPermissions = selectedEmpPermissions?.permissions || []; + const existingPermissions = selectedEmpPermissions?.permissions || []; + const existingEnabledIds = existingPermissions + .filter((p) => p.isEnabled) + .map((p) => p.id); - const payloadPermissions = - existingPermissions.length > 0 - ? existingPermissions.map((perm) => ({ - id: perm.id, - isEnabled: formData.selectedPermissions?.includes(perm.id) || false, - })) - : (formData.selectedPermissions || []).map((id) => ({ - id, - isEnabled: true, - })); + const newSelectedIds = formData.selectedPermissions || []; - if (payloadPermissions.length === 0) { - showToast("No permissions selected", "warn"); - return; - } + const removed = existingEnabledIds + .filter((id) => !newSelectedIds.includes(id)) + .map((id) => ({ id, isEnabled: false })); - const hasChanges = existingPermissions.some( - (perm) => - perm.isEnabled !== - (formData.selectedPermissions?.includes(perm.id) || false) - ); + const added = newSelectedIds + .filter((id) => !existingEnabledIds.includes(id)) + .map((id) => ({ id, isEnabled: true })); - if (!hasChanges && existingPermissions.length > 0) { - showToast("No changes detected", "info"); - return; - } + const payloadPermissions = [...removed, ...added]; - const payload = { - employeeId: formData.employeeId, - projectId: selectedProject, - permission: payloadPermissions, - }; + if (payloadPermissions.length === 0) { + showToast("No changes detected", "info"); + return; + } - updatePermission(payload); + const payload = { + employeeId: formData.employeeId, + projectId: selectedProject, + permission: payloadPermissions, }; + updatePermission(payload); +}; + + return (
@@ -120,22 +115,31 @@ const ProjectPermission = () => { ) : ( <> - - {employees.map((emp) => ( - - ))} + + {[...employees]?.sort((a, b) => + `${a.firstName} ${a.firstName}`?.localeCompare( + `${b.firstName} ${b.lastName}` + ) + ) + ?.map((emp) => ( + + ))} )} + {errors.employeeId && (
{errors.employeeId.message}
)}
- @@ -149,10 +153,7 @@ const ProjectPermission = () => {
{feature.featurePermissions?.map((perm) => ( -
+