Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3254 | Rev 3269 | 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
 
3244 stevensc 6
import Widget from '@components/UI/Widget'
3211 stevensc 7
import Form from '@components/common/form'
8
import Input from '@components/UI/inputs/Input'
9
import Ckeditor from '@components/UI/Ckeditor'
10
import TagsInput from '@components/UI/TagsInput'
11
import LoadingWrapper from '@components/common/loading-wrapper'
12
import FormErrorFeedback from '@components/UI/form/FormErrorFeedback'
13
 
3230 stevensc 14
import 'react-datetime/css/react-datetime.css'
15
 
3211 stevensc 16
export default function GoalForm({
17
  onSubmit = () => {},
3217 stevensc 18
  habits = [],
3211 stevensc 19
  defaultValues = {},
20
  values = {}
21
}) {
22
  const {
23
    control,
24
    handleSubmit,
25
    formState: { errors, isSubmitting }
26
  } = useForm({
3230 stevensc 27
    defaultValues,
3254 stevensc 28
    values
3211 stevensc 29
  })
30
 
31
  return (
3254 stevensc 32
    <Widget styles={{ overflow: 'visible' }}>
3244 stevensc 33
      <Widget.Body>
34
        <Form onSubmit={handleSubmit(onSubmit)}>
35
          <LoadingWrapper loading={isSubmitting} displayChildren>
36
            <Input
37
              name='name'
38
              label='Nombre'
39
              placeholder='Escribe el nombre de la meta'
40
              control={control}
41
              rules={{ required: 'El nombre es requerido' }}
42
              error={errors.name?.message}
43
            />
3211 stevensc 44
 
3244 stevensc 45
            <Ckeditor
46
              label='Descripción'
47
              name='description'
48
              control={control}
49
              rules={{ required: 'La descripción es requerida' }}
50
              error={errors.description?.message}
51
            />
3211 stevensc 52
 
3244 stevensc 53
            <Input
54
              type='number'
55
              name='value'
3262 stevensc 56
              label='Valor cuantitativo de la Meta a lograr'
57
              placeholder='Escribe el valor'
3244 stevensc 58
              control={control}
59
              rules={{
60
                required: { value: true, message: 'El valor es requerido' },
61
                validate: {
62
                  positive: (value) =>
63
                    Number(value) > 0 || 'El valor mayor a cero',
64
                  max: (value) =>
65
                    Number(value) <= 100 ||
66
                    'El valor debe ser menor o igual a 100'
67
                }
68
              }}
69
              error={errors.value?.message}
70
            />
3211 stevensc 71
 
3244 stevensc 72
            <Controller
73
              name='skill_id'
74
              control={control}
75
              defaultValue={[]}
76
              render={({ field: { name, onChange } }) => (
77
                <>
78
                  <TagsInput
79
                    name={name}
3262 stevensc 80
                    label='Hábitos y competencias para lograr la Meta'
3244 stevensc 81
                    onChange={onChange}
82
                    suggestions={habits}
83
                  />
84
                  {errors.skill_id && (
85
                    <FormErrorFeedback>
86
                      {errors.skill_id?.message}
87
                    </FormErrorFeedback>
88
                  )}
89
                </>
3211 stevensc 90
              )}
3244 stevensc 91
            />
3211 stevensc 92
 
3244 stevensc 93
            <Controller
94
              name='start_date'
95
              control={control}
96
              rules={{
97
                required: { value: true, message: 'La fecha es requerida' },
98
                validate: {
99
                  beGreaterThanToday: (value) =>
100
                    new Date(value) > new Date() ||
101
                    'La fecha debe ser mayor a la fecha actual'
102
                }
103
              }}
104
              render={({ field: { onChange, ref, value, name } }) => (
105
                <>
106
                  <InputLabel>Fecha de inicio</InputLabel>
107
                  <Datetime
108
                    dateFormat='DD-MM-YYYY'
109
                    onChange={(e) => onChange(e.format('YYYY-MM-DD'))}
110
                    timeFormat={false}
111
                    inputProps={{ className: 'form-control', ref, name }}
112
                    value={value}
113
                    closeOnSelect
114
                  />
115
                  {errors.start_date && (
116
                    <FormErrorFeedback>
117
                      {errors.start_date?.message}
118
                    </FormErrorFeedback>
119
                  )}
120
                </>
3214 stevensc 121
              )}
3244 stevensc 122
            />
3223 stevensc 123
 
3244 stevensc 124
            <Controller
125
              name='end_date'
126
              control={control}
127
              rules={{
128
                required: { value: true, message: 'La fecha es requerida' },
129
                validate: (value, { start_date }) =>
130
                  new Date(value) > new Date(start_date) ||
131
                  'La fecha debe ser mayor a la fecha de inicio'
132
              }}
133
              render={({ field: { onChange, name, ref, value } }) => (
134
                <>
135
                  <InputLabel>Fecha de finalización</InputLabel>
136
                  <Datetime
137
                    dateFormat='DD-MM-YYYY'
138
                    onChange={(e) => onChange(e.format('YYYY-MM-DD'))}
139
                    timeFormat={false}
140
                    inputProps={{ className: 'form-control', ref, name }}
141
                    value={value}
142
                    closeOnSelect
143
                  />
144
                  {errors.end_date && (
145
                    <FormErrorFeedback>
146
                      {errors.end_date?.message}
147
                    </FormErrorFeedback>
148
                  )}
149
                </>
3214 stevensc 150
              )}
3244 stevensc 151
            />
3211 stevensc 152
 
3244 stevensc 153
            <Button type='submit' color='primary'>
154
              Enviar
155
            </Button>
156
          </LoadingWrapper>
157
        </Form>
158
      </Widget.Body>
159
    </Widget>
3211 stevensc 160
  )
161
}