Proyectos de Subversion LeadersLinked - SPA

Rev

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