Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3452 | Rev 3628 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
3452 stevensc 1
import React, { useEffect, useState } from 'react';
2
import { useForm, FormProvider } from 'react-hook-form';
3
 
4
import { Spinner } from '..';
5
 
6
export function Form({
7
  children,
8
  onSubmit,
3555 stevensc 9
  defaultValues,
3452 stevensc 10
  defaultValuesPromise,
11
  reset: propReset = false,
12
  ...rest
13
}) {
3555 stevensc 14
  const methods = useForm({ defaultValues });
3452 stevensc 15
  const { handleSubmit, reset } = methods;
16
  const [loadingDefaults, setLoadingDefaults] = useState(true);
17
 
18
  useEffect(() => {
19
    let isMounted = true;
20
 
21
    if (defaultValuesPromise) {
22
      setLoadingDefaults(true);
23
      defaultValuesPromise()
24
        .then((data) => {
25
          if (isMounted) {
26
            reset(data);
27
            setLoadingDefaults(false);
28
          }
29
        })
30
        .catch((error) => {
31
          console.error('Error al obtener valores por defecto:', error);
32
          setLoadingDefaults(false); // Asegúrate de quitar el loading incluso en caso de error
33
        });
34
    } else {
35
      setLoadingDefaults(false);
36
    }
37
 
38
    return () => {
39
      isMounted = false;
40
    };
41
  }, [defaultValuesPromise, reset]);
42
 
43
  const handleFormSubmit = (data) => {
44
    if (onSubmit) {
45
      onSubmit(data);
46
    }
47
    if (propReset) {
3555 stevensc 48
      reset(undefined, { keepDefaultValues: true });
3452 stevensc 49
    }
50
  };
51
 
52
  return (
53
    <FormProvider {...methods}>
54
      <form onSubmit={handleSubmit(handleFormSubmit)} {...rest}>
55
        {loadingDefaults ? <Spinner /> : children}
56
      </form>
57
    </FormProvider>
58
  );
59
}