Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 7387 | Rev 7389 | 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);
7388 stevensc 14
    const state = useSelector(state => state.shareModal)
15
 
16
    const postUrl = ''
17
    const isOpen = true
18
    const modalType = shareModalTypes.POST
7386 stevensc 19
    const dispatch = useDispatch()
20
 
21
    const {
22
        register,
23
        unregister,
24
        errors,
25
        handleSubmit,
26
        setValue,
27
        getValues,
28
        clearErrors,
29
        setError,
30
    } = useForm({
31
        defaultValues: {
32
            description: "",
33
            share_width: "",
34
        },
35
    });
36
 
37
    useEffect(() => {
38
        register("description", {
39
            required: { value: "true", message: "El campo es requerido" },
40
        });
41
        register("posted_or_shared");
42
        if (
43
            modalType !== shareModalTypes.POST &&
44
            modalType !== shareModalTypes.SHARE
45
        ) {
46
            register("file", {
47
                required: { value: "true", message: "El campo es requerido" },
48
            });
49
        } else {
50
            if (!getValues("file")) unregister("file");
51
        }
52
    }, [modalType]);
53
 
54
    const recomendationText = {
55
        IMAGE: "Tamaño recomendado: 720x720",
56
        FILE: "solo documentos PDF",
57
        VIDEO: "Video de extensión mp4, mpeg, webm"
58
    }
59
 
60
    useEffect(() => {
61
        clearErrors();
62
    }, [isOpen]);
63
 
64
    const onSubmit = async (data, e) => {
65
        setLoading(true);
66
 
67
        const currentFormData = new FormData();
68
        for (let input in data) {
69
            currentFormData.append(input, data[input]);
70
            (`${input}:${data[input]}`);
71
        }
72
 
73
        axios.post(postUrl, currentFormData)
74
            .then(({ data }) => {
75
                const newFeed = data.data;
76
 
77
                if (data.data.description || data.data.file || data.data.share_width) {
78
                    return Object.entries(data.data).map(([key, value]) => {
79
                        setError(key, { type: "required", message: value })
80
                    })
81
                }
82
 
83
                if (data.success) {
84
                    dispatch(closeShareModal());
85
                    // reset data
86
                    e.target.reset();
87
                    setValue("description", "");
88
                    setValue("file", "");
89
                    clearErrors();
90
                    console.log("La publicación ha sido compartida")
91
 
92
                    if (currentPage && timelineUrl) {
93
                        fetchFeeds(timelineUrl, currentPage)
94
                    }
95
 
96
                    if (feedSharedId) {
97
                        return addFeed(newFeed, feedSharedId);
98
                    }
99
 
100
                    return addFeed(newFeed);
101
                }
102
 
103
 
104
                console.log("Ha ocurrido un error")
105
 
106
            })
107
 
108
        setLoading(false);
109
    };
110
 
111
    const onUploadedHandler = (files) => {
112
        setValue("file", files);
113
        clearErrors("file");
114
    };
115
 
7388 stevensc 116
    console.log(state)
117
 
7386 stevensc 118
    return (
119
        <Modal
7388 stevensc 120
            show={true}
7386 stevensc 121
            onHide={dispatch(closeShareModal())}
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>
129
                    <DescriptionInput
130
                        name="description"
131
                        setValue={setValue}
132
                    />
133
                    {
134
                        modalType !== shareModalTypes.POST
135
                        &&
136
                        <DropzoneComponent
137
                            modalType={modalType}
138
                            onUploaded={onUploadedHandler}
139
                            settedFile={getValues("file")}
140
                            recomendationText={recomendationText[modalType]}
141
                        />
142
                    }
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"
155
                        onClick={() => dispatch(closeShareModal())}
156
                    >
157
                        Cancelar
158
                    </Button>
159
                </Modal.Footer>
160
            </form>
161
        </Modal>
162
    );
163
};
164
 
165
export default ShareModal