Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3628 | Rev 3645 | Ir a la última revisión | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 3628 Rev 3630
Línea 1... Línea 1...
1
import React, { useEffect, useState } from 'react';
1
import React, { useEffect } from 'react';
2
import { useForm, FormProvider } from 'react-hook-form';
2
import { useForm, FormProvider } from 'react-hook-form';
Línea 3... Línea 3...
3
 
3
 
-
 
4
import { Spinner } from '..';
Línea 4... Línea 5...
4
import { Spinner } from '..';
5
import { useAlert, useApi } from '@shared/hooks';
5
 
6
 
6
export function Form({
7
export function Form({
7
  children,
8
  children,
Línea 11... Línea 12...
11
  reset: propReset = false,
12
  reset: propReset = false,
12
  style,
13
  style,
13
  ...rest
14
  ...rest
14
}) {
15
}) {
15
  const methods = useForm({ defaultValues });
16
  const methods = useForm({ defaultValues });
-
 
17
  const {
16
  const { handleSubmit, reset } = methods;
18
    handleSubmit,
-
 
19
    reset,
17
  const [loadingDefaults, setLoadingDefaults] = useState(true);
20
    formState: { isSubmitting }
-
 
21
  } = methods;
18
 
22
 
19
  useEffect(() => {
-
 
20
    let isMounted = true;
23
  const { showError } = useAlert();
21
 
24
 
22
    if (defaultValuesPromise) {
25
  const { loading, execute } = useApi(defaultValuesPromise, {
23
      setLoadingDefaults(true);
-
 
24
      defaultValuesPromise()
-
 
25
        .then((data) => {
26
    onSuccess: (data) => {
26
          if (isMounted) {
-
 
27
            reset(data);
27
      reset(data);
28
            setLoadingDefaults(false);
-
 
29
          }
-
 
30
        })
28
    },
31
        .catch((error) => {
29
    onError: (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);
30
      showError(error.message);
37
    }
31
    }
-
 
32
  });
Línea 38... Línea 33...
38
 
33
 
39
    return () => {
34
  useEffect(() => {
40
      isMounted = false;
-
 
41
    };
35
    if (defaultValuesPromise) execute();
Línea 42... Línea 36...
42
  }, [defaultValuesPromise, reset]);
36
  }, [defaultValuesPromise]);
43
 
37
 
44
  const handleFormSubmit = (data) => {
38
  const handleFormSubmit = (data) => {
45
    if (onSubmit) {
39
    if (onSubmit) {
Línea 50... Línea 44...
50
    }
44
    }
51
  };
45
  };
Línea 52... Línea 46...
52
 
46
 
53
  return (
47
  return (
-
 
48
    <FormProvider {...methods}>
54
    <FormProvider {...methods}>
49
      <form
-
 
50
        onSubmit={handleSubmit(handleFormSubmit)}
-
 
51
        style={{ position: 'relative', ...style }}
-
 
52
        {...rest}
-
 
53
      >
55
      <form onSubmit={handleSubmit(handleFormSubmit)} style={style} {...rest}>
54
        {children}
56
        {loadingDefaults ? <Spinner /> : children}
55
        {(isSubmitting || loading) && <Spinner absolute />}
57
      </form>
56
      </form>
58
    </FormProvider>
57
    </FormProvider>
59
  );
58
  );