Rev 3630 | Rev 3719 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useEffect } from 'react';import { useForm, FormProvider } from 'react-hook-form';import { Spinner } from '..';import { useAlert, useApi } from '@shared/hooks';export function Form({children,onSubmit,defaultValues,defaultValuesPromise,reset: propReset = false,style,...rest}) {const methods = useForm({ defaultValues });const {handleSubmit,reset,formState: { isSubmitting }} = methods;const { showError } = useAlert();const { loading, execute } = useApi(defaultValuesPromise, {onSuccess: (data) => {reset(data);},onError: (error) => {showError(error.message);}});useEffect(() => {if (defaultValuesPromise) execute();}, [defaultValuesPromise]);const handleFormSubmit = async (data) => {if (onSubmit) {await onSubmit(data);}if (propReset) {reset(undefined, { keepDefaultValues: true });}};return (<FormProvider {...methods}><formonSubmit={handleSubmit(handleFormSubmit)}style={{ position: 'relative', ...style }}{...rest}>{children}{(isSubmitting || loading) && <Spinner absolute />}</form></FormProvider>);}