AutorÃa | Ultima modificación | Ver Log |
import React from "react";import { useState, useEffect } from "react";import { Button, Modal } from "react-bootstrap";import { useForm } from "react-hook-form";import styled from "styled-components";import {axios} from "../../../../../../utils";import TagsInput from "../../../../../../shared/tags-input/TagsInput";import FormErrorFeedback from "../../../../../../shared/form-error-feedback/FormErrorFeedback";import Spinner from "../../../../../../shared/loading-spinner/Spinner";const StyledSpinnerContainer = styled.div`position: absolute;left: 0;top: 0;width: 100%;height: 100%;background: rgba(255, 255, 255, 0.4);display: flex;justify-content: center;align-items: center;z-index: 300;`;const Skills = (props) => {// props destructuringconst { jobSkills, skillsOptions, companyId, jobId, addNotification } = props;// React hook formconst {register,errors,handleSubmit,setValue,getValues,setError,} = useForm();// statesconst [isModalOpen, setIsModalOpen] = useState(false);const [modalLoading, setModalLoading] = useState(false);const [jobSkillsArray, setJobSkillsArray] = useState([]);const [skillsOptionsArray, setSkillsOptionsArray] = useState([]);const [settedSkillTags, setSettedSkillTags] = useState([]);useEffect(() => {register("skills", {required: "Por favor seleccione al menos una habilidad",});}, []);const handleModalOpen = (event) => {event && event.preventDefault();Object.entries(getValues()).map(([key, value]) => {setValue(key, "");});setIsModalOpen(!isModalOpen);};const handleEdit = async (event) => {event.preventDefault();handleModalOpen();};const handleTagsChange = (tags) => {if (tags.length) {let newTags = [];tags.map((tag) => {newTags = [...newTags, tag.value];});setValue("skills", newTags);setSettedSkillTags(tags);} else {setValue("skills", "");setSettedSkillTags("");}};useEffect(() => {let newSkillsOptionsArray = [];Object.entries(skillsOptions).map(([key, value]) => {newSkillsOptionsArray = [...newSkillsOptionsArray,{ value: key, name: value },];});setSkillsOptionsArray(newSkillsOptionsArray);}, [skillsOptions]);useEffect(() => {// let newJobSkillsArray = [];// Object.entries(jobSkills).map(([key, value]) => {// newJobSkillsArray = [...newJobSkillsArray, { value: key, name: value }];// });// (newJobSkillsArray);// setJobSkillsArray(newJobSkillsArray);axios.get(`/my-company/${companyId}/job/edit/${jobId}/skills`).then((response) => {const resData = response.data;(resData);let newJobSkillsArray = [];resData.data.map((skillIndex) => {newJobSkillsArray = [...newJobSkillsArray,{ value: skillIndex, name: skillsOptions[skillIndex] },];});(newJobSkillsArray);setJobSkillsArray(newJobSkillsArray);});}, []);const onSubmitHandler = async (data) => {setModalLoading(true);const formData = new FormData();getValues("skills").map((language) => {formData.append("skills[]", language);});await axios.post(`/my-company/${companyId}/job/edit/${jobId}/skills`, formData).then((response) => {const resData = response.data;(resData);if (resData.success) {setJobSkillsArray(settedSkillTags);setIsModalOpen();} else {const resError = resData.data;if (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 {addNotification({style: "danger",msg: resError,});}}});setModalLoading(false);};return (<React.Fragment><div className="user-profile-ov"><h3>Habilidades<a href="#" title="" className="btn-skills-edit" onClick={handleEdit}><i className="fa fa-pencil"></i></a></h3><ul id="list-skills">{jobSkillsArray.map(({ name, value }) => (<li key={value}><a href="#" title="">{name}</a></li>))}</ul></div>{/* Modal */}<Modalshow={isModalOpen}onHide={handleModalOpen}style={{ overflowY: "scroll" }}><Modal.Header closeButton><Modal.Title>Habilidades</Modal.Title></Modal.Header><form onSubmit={handleSubmit(onSubmitHandler)}><Modal.Body><div className="form-group"><TagsInputsuggestions={skillsOptionsArray}settedTags={jobSkillsArray}onChange={handleTagsChange}/>{errors.skills && (<FormErrorFeedback>{errors.skills.message}</FormErrorFeedback>)}</div></Modal.Body><Modal.Footer><Button type="submit">Enviar</Button><Button variant="danger" onClick={handleModalOpen}>Cancel</Button></Modal.Footer></form>{modalLoading && (<StyledSpinnerContainer><Spinner /></StyledSpinnerContainer>)}</Modal></React.Fragment>);};export default Skills;