Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3555 | Rev 3630 | 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,
3628 stevensc 12
  style,
3452 stevensc 13
  ...rest
14
}) {
3555 stevensc 15
  const methods = useForm({ defaultValues });
3452 stevensc 16
  const { handleSubmit, reset } = methods;
17
  const [loadingDefaults, setLoadingDefaults] = useState(true);
18
 
19
  useEffect(() => {
20
    let isMounted = true;
21
 
22
    if (defaultValuesPromise) {
23
      setLoadingDefaults(true);
24
      defaultValuesPromise()
25
        .then((data) => {
26
          if (isMounted) {
27
            reset(data);
28
            setLoadingDefaults(false);
29
          }
30
        })
31
        .catch((error) => {
32
          console.error('Error al obtener valores por defecto:', error);
33
          setLoadingDefaults(false); // Asegúrate de quitar el loading incluso en caso de error
34
        });
35
    } else {
36
      setLoadingDefaults(false);
37
    }
38
 
39
    return () => {
40
      isMounted = false;
41
    };
42
  }, [defaultValuesPromise, reset]);
43
 
44
  const handleFormSubmit = (data) => {
45
    if (onSubmit) {
46
      onSubmit(data);
47
    }
48
    if (propReset) {
3555 stevensc 49
      reset(undefined, { keepDefaultValues: true });
3452 stevensc 50
    }
51
  };
52
 
53
  return (
54
    <FormProvider {...methods}>
3628 stevensc 55
      <form onSubmit={handleSubmit(handleFormSubmit)} style={style} {...rest}>
3452 stevensc 56
        {loadingDefaults ? <Spinner /> : children}
57
      </form>
58
    </FormProvider>
59
  );
60
}