Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3555 | Rev 3630 | 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,
  defaultValues,
  defaultValuesPromise,
  reset: propReset = false,
  style,
  ...rest
}) {
  const methods = useForm({ defaultValues });
  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(undefined, { keepDefaultValues: true });
    }
  };

  return (
    <FormProvider {...methods}>
      <form onSubmit={handleSubmit(handleFormSubmit)} style={style} {...rest}>
        {loadingDefaults ? <Spinner /> : children}
      </form>
    </FormProvider>
  );
}