Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3214 | Rev 3216 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
3211 stevensc 1
import React from 'react'
2
import { Controller, useForm } from 'react-hook-form'
3214 stevensc 3
import { Button, InputLabel } from '@mui/material'
3211 stevensc 4
import Datetime from 'react-datetime'
5
 
6
import Form from '@components/common/form'
7
import Input from '@components/UI/inputs/Input'
8
import Ckeditor from '@components/UI/Ckeditor'
9
import TagsInput from '@components/UI/TagsInput'
10
import LoadingWrapper from '@components/common/loading-wrapper'
11
import FormErrorFeedback from '@components/UI/form/FormErrorFeedback'
12
 
13
export default function GoalForm({
14
  onSubmit = () => {},
15
  defaultValues = {},
16
  values = {}
17
}) {
18
  const {
19
    control,
20
    handleSubmit,
21
    formState: { errors, isSubmitting }
22
  } = useForm({
23
    defaultValues,
24
    values
25
  })
26
 
27
  return (
28
    <Form onSubmit={handleSubmit(onSubmit)}>
29
      <LoadingWrapper loading={isSubmitting}>
30
        <Input
31
          name='name'
32
          label='Nombre'
33
          placeholder='Escribe el nombre de la meta'
34
          control={control}
3215 stevensc 35
          rules={{ required: 'El nombre es requerido' }}
3211 stevensc 36
          error={errors.name?.message}
37
        />
38
 
39
        <Ckeditor
40
          label='Descripción'
41
          name='description'
42
          control={control}
3215 stevensc 43
          rules={{ required: 'La descripción es requerida' }}
3211 stevensc 44
          error={errors.description?.message}
45
        />
46
 
47
        <Input
48
          type='number'
49
          name='value'
50
          label='Valor'
51
          placeholder='Define el valor de la meta'
52
          control={control}
3215 stevensc 53
          rules={{
54
            required: 'El valor es requerido',
55
            min: { value: 1, message: 'El valor debe ser mayor a 1' },
56
            max: { value: 100, message: 'El valor debe ser menor a 100' }
57
          }}
3211 stevensc 58
          error={errors.value?.message}
59
        />
60
 
61
        <Controller
62
          name='skill_id'
63
          control={control}
64
          defaultValue={[]}
3215 stevensc 65
          rules={{ required: 'Selecciona al menos un hábito' }}
3211 stevensc 66
          render={({ field: { name, onChange } }) => (
67
            <>
68
              <TagsInput
69
                name={name}
70
                label='Habitos'
71
                onChange={onChange}
3212 stevensc 72
                suggestions={[]}
3211 stevensc 73
              />
74
              {errors.skill_id && (
75
                <FormErrorFeedback>
76
                  {errors.skill_id?.message}
77
                </FormErrorFeedback>
78
              )}
79
            </>
80
          )}
81
        />
82
 
83
        <Controller
84
          name='start_date'
85
          control={control}
3215 stevensc 86
          rules={{
87
            required: 'La fecha es requerida',
88
            validate: {
89
              beGreaterThanToday: (value) =>
90
                new Date(value) > new Date() ||
91
                'La fecha debe ser mayor a la fecha actual'
92
            }
93
          }}
3213 stevensc 94
          render={({ field: { onChange } }) => (
3214 stevensc 95
            <>
96
              <InputLabel>Fecha de inicio</InputLabel>
97
              <Datetime
98
                dateFormat='DD-MM-YYYY'
99
                onChange={(e) => onChange(e.format('YYYY-MM-DD'))}
100
                timeFormat={false}
101
                inputProps={{ className: 'form-control' }}
102
                closeOnSelect
103
              />
104
              {errors.start_date && (
105
                <FormErrorFeedback>
106
                  {errors.start_date?.message}
107
                </FormErrorFeedback>
108
              )}
109
            </>
3211 stevensc 110
          )}
111
        />
3214 stevensc 112
        <Controller
113
          name='end_date'
114
          control={control}
3215 stevensc 115
          rules={{
116
            required: 'La fecha es requerida',
117
            validate: {
118
              beGreaterThanStartDate: (value, { start_date }) =>
119
                new Date(value) > new Date(start_date) ||
120
                'La fecha debe ser mayor a la fecha de inicio'
121
            }
122
          }}
3214 stevensc 123
          render={({ field: { onChange } }) => (
124
            <>
125
              <InputLabel>Fecha de finalización</InputLabel>
126
              <Datetime
127
                dateFormat='DD-MM-YYYY'
128
                onChange={(e) => onChange(e.format('YYYY-MM-DD'))}
129
                timeFormat={false}
130
                inputProps={{ className: 'form-control' }}
131
                closeOnSelect
132
              />
133
              {errors.end_date && (
134
                <FormErrorFeedback>
135
                  {errors.end_date?.message}
136
                </FormErrorFeedback>
137
              )}
138
            </>
139
          )}
140
        />
3211 stevensc 141
 
142
        <Button type='submit' color='primary'>
143
          Enviar
144
        </Button>
145
      </LoadingWrapper>
146
    </Form>
147
  )
148
}