Proyectos de Subversion LeadersLinked - SPA

Rev

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