Rev 3628 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useEffect, useState } from 'react';
import { useForm, FormProvider } from 'react-hook-form';
import { Spinner } from '..';
export function Form({
children,
onSubmit,
defaultValuesPromise,
reset: propReset = false,
...rest
}) {
const methods = useForm();
const { handleSubmit, reset } = methods;
const [loadingDefaults, setLoadingDefaults] = useState(true);
useEffect(() => {
let isMounted = true;
if (defaultValuesPromise) {
setLoadingDefaults(true);
defaultValuesPromise()
.then((data) => {
if (isMounted) {
reset(data);
setLoadingDefaults(false);
}
})
.catch((error) => {
console.error('Error al obtener valores por defecto:', error);
setLoadingDefaults(false); // Asegúrate de quitar el loading incluso en caso de error
});
} else {
setLoadingDefaults(false);
}
return () => {
isMounted = false;
};
}, [defaultValuesPromise, reset]);
const handleFormSubmit = (data) => {
if (onSubmit) {
onSubmit(data);
}
if (propReset) {
reset();
}
};
return (
<FormProvider {...methods}>
<form onSubmit={handleSubmit(handleFormSubmit)} {...rest}>
{loadingDefaults ? <Spinner /> : children}
</form>
</FormProvider>
);
}