Proyectos de Subversion LeadersLinked - SPA

Rev

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