Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 7391 | Rev 7476 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
7386 stevensc 1
import React, { useState, useEffect } from "react";
2
import axios from "axios";
3
import { Button, Modal } from "react-bootstrap";
4
import { useForm } from "react-hook-form";
5
import DescriptionInput from "./DescriptionInput";
6
import { shareModalTypes } from "../redux/share-modal/shareModal.types";
7
import { closeShareModal } from "../redux/share-modal/shareModal.actions";
7387 stevensc 8
import { useDispatch, useSelector } from "react-redux";
7386 stevensc 9
import DropzoneComponent from "./Dropzone/DropzoneComponent";
10
 
7387 stevensc 11
const ShareModal = () => {
7386 stevensc 12
 
13
    const [loading, setLoading] = useState(false);
7389 stevensc 14
    const { postUrl, isOpen, modalType } = useSelector(state => state.shareModal)
7388 stevensc 15
 
7386 stevensc 16
    const dispatch = useDispatch()
17
 
18
    const {
19
        register,
20
        unregister,
21
        errors,
22
        handleSubmit,
23
        setValue,
24
        getValues,
25
        clearErrors,
26
        setError,
27
    } = useForm({
28
        defaultValues: {
29
            description: "",
30
            share_width: "",
7390 stevensc 31
        }
7386 stevensc 32
    });
33
 
34
    useEffect(() => {
35
        register("description", {
36
            required: { value: "true", message: "El campo es requerido" },
37
        });
38
        register("posted_or_shared");
39
        if (
40
            modalType !== shareModalTypes.POST &&
41
            modalType !== shareModalTypes.SHARE
42
        ) {
43
            register("file", {
44
                required: { value: "true", message: "El campo es requerido" },
45
            });
46
        } else {
47
            if (!getValues("file")) unregister("file");
48
        }
49
    }, [modalType]);
50
 
51
    const recomendationText = {
52
        IMAGE: "Tamaño recomendado: 720x720",
53
        FILE: "solo documentos PDF",
54
        VIDEO: "Video de extensión mp4, mpeg, webm"
55
    }
56
 
7390 stevensc 57
    const closeModal = () => {
58
        dispatch(closeShareModal())
59
    }
60
 
7386 stevensc 61
    useEffect(() => {
62
        clearErrors();
63
    }, [isOpen]);
64
 
65
    const onSubmit = async (data, e) => {
66
        setLoading(true);
67
 
68
        const currentFormData = new FormData();
69
        for (let input in data) {
70
            currentFormData.append(input, data[input]);
71
            (`${input}:${data[input]}`);
72
        }
73
 
74
        axios.post(postUrl, currentFormData)
75
            .then(({ data }) => {
76
                const newFeed = data.data;
77
 
78
                if (data.data.description || data.data.file || data.data.share_width) {
79
                    return Object.entries(data.data).map(([key, value]) => {
80
                        setError(key, { type: "required", message: value })
81
                    })
82
                }
83
 
84
                if (data.success) {
7390 stevensc 85
                    closeModal();
7386 stevensc 86
                    // reset data
87
                    e.target.reset();
88
                    setValue("description", "");
89
                    setValue("file", "");
90
                    clearErrors();
91
                    console.log("La publicación ha sido compartida")
92
 
93
                    if (currentPage && timelineUrl) {
94
                        fetchFeeds(timelineUrl, currentPage)
95
                    }
96
 
97
                    if (feedSharedId) {
98
                        return addFeed(newFeed, feedSharedId);
99
                    }
100
 
101
                    return addFeed(newFeed);
102
                }
103
 
104
 
105
                console.log("Ha ocurrido un error")
106
 
107
            })
108
 
109
        setLoading(false);
110
    };
111
 
112
    const onUploadedHandler = (files) => {
113
        setValue("file", files);
114
        clearErrors("file");
115
    };
116
 
7388 stevensc 117
 
7386 stevensc 118
    return (
119
        <Modal
7390 stevensc 120
            show={isOpen}
121
            onHide={closeModal}
7386 stevensc 122
            autoFocus={false}
123
        >
124
            <form encType="multipart/form-data" onSubmit={handleSubmit(onSubmit)}>
125
                <Modal.Header closeButton>
126
                    <Modal.Title>Compartir una publicación</Modal.Title>
127
                </Modal.Header>
128
                <Modal.Body>
7391 stevensc 129
                    <DescriptionInput
7386 stevensc 130
                        name="description"
131
                        setValue={setValue}
132
                    />
7412 stevensc 133
                    {
7386 stevensc 134
                        modalType !== shareModalTypes.POST
135
                        &&
136
                        <DropzoneComponent
137
                            modalType={modalType}
138
                            onUploaded={onUploadedHandler}
139
                            settedFile={getValues("file")}
140
                            recomendationText={recomendationText[modalType]}
141
                        />
7412 stevensc 142
                    }
7386 stevensc 143
                </Modal.Body>
144
                <Modal.Footer>
145
                    <Button
146
                        size="sm"
147
                        type="submit"
148
                    >
149
                        Enviar
150
                    </Button>
151
                    <Button
152
                        color="danger"
153
                        size="sm"
154
                        variant="danger"
7390 stevensc 155
                        onClick={closeModal}
7386 stevensc 156
                    >
157
                        Cancelar
158
                    </Button>
159
                </Modal.Footer>
160
            </form>
161
        </Modal>
162
    );
163
};
164
 
165
export default ShareModal