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 LanguagesModal = ({
13
    show = false,
14
    userIdEncrypted = '',
15
    languagesOptions = [],
16
    userLanguages = [],
17
    closeModal = () => { },
18
    setLanguages = () => { },
19
}) => {
20
    const { register, errors, handleSubmit, setValue, getValues, setError } = useForm();
21
    const [modalLoading, setModalLoading] = useState(false);
22
    const [settedLanguageTags, setSettedLanguageTags] = 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("languages", newTags);
38
            setSettedLanguageTags(tags);
39
        } else {
40
            setValue("languages", "");
41
            setSettedLanguageTags("");
42
        }
43
    };
44
 
45
    const onSubmitHandler = async () => {
46
        setModalLoading(true);
47
        const formData = new FormData();
48
        getValues("languages").map((language) => {
49
            formData.append("languages[]", language);
50
        });
51
        await axios
52
            .post(`/profile/my-profiles/language/${userIdEncrypted}`, formData)
53
            .then((response) => {
54
                const resData = response.data;
55
                if (resData.success) {
56
                    dispatch(addNotification({ style: "success", msg: 'Registro actualizado' }))
57
                    setLanguages(settedLanguageTags);
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
        (getValues("languages"));
76
        setModalLoading(false);
77
    };
78
 
79
    useEffect(() => {
80
        register("languages", {
81
            required: "Por favor seleccione al menos un lenguaje",
82
        });
83
    }, []);
84
 
85
    return (
86
        <Modal
87
            show={show}
88
            onHide={handleModalOpen}
89
            style={{ overflowY: "scroll" }}
90
        >
91
            <Modal.Header closeButton>
92
                <Modal.Title>Idiomas</Modal.Title>
93
            </Modal.Header>
94
            <form onSubmit={handleSubmit(onSubmitHandler)}>
95
                <Modal.Body>
96
                    <div className="form-group">
97
                        <TagsInput
98
                            suggestions={languagesOptions}
99
                            settedTags={userLanguages}
100
                            onChange={handleTagsChange}
101
                        />
102
                        {errors.languages && <FormErrorFeedback>{errors.languages.message}</FormErrorFeedback>}
103
                    </div>
104
                </Modal.Body>
105
                <Modal.Footer>
106
                    <Button size="sm" type="submit">Enviar</Button>
107
                    <Button size="sm" variant="danger" onClick={handleModalOpen}>
108
                        Cancelar
109
                    </Button>
110
                </Modal.Footer>
111
            </form>
112
            {modalLoading && <Spinner />}
113
        </Modal>
114
    )
115
}
116
 
117
export default LanguagesModal