From 6caad7850da7cdda958bc245ef9d4b1ba85ac767 Mon Sep 17 00:00:00 2001 From: pramod mahajan Date: Fri, 5 Sep 2025 11:45:04 +0530 Subject: [PATCH] clear and structured code --- src/components/Project/ProjectPermission.jsx | 151 ++++++++++--------- 1 file changed, 76 insertions(+), 75 deletions(-) diff --git a/src/components/Project/ProjectPermission.jsx b/src/components/Project/ProjectPermission.jsx index 2db3f48e..1872918e 100644 --- a/src/components/Project/ProjectPermission.jsx +++ b/src/components/Project/ProjectPermission.jsx @@ -12,16 +12,15 @@ import { z } from "zod"; import showToast from "../../services/toastService"; export const ProjectPermissionSchema = z.object({ - employeeId: z.string(), + employeeId: z.string().min(1, "Employee is required"), selectedPermissions: z.array(z.string()).optional(), }); const ProjectPermission = () => { const selectedProject = useSelectedproject(); - const { data: ProjectModules } = useProjectLevelModules(); - const { employees = [], isLoading: isEmployeeLoading } = - useEmployeesByProject(selectedProject); + const { data: ProjectModules = [] } = useProjectLevelModules(); + const { employees = [], loading } = useEmployeesByProject(selectedProject); const { register, @@ -39,14 +38,14 @@ const ProjectPermission = () => { const selectedEmployee = watch("employeeId"); - // Fetch permissions for the selected employee const { data: selectedEmpPermissions } = useProjectLevelEmployeePermission( selectedEmployee || "", selectedProject ); - // Update form state when employee permissions change useEffect(() => { + if (!employees.length) return; + const enabledPerms = selectedEmpPermissions?.permissions ?.filter((perm) => perm.isEnabled) @@ -58,18 +57,17 @@ const ProjectPermission = () => { }); }, [selectedEmpPermissions, reset, selectedEmployee, employees]); - const { mutate: UpdatePermission, isPending } = + const { mutate: updatePermission, isPending } = useUpdateProjectLevelEmployeePermission(); + const onSubmit = (formData) => { - // Guard 1: Ensure employee selected if (!formData.employeeId) { - console.warn("No employee selected"); + showToast("Please select an employee", "warn"); return; } const existingPermissions = selectedEmpPermissions?.permissions || []; - // Build payload const payloadPermissions = existingPermissions.length > 0 ? existingPermissions.map((perm) => ({ @@ -81,20 +79,19 @@ const ProjectPermission = () => { isEnabled: true, })); - // Guard 2: Prevent API call if no permissions at all if (payloadPermissions.length === 0) { showToast("No permissions selected", "warn"); return; } - // Guard 3 (optional): Prevent API call if nothing changed const hasChanges = existingPermissions.some( (perm) => perm.isEnabled !== (formData.selectedPermissions?.includes(perm.id) || false) ); + if (!hasChanges && existingPermissions.length > 0) { - showToast("No changes detected", "warn"); + showToast("No changes detected", "info"); return; } @@ -104,75 +101,79 @@ const ProjectPermission = () => { permission: payloadPermissions, }; - UpdatePermission(payload); + updatePermission(payload); }; return (
- {isEmployeeLoading ? ( - <>Loading... - ) : ( -
-
-
- - - {errors.employeeId && ( -
- {errors.employeeId.message} -
- )} -
- -
- - {ProjectModules?.map((feature) => ( -
-
- {feature.name} -
-
-
- {feature.featurePermissions?.map((perm) => ( -
- -
+ + {/* Employee Dropdown */} +
+
+ + + {errors.employeeId && ( +
+ {errors.employeeId.message}
-
+ )} +
+ +
+ + {/* Permissions */} + {ProjectModules.map((feature) => ( +
+
+ {feature.name}
- ))} - - )} +
+
+ {feature.featurePermissions?.map((perm) => ( +
+ +
+ ))} +
+
+
+
+ ))} +
); };