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 (