Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3042 | Rev 3047 | 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,
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'
3043 stevensc 49
  const watchAddress = watch('formatted_address')
3040 stevensc 50
 
51
  const handleAddress = (address) => {
52
    Object.entries(address).forEach(([key, value]) => {
53
      if (value) {
54
        register(key)
55
        setValue(key, value)
56
      }
57
    })
58
  }
59
 
60
  const handleCloseModal = () => {
61
    reset()
62
    onClose()
63
  }
64
 
65
  const onSubmitHandler = handleSubmit((data) => onConfirm(data))
66
 
67
  useEffect(() => {
68
    register('formatted_address', { required: 'Este campo es requerido' })
3042 stevensc 69
    register('description', { required: 'Este campo es requerido' })
3040 stevensc 70
    register('is_current')
71
  }, [])
72
 
73
  useEffect(() => {
74
    if (!currentEducation) return
3042 stevensc 75
    const currentDegree = degrees.find(
76
      ({ name }) => name === currentEducation.degree
77
    )
78
    if (currentDegree) setValue('degree_id', currentDegree.value)
3040 stevensc 79
  }, [currentEducation, degrees])
80
 
81
  return (
82
    <Modal
83
      title={labels.education}
84
      show={show}
85
      onClose={handleCloseModal}
86
      onAccept={onSubmitHandler}
87
    >
88
      <Select
89
        name='degree_id'
90
        label={labels.degree}
91
        options={degrees}
92
        control={control}
93
        rules={{ required: 'Este campo es requerido' }}
94
        error={errors.degree_id?.message}
95
      />
96
 
97
      <Input
98
        name='university'
99
        label='Universidad'
100
        placeholder='Nombre de la universidad'
101
        control={control}
102
        rules={{ required: 'Este campo es requerido' }}
103
        error={errors.university?.message}
104
      />
105
 
106
      <Input
107
        name='field_of_study'
108
        label='Campo de estudio'
109
        placeholder='Campo de estudio'
110
        control={control}
111
        rules={{ required: 'Este campo es requerido' }}
112
        error={errors.field_of_study?.message}
113
      />
114
 
115
      <UbicationInput
116
        onGetAddress={handleAddress}
117
        error={errors.formatted_address?.message}
118
        placeholder='Ubicación'
3043 stevensc 119
        settedQuery={watchAddress}
3040 stevensc 120
      />
121
      {errors.formatted_address && (
122
        <FormErrorFeedback>
123
          {errors.formatted_address.message}
124
        </FormErrorFeedback>
125
      )}
126
 
127
      <Input
128
        name='grade_or_percentage'
129
        label='Grado o porcentaje'
130
        placeholder='Grado o porcentaje'
131
        control={control}
132
        rules={{ required: 'Este campo es requerido' }}
133
        error={errors.grade_or_percentage?.message}
134
      />
135
 
136
      <Select
137
        name='from_year'
138
        control={control}
139
        label='Desde'
140
        placeholder={labels.from_year}
141
        rules={{ required: 'Este campo es requerido' }}
142
        error={errors.from_year?.message}
143
        options={getYears().map((year) => ({ name: year, value: year }))}
144
      />
145
 
146
      {!isCurrent && (
147
        <Select
148
          name='to_year'
149
          control={control}
150
          label='Hasta'
151
          placeholder='Año hasta'
152
          rules={{ required: 'Este campo es requerido' }}
153
          error={errors.to_year?.message}
154
          options={getYears().map((year) => ({ name: year, value: year }))}
155
        />
156
      )}
157
 
158
      <label htmlFor='is_current'>{labels.education} Actual</label>
159
      <Box sx={{ display: 'block', mb: 1 }}>
160
        <SwitchInput
161
          isChecked={isCurrent}
162
          setValue={(val) => setValue('is_current', val ? 'y' : 'n')}
163
        />
164
      </Box>
165
 
166
      <CKEditor
167
        control={control}
168
        name='description'
169
        rules={{ required: 'Este campo es requerido' }}
170
        error={errors.description?.message}
171
      />
172
    </Modal>
173
  )
174
}
175
 
176
export default EducationModal