Autoría | Ultima modificación | Ver Log |
import React from "react";import { useState } from "react";import { Button, Modal } from "react-bootstrap";import { useForm } from "react-hook-form";import styled from "styled-components";import {axios} from "../../../../../../utils";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 StyledSwitch = styled.label`position: relative;display: inline-block;width: 60px;height: 34px;input {opacity: 0;width: 0;height: 0;}.slider {position: absolute;cursor: pointer;top: 0;left: 0;right: 0;bottom: 0;background-color: #ccc;-webkit-transition: 0.4s;transition: 0.4s;}.slider:before {position: absolute;content: "";height: 26px;width: 26px;left: 4px;bottom: 4px;background-color: white;-webkit-transition: 0.4s;transition: 0.4s;}input:checked + .slider {background-color: #2196f3;}input:focus + .slider {box-shadow: 0 0 1px #2196f3;}input:checked + .slider:before {-webkit-transform: translateX(26px);-ms-transform: translateX(26px);transform: translateX(26px);}.slider.round {border-radius: 34px;}.slider.round:before {border-radius: 50%;}`;const Salary = (props) => {// props destructuringconst { companyId, jobId, addNotification, salary, currencies } = props;// react hook formconst {register,errors,handleSubmit,setValue,clearErrors,getValues,setError,} = useForm();// statesconst [isModalOpen, setIsModalOpen] = useState(false);const [loading, setLoading] = useState(false);const [settedSalary, setSettedSalary] = useState(salary);const handleEdit = async () => {setLoading(true);handleModalOpen();await axios.get(`/my-company/${companyId}/job/edit/${jobId}/salary`).then((response) => {const resData = response.data;(resData);if (resData.success) {Object.entries(resData.data).map(([key, value]) => {if (value && value !== "n") setValue(key, value);});} 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,});}}});setLoading(false);};const handleModalOpen = (event) => {event && event.preventDefault();setIsModalOpen(!isModalOpen);};const onSubmitHandler = async (data) => {setLoading(true);const formData = new FormData();(data);Object.entries(data).map(([key, value]) => {if (value) formData.append(key, value);});await axios.post(`/my-company/${companyId}/job/edit/${jobId}/salary`, formData).then((response) => {const resData = response.data;(resData);if (resData.success) {setSettedSalary(resData.data);handleModalOpen();} 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,});}}});setLoading(false);};return (<React.Fragment><div className="user-profile-ov"><h3>Salario<ahref="#"title=""className="btn-salary-edit"onClick={(e) => {e.preventDefault();handleEdit();}}><i className="fa fa-pencil"></i></a></h3><span id="overview-salary">{settedSalary}</span></div>{/* modal */}<Modalshow={isModalOpen}onHide={handleModalOpen}style={{ overflowY: "scroll" }}><Modal.Header closeButton><Modal.Title>Salario</Modal.Title></Modal.Header><form onSubmit={handleSubmit(onSubmitHandler)}><Modal.Body><label htmlFor="salary_visible">Visible</label><div className="form-group"><StyledSwitch className="switch"><inputtype="checkbox"name="salary_visible"id="salary_visible"value="y"ref={register}/><span className="slider round"></span></StyledSwitch></div><div className="form-group"><selectname="salary_currency"id="salary_currency"ref={register({required: "Por favor seleccione una moneda",})}defaultValue=""><option value="" hidden>Salario</option>{Object.entries(currencies).map(([key, value]) => (<option value={key} key={key}>{value}</option>))}</select>{errors.salary_currency && (<FormErrorFeedback>{errors.salary_currency.message}</FormErrorFeedback>)}</div><div className="form-group"><inputtype="text"name="salary_min"id="salary_min"ref={register({required: "Por favor ingrese un salario",pattern: {value: /^[0-9\.]+$/,message: 'Por favor ingrese solo números y "." ',},})}placeholder="Minimo"/>{errors.salary_min && (<FormErrorFeedback>{errors.salary_min.message}</FormErrorFeedback>)}</div><div className="form-group"><inputtype="text"name="salary_max"id="salary_max"ref={register({required: "Por favor ingrese un salario",pattern: {value: /^[0-9\.]+$/,message: 'Por favor ingrese solo números y "." ',},})}placeholder="Máximo"/>{errors.salary_max && (<FormErrorFeedback>{errors.salary_max.message}</FormErrorFeedback>)}</div></Modal.Body><Modal.Footer><Button type="submit">Enviar</Button><Button variant="danger" onClick={handleModalOpen}>Cancel</Button></Modal.Footer></form>{loading && (<StyledSpinnerContainer><Spinner /></StyledSpinnerContainer>)}</Modal></React.Fragment>);};export default Salary;