Rev 6353 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useEffect, useState } from 'react'import { Button, Modal } from 'react-bootstrap'import { axios } from '../../../utils'import { useForm } from 'react-hook-form'import { useDispatch } from 'react-redux'import { addNotification } from '../../../redux/notification/notification.actions'import Spinner from '../../../shared/loading-spinner/Spinner'import TagsInput from '../../../shared/tags-input/TagsInput'import FormErrorFeedback from '../../../shared/form-error-feedback/FormErrorFeedback'const HobbiesModal = ({show = false,userIdEncrypted = '',userHobbiesAndInterests = [],hobbiesAndInterestsOptions = [],closeModal = () => {},setUserHobbiesAndInterests = () => {},}) => {const { register, errors, handleSubmit, setValue, getValues, setError } =useForm()const [modalLoading, setModalLoading] = useState(false)const [settedHobbyAndInterestTags, setSettedHobbyAndInterestTags] = useState([])const dispatch = useDispatch()const handleModalOpen = (event) => {event && event.preventDefault()Object.keys(getValues()).map(([key]) => setValue(key, ''))closeModal()}const handleTagsChange = (tags) => {if (tags.length) {let newTags = []tags.map((tag) => {newTags = [...newTags, tag.value]})setValue('hobbiesAndInterests', newTags)setSettedHobbyAndInterestTags(tags)} else {setValue('hobbiesAndInterests', '')setSettedHobbyAndInterestTags('')}}const onSubmitHandler = async () => {setModalLoading(true)const formData = new FormData()getValues('hobbiesAndInterests').map((language) => {formData.append('hobbies_and_interests[]', language)})await axios.post(`/profile/my-profiles/hobby-and-interest/${userIdEncrypted}`,formData).then((response) => {const resData = response.dataif (resData.success) {setUserHobbiesAndInterests(settedHobbyAndInterestTags)dispatch(addNotification({ style: 'success', msg: 'Registro actualizado' }))handleModalOpen()} else {const resError = resData.dataif (resError.constructor.name === 'Object') {Object.entries(resError).map(([key, value]) => {if (key in getValues()) {setError(key, {type: 'manual',message: Array.isArray(value) ? value[0] : value,})}})} else {dispatch(addNotification({ style: 'danger', msg: resError }))}}})setModalLoading(false)}useEffect(() => {register('hobbiesAndInterests', {required: 'Por favor seleccione al menos un pasatiempo o interés',})}, [])return (<Modal show={show} onHide={handleModalOpen}><Modal.Header closeButton><Modal.Title>Pasatiempos e intereses</Modal.Title></Modal.Header><form onSubmit={handleSubmit(onSubmitHandler)}><Modal.Body><div className="form-group"><TagsInputsuggestions={hobbiesAndInterestsOptions}settedTags={userHobbiesAndInterests}onChange={handleTagsChange}/>{errors.hobbiesAndInterests && (<FormErrorFeedback>{errors.hobbiesAndInterests.message}</FormErrorFeedback>)}</div></Modal.Body><Modal.Footer><Button size="sm" type="submit">Enviar</Button><Button size="sm" variant="danger" onClick={handleModalOpen}>Cancelar</Button></Modal.Footer></form>{modalLoading && <Spinner />}</Modal>)}export default HobbiesModal