Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3041 | Rev 3043 | 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
 
9
import CKEditor from '@app/components/UI/Ckeditor'
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,
28
    handleSubmit,
29
    setValue,
30
    register,
31
    watch,
32
    reset,
33
    formState: { errors }
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
  useEffect(() => {
3042 stevensc 81
    if (isCurrent) setValue('to_year', '')
3040 stevensc 82
  }, [isCurrent])
83
 
84
  return (
85
    <Modal
86
      title={labels.education}
87
      show={show}
88
      onClose={handleCloseModal}
89
      onAccept={onSubmitHandler}
90
    >
91
      <Select
92
        name='degree_id'
93
        label={labels.degree}
94
        options={degrees}
95
        control={control}
96
        rules={{ required: 'Este campo es requerido' }}
97
        error={errors.degree_id?.message}
98
      />
99
 
100
      <Input
101
        name='university'
102
        label='Universidad'
103
        placeholder='Nombre de la universidad'
104
        control={control}
105
        rules={{ required: 'Este campo es requerido' }}
106
        error={errors.university?.message}
107
      />
108
 
109
      <Input
110
        name='field_of_study'
111
        label='Campo de estudio'
112
        placeholder='Campo de estudio'
113
        control={control}
114
        rules={{ required: 'Este campo es requerido' }}
115
        error={errors.field_of_study?.message}
116
      />
117
 
118
      <UbicationInput
119
        onGetAddress={handleAddress}
120
        error={errors.formatted_address?.message}
121
        placeholder='Ubicación'
122
      />
123
      {errors.formatted_address && (
124
        <FormErrorFeedback>
125
          {errors.formatted_address.message}
126
        </FormErrorFeedback>
127
      )}
128
 
129
      <Input
130
        name='grade_or_percentage'
131
        label='Grado o porcentaje'
132
        placeholder='Grado o porcentaje'
133
        control={control}
134
        rules={{ required: 'Este campo es requerido' }}
135
        error={errors.grade_or_percentage?.message}
136
      />
137
 
138
      <Select
139
        name='from_year'
140
        control={control}
141
        label='Desde'
142
        placeholder={labels.from_year}
143
        rules={{ required: 'Este campo es requerido' }}
144
        error={errors.from_year?.message}
145
        options={getYears().map((year) => ({ name: year, value: year }))}
146
      />
147
 
148
      {!isCurrent && (
149
        <Select
150
          name='to_year'
151
          control={control}
152
          label='Hasta'
153
          placeholder='Año hasta'
154
          rules={{ required: 'Este campo es requerido' }}
155
          error={errors.to_year?.message}
156
          options={getYears().map((year) => ({ name: year, value: year }))}
157
        />
158
      )}
159
 
160
      <label htmlFor='is_current'>{labels.education} Actual</label>
161
      <Box sx={{ display: 'block', mb: 1 }}>
162
        <SwitchInput
163
          isChecked={isCurrent}
164
          setValue={(val) => setValue('is_current', val ? 'y' : 'n')}
165
        />
166
      </Box>
167
 
168
      <CKEditor
169
        control={control}
170
        name='description'
171
        rules={{ required: 'Este campo es requerido' }}
172
        error={errors.description?.message}
173
      />
174
    </Modal>
175
  )
176
}
177
 
178
export default EducationModal