Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 14206 | Rev 14230 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

/* eslint-disable no-mixed-spaces-and-tabs */
import axios from 'axios'
import React, { useEffect, useState } from 'react'
import { useForm } from 'react-hook-form'
import { useDispatch } from 'react-redux'
import { useHistory, useParams } from 'react-router-dom'
import { addNotification } from '../../redux/notification/notification.actions'

const pointsOptions = [
        { label: 'Sugerir otro cargo', value: 0 },
        { label: '25%', value: 1 },
        { label: '50%', value: 2 },
        { label: '75%', value: 3 },
        { label: '100%', value: 4 }
]

const FormView = ({
        actionLink = '',
        setActionLink = function () { }
}) => {

        // Hooks
        const dispatch = useDispatch()
        const history = useHistory()
        const { action } = useParams()
        const { setValue, register, watch, handleSubmit } = useForm()

        //States
        const [data, setData] = useState({})
        const [supervisers, setSupervisers] = useState([])

        const onSubmit = () => {

                const submitData = new FormData()
                /*              const content = []
                jobDescription.competencies.forEach(competency => competency.behaviors.forEach(behavior => {
                        content.push({
                                competencyUuid: behavior.competency_uuid,
                                behaviorUuid: behavior.uuid,
                                comment: watch(`${behavior.competency_uuid}-${behavior.uuid}-comment`),
                                evaluation: watch(`select-${behavior.competency_uuid}-${behavior.uuid}`)
                        })
                }))

                submitData.append('content', JSON.stringify(content))
                submitData.append('points', watch('points')) */
                //.append('comment', watch('comment'))

                axios.post(actionLink, submitData)
                        .then(({ data }) => {
                                if (!data.success) {
                                        return dispatch(addNotification({
                                                style: 'danger',
                                                msg: typeof data.data === 'string'
                                                        ? data.data
                                                        : 'Ha ocurrido un error'
                                        }))
                                }

                                history.goBack()
                                setActionLink('')
                                dispatch(addNotification({
                                        style: 'success',
                                        msg: `Registro ${action === 'edit' ? 'actualizado' : 'añadido'}`
                                }))
                        })
        }

        useEffect(() => {
                axios.get(actionLink)
                        .then(({ data }) => {
                                if (!data.success) {
                                        return dispatch(addNotification({
                                                style: 'danger',
                                                msg: 'Ha ocurrido un error'
                                        }))
                                }

                                setSupervisers(data.data['supervisers'].map(option => {
                                        return {
                                                key: option.name,
                                                value: option.uuid
                                        }
                                }))
                                setValue('name', data.data['name'])
                                setValue('job_description_id_boss', data.data['job_description_id_boss'])

                        })
        }, [action])

        return (
                <section className="content">
                        <div className="container-fluid">
                                <div className="row">
                                        <div className="col-12">
                                                <form onSubmit={handleSubmit(onSubmit)}>
                                                        <div className='card'>
                                                                <div className="card-header">
                                                                        <ul className="nav nav-tabs" id="myTab" role="tablist">
                                                                                <li className="nav-item" role="presentation">
                                                                                        <button className="nav-link active" id="home-tab" data-toggle="tab" data-target="#home" type="button" role="tab" aria-controls="home" aria-selected="true">General</button>
                                                                                </li>
                                                                                <li className="nav-item" role="presentation">
                                                                                        <button className="nav-link" id="profile-tab" data-toggle="tab" data-target="#profile" type="button" role="tab" aria-controls="profile" aria-selected="false">Competencias</button>
                                                                                </li>
                                                                                <li className="nav-item" role="presentation">
                                                                                        <button className="nav-link" id="contact-tab" data-toggle="tab" data-target="#contact" type="button" role="tab" aria-controls="contact" aria-selected="false">Conclusiones</button>
                                                                                </li>
                                                                        </ul>
                                                                </div>
                                                                <div className="card-body">
                                                                        <div className="tab-content" id="myTabContent">
                                                                                <div className="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab">
                                                                                        <div className="card">
                                                                                                <div className="row">
                                                                                                        <div className="col-4">
                                                                                                                <div className="form-group">
                                                                                                                        <label>Nombre</label>
                                                                                                                        <input type="text" name='name' ref={register} />
                                                                                                                </div>
                                                                                                        </div>
                                                                                                        <div className="col-4">
                                                                                                                <div className="form-group">
                                                                                                                        <label>Nombre</label>
                                                                                                                        <select className='form-control' name="job_description_id_boss" ref={register}>
                                                                                                                                <option value="">No aplica</option>
                                                                                                                                {
                                                                                                                                        supervisers.map(({ key, value }) =>
                                                                                                                                                <option key={value} value={value}>{key}</option>
                                                                                                                                        )
                                                                                                                                }
                                                                                                                        </select>
                                                                                                                </div>
                                                                                                        </div>
                                                                                                </div>
                                                                                        </div>
                                                                                </div>
                                                                                <div className="tab-pane fade" id="profile" role="tabpanel" aria-labelledby="profile-tab">

                                                                                </div>
                                                                                <div className="tab-pane fade" id="contact" role="tabpanel" aria-labelledby="contact-tab">

                                                                                </div>
                                                                        </div>
                                                                        <div className="form-group">
                                                                                <button type="submit" className="btn btn-primary btn-form-save-close mr-2">
                                                                                        Guardar & Cerrar
                                                                                </button>
                                                                                <button
                                                                                        type="button"
                                                                                        className="btn btn-secondary btn-edit-cancel"
                                                                                        onClick={() => history.goBack()}
                                                                                >
                                                                                        Cancelar
                                                                                </button>
                                                                        </div>
                                                                </div>
                                                        </div>
                                                </form>
                                        </div>
                                </div>
                        </div>
                </section >
        )
}

export default FormView