Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3719 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
3719 stevensc 1
import React from 'react';
3736 stevensc 2
import { Box, useTheme } from '@mui/material';
3719 stevensc 3
import { useForm, FormProvider } from 'react-hook-form';
4
 
5
import { Spinner } from '..';
6
 
3736 stevensc 7
export function Form({ children, onSubmit, defaultValues, reset: propReset = false, ...rest }) {
8
  const theme = useTheme();
3719 stevensc 9
  const methods = useForm({ defaultValues });
10
  const {
11
    handleSubmit,
12
    reset,
13
    formState: { isSubmitting }
14
  } = methods;
15
 
16
  const handleFormSubmit = async (data) => {
17
    if (onSubmit) {
18
      await onSubmit(data);
19
    }
20
    if (propReset) {
21
      reset(undefined, { keepDefaultValues: true });
22
    }
23
  };
24
 
25
  return (
26
    <FormProvider {...methods}>
3736 stevensc 27
      <Box
28
        component='form'
3719 stevensc 29
        onSubmit={handleSubmit(handleFormSubmit)}
3736 stevensc 30
        sx={{
31
          position: 'relative',
32
          display: 'flex',
33
          flexDirection: 'column',
34
          alignItems: 'flex-start',
35
          gap: theme.spacing(0.5),
36
          width: '100%',
37
          '& > *:not(button)': {
38
            width: '100%'
39
          }
40
        }}
3719 stevensc 41
        {...rest}
42
      >
43
        {children}
44
        {isSubmitting && <Spinner absolute />}
3736 stevensc 45
      </Box>
3719 stevensc 46
    </FormProvider>
47
  );
48
}