Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 7388 | Rev 7390 | 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: "",
31
        },
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
 
57
    useEffect(() => {
58
        clearErrors();
59
    }, [isOpen]);
60
 
61
    const onSubmit = async (data, e) => {
62
        setLoading(true);
63
 
64
        const currentFormData = new FormData();
65
        for (let input in data) {
66
            currentFormData.append(input, data[input]);
67
            (`${input}:${data[input]}`);
68
        }
69
 
70
        axios.post(postUrl, currentFormData)
71
            .then(({ data }) => {
72
                const newFeed = data.data;
73
 
74
                if (data.data.description || data.data.file || data.data.share_width) {
75
                    return Object.entries(data.data).map(([key, value]) => {
76
                        setError(key, { type: "required", message: value })
77
                    })
78
                }
79
 
80
                if (data.success) {
81
                    dispatch(closeShareModal());
82
                    // reset data
83
                    e.target.reset();
84
                    setValue("description", "");
85
                    setValue("file", "");
86
                    clearErrors();
87
                    console.log("La publicación ha sido compartida")
88
 
89
                    if (currentPage && timelineUrl) {
90
                        fetchFeeds(timelineUrl, currentPage)
91
                    }
92
 
93
                    if (feedSharedId) {
94
                        return addFeed(newFeed, feedSharedId);
95
                    }
96
 
97
                    return addFeed(newFeed);
98
                }
99
 
100
 
101
                console.log("Ha ocurrido un error")
102
 
103
            })
104
 
105
        setLoading(false);
106
    };
107
 
108
    const onUploadedHandler = (files) => {
109
        setValue("file", files);
110
        clearErrors("file");
111
    };
112
 
7388 stevensc 113
    console.log(state)
114
 
7386 stevensc 115
    return (
116
        <Modal
7388 stevensc 117
            show={true}
7386 stevensc 118
            onHide={dispatch(closeShareModal())}
119
            autoFocus={false}
120
        >
121
            <form encType="multipart/form-data" onSubmit={handleSubmit(onSubmit)}>
122
                <Modal.Header closeButton>
123
                    <Modal.Title>Compartir una publicación</Modal.Title>
124
                </Modal.Header>
125
                <Modal.Body>
126
                    <DescriptionInput
127
                        name="description"
128
                        setValue={setValue}
129
                    />
130
                    {
131
                        modalType !== shareModalTypes.POST
132
                        &&
133
                        <DropzoneComponent
134
                            modalType={modalType}
135
                            onUploaded={onUploadedHandler}
136
                            settedFile={getValues("file")}
137
                            recomendationText={recomendationText[modalType]}
138
                        />
139
                    }
140
                </Modal.Body>
141
                <Modal.Footer>
142
                    <Button
143
                        size="sm"
144
                        type="submit"
145
                    >
146
                        Enviar
147
                    </Button>
148
                    <Button
149
                        color="danger"
150
                        size="sm"
151
                        variant="danger"
152
                        onClick={() => dispatch(closeShareModal())}
153
                    >
154
                        Cancelar
155
                    </Button>
156
                </Modal.Footer>
157
            </form>
158
        </Modal>
159
    );
160
};
161
 
162
export default ShareModal