Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3226 | Rev 3228 | 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}
71
          render={({ field: { name, onChange } }) => (
72
            <>
73
              <TagsInput
74
                name={name}
75
                label='Habitos'
76
                onChange={onChange}
3216 stevensc 77
                suggestions={habits}
3211 stevensc 78
              />
79
              {errors.skill_id && (
80
                <FormErrorFeedback>
81
                  {errors.skill_id?.message}
82
                </FormErrorFeedback>
83
              )}
84
            </>
85
          )}
86
        />
87
 
3226 stevensc 88
        <Controller
3211 stevensc 89
          name='start_date'
90
          control={control}
3215 stevensc 91
          rules={{
3222 stevensc 92
            required: { value: true, message: 'La fecha es requerida' },
3215 stevensc 93
            validate: {
94
              beGreaterThanToday: (value) =>
95
                new Date(value) > new Date() ||
96
                'La fecha debe ser mayor a la fecha actual'
97
            }
98
          }}
3220 stevensc 99
          render={({ field: { onChange, ref, value, name } }) => (
3214 stevensc 100
            <>
101
              <InputLabel>Fecha de inicio</InputLabel>
102
              <Datetime
103
                dateFormat='DD-MM-YYYY'
104
                onChange={(e) => onChange(e.format('YYYY-MM-DD'))}
105
                timeFormat={false}
3220 stevensc 106
                inputProps={{ className: 'form-control', ref, name }}
107
                value={value}
3214 stevensc 108
                closeOnSelect
109
              />
110
              {errors.start_date && (
111
                <FormErrorFeedback>
112
                  {errors.start_date?.message}
113
                </FormErrorFeedback>
114
              )}
115
            </>
3211 stevensc 116
          )}
117
        />
3223 stevensc 118
 
3227 stevensc 119
        <Controller
3214 stevensc 120
          name='end_date'
121
          control={control}
3215 stevensc 122
          rules={{
3222 stevensc 123
            required: { value: true, message: 'La fecha es requerida' },
3227 stevensc 124
            validate: (value, { start_date }) =>
125
              new Date(value) > new Date(start_date) ||
126
              'La fecha debe ser mayor a la fecha de inicio'
3215 stevensc 127
          }}
3220 stevensc 128
          render={({ field: { onChange, name, ref, value } }) => (
3214 stevensc 129
            <>
130
              <InputLabel>Fecha de finalización</InputLabel>
131
              <Datetime
132
                dateFormat='DD-MM-YYYY'
133
                onChange={(e) => onChange(e.format('YYYY-MM-DD'))}
134
                timeFormat={false}
3220 stevensc 135
                inputProps={{ className: 'form-control', ref, name }}
136
                value={value}
3214 stevensc 137
                closeOnSelect
138
              />
139
              {errors.end_date && (
140
                <FormErrorFeedback>
141
                  {errors.end_date?.message}
142
                </FormErrorFeedback>
143
              )}
144
            </>
145
          )}
3227 stevensc 146
        />
3211 stevensc 147
 
148
        <Button type='submit' color='primary'>
149
          Enviar
150
        </Button>
151
      </LoadingWrapper>
152
    </Form>
153
  )
154
}