Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
5473 stevensc 1
/* eslint-disable react/prop-types */
2
import React, { useEffect, useState } from 'react'
3
import { Button, Modal } from 'react-bootstrap';
4
import { useForm } from 'react-hook-form';
5
import { useDispatch } from 'react-redux';
6
import { addNotification } from '../../../../redux/notification/notification.actions';
7
import FormErrorFeedback from '../../../../shared/form-error-feedback/FormErrorFeedback';
8
import Spinner from '../../../../shared/loading-spinner/Spinner';
9
import TagsInput from '../../../../shared/tags-input/TagsInput';
10
import { axios } from '../../../../utils';
11
 
12
const AptitudesModal = ({
13
    show = false,
14
    userIdEncrypted = '',
15
    aptitudesOptions = [],
16
    userAptitudes = [],
17
    closeModal = () => { },
18
    setAptitudes = () => { },
19
}) => {
20
    const { register, errors, handleSubmit, setValue, getValues, setError } = useForm();
21
    const [modalLoading, setModalLoading] = useState(false);
22
    const [settedAptitudeTags, setSettedAptitudeTags] = useState([]);
23
    const dispatch = useDispatch();
24
 
25
    const handleModalOpen = (event) => {
26
        event && event.preventDefault()
27
        Object.keys(getValues()).map(([key]) => setValue(key, ""))
28
        closeModal()
29
    };
30
 
31
    const handleTagsChange = (tags) => {
32
        if (tags.length) {
33
            let newTags = [];
34
            tags.map((tag) => {
35
                newTags = [...newTags, tag.value];
36
            });
37
            setValue("aptitudes", newTags);
38
            setSettedAptitudeTags(tags);
39
        } else {
40
            setValue("aptitudes", "");
41
            setSettedAptitudeTags("");
42
        }
43
    };
44
 
45
    const onSubmitHandler = async () => {
46
        setModalLoading(true);
47
        const formData = new FormData();
48
        getValues("aptitudes").map((language) => {
49
            formData.append("aptitudes[]", language);
50
        });
51
        await axios
52
            .post(`/profile/my-profiles/aptitude/${userIdEncrypted}`, formData)
53
            .then((response) => {
54
                const resData = response.data;
55
                if (resData.success) {
56
                    setAptitudes(settedAptitudeTags)
57
                    dispatch(addNotification({ style: "success", msg: 'Registro actualizado' }))
58
                    handleModalOpen()
59
                } else {
60
                    const resError = resData.data;
61
                    if (resError.constructor.name === "Object") {
62
                        Object.entries(resError).map(([key, value]) => {
63
                            if (key in getValues()) {
64
                                setError(key, {
65
                                    type: "manual",
66
                                    message: Array.isArray(value) ? value[0] : value,
67
                                });
68
                            }
69
                        });
70
                    } else {
71
                        dispatch(addNotification({ style: "danger", msg: resError }))
72
                    }
73
                }
74
            });
75
        setModalLoading(false);
76
    };
77
 
78
    useEffect(() => {
79
        register("aptitudes", {
80
            required: "Por favor seleccione al menos una aptitud",
81
        });
82
    }, []);
83
 
84
    return (
85
        <Modal show={show} onHide={handleModalOpen}>
86
            <Modal.Header closeButton>
87
                <Modal.Title>Aptitudes</Modal.Title>
88
            </Modal.Header>
89
            <form onSubmit={handleSubmit(onSubmitHandler)}>
90
                <Modal.Body>
91
                    <div className="form-group">
92
                        <TagsInput
93
                            suggestions={aptitudesOptions}
94
                            settedTags={userAptitudes}
95
                            onChange={handleTagsChange}
96
                        />
97
                        {errors.aptitudes && <FormErrorFeedback>{errors.aptitudes.message}</FormErrorFeedback>}
98
                    </div>
99
                </Modal.Body>
100
                <Modal.Footer>
101
                    <Button size="sm" type="submit">Enviar</Button>
102
                    <Button size="sm" variant="danger" onClick={handleModalOpen}>
103
                        Cancelar
104
                    </Button>
105
                </Modal.Footer>
106
            </form>
107
            {modalLoading && <Spinner />}
108
        </Modal>
109
    )
110
}
111
 
112
export default AptitudesModal