Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3047 | Rev 3697 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
3040 stevensc 1
import React, { useEffect } from 'react'
2
import { useSelector } from 'react-redux'
3
import { useForm } from 'react-hook-form'
4
import { Box } from '@mui/material'
5
 
6
import { getYears } from 'utils/dates'
7
import { useFetchHelper } from '@hooks'
8
 
3269 stevensc 9
import CKEditor from '@components/common/ckeditor/Ckeditor'
3040 stevensc 10
import Modal from '@app/components/UI/modal/Modal'
11
import Select from '@app/components/UI/inputs/Select'
12
import FormErrorFeedback from '@app/components/UI/form/FormErrorFeedback'
13
import Input from '@app/components/UI/inputs/Input'
14
import SwitchInput from '@app/components/UI/SwitchInput'
15
import UbicationInput from '@app/components/UI/inputs/UbicationInput'
16
 
17
const EducationModal = ({
18
  show = false,
19
  currentEducation = null,
20
  onClose = () => {},
21
  onConfirm = () => {}
22
}) => {
23
  const { data: degrees } = useFetchHelper('degrees')
24
  const labels = useSelector(({ intl }) => intl.labels)
25
 
26
  const {
27
    control,
3043 stevensc 28
    formState: { errors },
3040 stevensc 29
    handleSubmit,
30
    setValue,
31
    register,
32
    watch,
3043 stevensc 33
    reset
3040 stevensc 34
  } = useForm({
35
    defaultValues: {
36
      university: '',
37
      degree_id: '',
38
      field_of_study: '',
39
      grade_or_percentage: '',
40
      formatted_address: '',
41
      is_current: 'n',
42
      from_year: '',
43
      to_year: '',
44
      description: ''
3041 stevensc 45
    },
46
    values: currentEducation
3040 stevensc 47
  })
48
  const isCurrent = watch('is_current', 'n') === 'y'
49
 
50
  const handleAddress = (address) => {
51
    Object.entries(address).forEach(([key, value]) => {
52
      if (value) {
53
        register(key)
54
        setValue(key, value)
55
      }
56
    })
57
  }
58
 
59
  const handleCloseModal = () => {
60
    reset()
61
    onClose()
62
  }
63
 
64
  const onSubmitHandler = handleSubmit((data) => onConfirm(data))
65
 
66
  useEffect(() => {
67
    register('formatted_address', { required: 'Este campo es requerido' })
3042 stevensc 68
    register('description', { required: 'Este campo es requerido' })
3040 stevensc 69
    register('is_current')
70
  }, [])
71
 
72
  useEffect(() => {
73
    if (!currentEducation) return
3042 stevensc 74
    const currentDegree = degrees.find(
75
      ({ name }) => name === currentEducation.degree
76
    )
77
    if (currentDegree) setValue('degree_id', currentDegree.value)
3040 stevensc 78
  }, [currentEducation, degrees])
79
 
80
  return (
81
    <Modal
82
      title={labels.education}
83
      show={show}
84
      onClose={handleCloseModal}
85
      onAccept={onSubmitHandler}
86
    >
87
      <Select
88
        name='degree_id'
89
        label={labels.degree}
90
        options={degrees}
91
        control={control}
92
        rules={{ required: 'Este campo es requerido' }}
93
        error={errors.degree_id?.message}
94
      />
95
 
96
      <Input
97
        name='university'
98
        label='Universidad'
99
        placeholder='Nombre de la universidad'
100
        control={control}
101
        rules={{ required: 'Este campo es requerido' }}
102
        error={errors.university?.message}
103
      />
104
 
105
      <Input
106
        name='field_of_study'
107
        label='Campo de estudio'
108
        placeholder='Campo de estudio'
109
        control={control}
110
        rules={{ required: 'Este campo es requerido' }}
111
        error={errors.field_of_study?.message}
112
      />
113
 
114
      <UbicationInput
115
        onGetAddress={handleAddress}
116
        error={errors.formatted_address?.message}
117
        placeholder='Ubicación'
118
      />
119
      {errors.formatted_address && (
120
        <FormErrorFeedback>
121
          {errors.formatted_address.message}
122
        </FormErrorFeedback>
123
      )}
124
 
125
      <Input
126
        name='grade_or_percentage'
127
        label='Grado o porcentaje'
128
        placeholder='Grado o porcentaje'
129
        control={control}
130
        rules={{ required: 'Este campo es requerido' }}
131
        error={errors.grade_or_percentage?.message}
132
      />
133
 
134
      <Select
135
        name='from_year'
136
        control={control}
137
        label='Desde'
138
        placeholder={labels.from_year}
139
        rules={{ required: 'Este campo es requerido' }}
140
        error={errors.from_year?.message}
141
        options={getYears().map((year) => ({ name: year, value: year }))}
142
      />
143
 
144
      {!isCurrent && (
145
        <Select
146
          name='to_year'
147
          control={control}
148
          label='Hasta'
149
          placeholder='Año hasta'
150
          rules={{ required: 'Este campo es requerido' }}
151
          error={errors.to_year?.message}
152
          options={getYears().map((year) => ({ name: year, value: year }))}
153
        />
154
      )}
155
 
156
      <label htmlFor='is_current'>{labels.education} Actual</label>
157
      <Box sx={{ display: 'block', mb: 1 }}>
158
        <SwitchInput
159
          isChecked={isCurrent}
160
          setValue={(val) => setValue('is_current', val ? 'y' : 'n')}
161
        />
162
      </Box>
163
 
164
      <CKEditor
165
        control={control}
166
        name='description'
167
        rules={{ required: 'Este campo es requerido' }}
168
        error={errors.description?.message}
169
      />
170
    </Modal>
171
  )
172
}
173
 
174
export default EducationModal