Rev 3697 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useEffect } from 'react';import { useSelector } from 'react-redux';import { useForm } from 'react-hook-form';import { Box } from '@mui/material';import { getMonths, getYears } from '@app/utils/dates';import { useFetchHelper } from '@hooks';import CKEditor from '@components/common/ckeditor/Ckeditor';import SwitchInput from '@app/components/UI/SwitchInput';import FormErrorFeedback from '@app/components/UI/form/FormErrorFeedback';import Select from '@app/components/UI/inputs/Select';import Input from '@app/components/UI/inputs/Input';import UbicationInput from '@app/components/UI/inputs/UbicationInput';import Modal from '@app/components/UI/modal/Modal';const ExperienceModal = ({show = false,onClose = () => {},onConfirm = () => {},currentExperience = null}) => {const { data: companySizes } = useFetchHelper('company-sizes');const { data: industries } = useFetchHelper('industries');const labels = useSelector(({ intl }) => intl.labels);const {register,handleSubmit,setValue,control,watch,reset,formState: { errors }} = useForm({defaultValues: {company: '',description: '',from_month: '',from_year: '',industry_id: '',is_current: 'n',company_size_id: '',title: '',to_month: '',to_year: ''}});const isCurrent = watch('is_current', 'n') === 'y';const handleClose = () => {reset();onClose();};const addressHandler = (address) => {Object.entries(address).forEach(([key, value]) => {if (value) {register(key);setValue(key, value);}});};const onSubmit = handleSubmit((data) => onConfirm(data));useEffect(() => {register('formatted_address', { required: 'Este campo es requerido' });register('description', { required: 'Este campo es requerido' });register('is_current', { required: 'Este campo es requerido' });}, []);useEffect(() => {if (!currentExperience) return;const {company,description,from_month,from_year,industry,is_current,size,title,to_month,to_year} = currentExperience;setValue('company', company);setValue('description', description);setValue('from_month', from_month);setValue('from_year', from_year);setValue('is_current', is_current);setValue('title', title);setValue('to_month', to_month);setValue('to_year', to_year);const currentSize = companySizes.find(({ name }) => size.includes(name));const currentIndustry = industries.find(({ name }) => name === industry);if (currentSize) {setValue('company_size_id', currentSize.value);}if (currentIndustry) {setValue('industry_id', currentIndustry.value);}}, [currentExperience, companySizes, industries]);useEffect(() => {if (isCurrent) {setValue('to_month', '');setValue('to_year', '');}}, [isCurrent]);return (<Modaltitle={`${currentExperience ? labels.edit : labels.add} - ${labels.experience}`}show={show}onClose={handleClose}onAccept={onSubmit}><Inputname='company'placeholder='Empresa'error={errors.company?.message}control={control}rules={{ required: 'Este campo es requerido' }}label='Empresa'/><Selectname='industry_id'error={errors.industry_id?.message}options={industries}placeholder='Industria'label='Industria'control={control}rules={{ required: 'Este campo es requerido' }}/><Selectname='company_size_id'error={errors.company_size_id?.message}options={companySizes}placeholder='Tamaño de la Empresa'label='Tamaño de la Empresa'control={control}rules={{ required: 'Este campo es requerido' }}/><Inputname='title'label='Titulo'placeholder='Titulo'rules={{ required: 'Este campo es requerido' }}control={control}error={errors.title?.message}/><UbicationInputonGetAddress={addressHandler}error={errors.formatted_address?.message}placeholder='Ubicación'/><Box sx={{ display: 'flex', gap: 1 }}><Selectname='from_month'error={errors.from_month?.message}label='Desde'placeholder='Mes desde'options={getMonths().map((month, i) => ({label: month,value: i + 1}))}control={control}rules={{ required: 'Este campo es requerido' }}/><Selecterror={errors.from_year?.message}options={getYears().map((year) => ({label: year,value: year}))}placeholder='Año desde'name='from_year'rules={{ required: 'Este campo es requerido' }}control={control}label='Desde'/></Box>{!isCurrent && (<Box sx={{ display: 'flex', gap: 1 }}><Selecterror={errors.to_month?.message}options={getMonths().map((month, i) => ({label: month,value: i + 1}))}placeholder='Mes hasta'label='Hasta'name='to_month'rules={{required: isCurrent ? false : 'Este campo es requerido',validate: (value) => {const currentMonth = new Date().getMonth() + 1;const currentYear = new Date().getFullYear();const toYear = watch('to_year');return ((toYear === currentYear && value < currentMonth) ||'La fecha no puede ser superior a la actual');}}}control={control}/><Selecterror={errors.to_year?.message}options={getYears().map((year) => ({label: year,value: year}))}placeholder='Año hasta'name='to_year'rules={{required: isCurrent ? false : 'Este campo es requerido'}}control={control}label='Hasta'/></Box>)}<label htmlFor='is_current'> Trabajo Actual</label><Box sx={{ display: 'block', mb: 1 }}><SwitchInputisChecked={isCurrent}setValue={(val) => setValue('is_current', val ? 'y' : 'n')}/></Box><CKEditordefaultValue={currentExperience?.description ?? ''}onChange={(value) => setValue('description', value)}/>{errors.description && <FormErrorFeedback>Este campo es requerido</FormErrorFeedback>}</Modal>);};export default ExperienceModal;