Proyectos de Subversion LeadersLinked - SPA

Rev

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