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'; 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 [isLoading, setIsLoading] = useState(false); const { employeeRoles,loading } = useEmployeeRoles(employeeId); const { data } = 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)=>{ onClosed() }).catch((err)=>{ console.log(err) }) setIsLoading(false) }; if(loading){