import React, { useEffect, useState } from "react"; import useMaster from "../../hooks/masterHook/useMaster"; import { useForm } from "react-hook-form"; import { z } from "zod"; import { zodResolver } from "@hookform/resolvers/zod"; import { RolesRepository } from "../../repositories/MastersRepository"; import { useEmployeeRoles } from "../../hooks/useEmployees"; import { useDispatch } from "react-redux"; import { changeMaster } from "../../slices/localVariablesSlice"; import showToast from "../../services/toastService"; const formSchema = z.object({ selectedRole: z.record(z.boolean()).refine( (data) => { return Object.values(data).some((value) => value === true); }, { message: "At least one checkbox must be selected.", } ), }); const ManageRole = ({ employeeId, onClosed }) => { const disptach = useDispatch(); disptach(changeMaster("Application Role")); const [isLoading, setIsLoading] = useState(false); const { employeeRoles, loading } = useEmployeeRoles(employeeId); const { data, loading: roleLoading } = useMaster(); const buildDefaultRoles = () => { const defaults = {}; data.forEach((role) => { const isRoleEnabled = employeeRoles?.data?.some( (empRole) => empRole.roleId === role.id ); defaults[role.id] = isRoleEnabled; }); return defaults; }; const [initialRoles, setInitialRoles] = useState({}); useEffect(() => { if (employeeRoles && data) { const updatedRoles = buildDefaultRoles(); setInitialRoles(updatedRoles); } }, [employeeRoles, data]); const { register, handleSubmit, formState: { errors }, reset, } = useForm({ resolver: zodResolver(formSchema), defaultValues: { selectedRole: initialRoles, }, }); useEffect(() => { if (Object.keys(initialRoles).length > 0) { reset({ selectedRole: initialRoles, }); } }, [initialRoles, reset]); const onSubmit = (formdata) => { setIsLoading(true); const result = []; for (const [roleId, isEnabled] of Object.entries(formdata.selectedRole)) { if (isEnabled) { result.push({ employeeId: employeeId, isEnabled: true, roleId: roleId, }); } } RolesRepository.createEmployeeRoles(result) .then((resp) => { showToast("Role assigned successfully", "success"); setIsLoading(false); onClosed(); }) .catch((err) => { console.log(err); setIsLoading(false); showToast(err.message, "error"); }); setIsLoading(false); }; console.log(data) return (
); }; export default ManageRole;