Proyectos de Subversion LeadersLinked - SPA

Rev

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