Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
1191 stevensc 1
import React, { useState } from "react";
1 www 2
import parse from "html-react-parser";
3
import styled from "styled-components";
1191 stevensc 4
import LikeButton from "../like-button/LikeButton";
1332 stevensc 5
import { addNotification } from "../../../../redux/notification/notification.actions";
6
import { useDispatch } from "react-redux";
1 www 7
 
8
const StyledChatImgMessage = styled.div`
9
  display: flex;
10
  justify-content: center;
11
  align-items: center;
12
  position: initial !important;
13
  transform: initial !important;
14
  .chat_image_container {
15
    video {
1305 stevensc 16
      width: 100%;
1 www 17
      outline: none;
18
    }
19
    img {
20
      width: 150px;
21
      max-height: 200px;
22
    }
23
    .pdf {
24
      width: 40px;
25
    }
26
  }
27
  .chat_image__download_button {
28
    margin-left: 0.5rem;
29
    .fa {
30
      font-size: 1.5rem;
31
      color: black;
32
    }
33
  }
34
`;
35
 
1305 stevensc 36
const ResponseMessageContainer = styled.div`
37
  display: flex;
38
  flex-direction: column;
39
  text-align: center;
40
  gap: 10px;
1306 stevensc 41
  align-items: ${props => props.isRight ? 'flex-end' : 'flex-start'};
1305 stevensc 42
`
43
 
2180 stevensc 44
const MessageTemplate = ({ message, setResponseMessage, responseMessage, messagesReceived }) => {
1191 stevensc 45
 
46
  const [isShow, setIsShow] = useState(false);
1198 stevensc 47
  const [isLiked, setIsLiked] = useState(false);
1332 stevensc 48
  const dispatch = useDispatch()
1198 stevensc 49
 
1 www 50
  const senderName = (message) => {
51
    if (message.type === "group") {
52
      return message.u === 1 ? "" : message.user_name;
53
    }
54
  };
1191 stevensc 55
 
1198 stevensc 56
  const handleLike = () => {
57
    setIsLiked(!isLiked)
1199 stevensc 58
    setIsShow(!isShow)
1198 stevensc 59
  }
60
 
1334 stevensc 61
  const handleCopy = async () => {
62
    await navigator.clipboard.writeText(`${message.m}`)
63
    dispatch(addNotification({
64
      style: "success",
65
      msg: 'Mensaje copiado en el portapapeles',
66
    }))
1381 stevensc 67
    setIsShow(!isShow)
1331 stevensc 68
  }
69
 
1 www 70
  switch (message.mtype) {
71
    case "text":
72
      return (
73
        <li
74
          key={message.id}
1305 stevensc 75
          className={`clearfix ${message.u === 1 ? "odd" : ""} m-t-10 conversers${message.u}`}
1 www 76
        >
1305 stevensc 77
          <div className="conversation-text">
2138 steven 78
            <div className="conversation_container w-100">
1198 stevensc 79
              {
1305 stevensc 80
                responseMessage
1198 stevensc 81
                &&
1306 stevensc 82
                <ResponseMessageContainer isRight={message.u === 1}>
1305 stevensc 83
                  <span>{`Respondiendo a ${responseMessage.user_name}`}</span>
84
                  <div className="ctext-wrap">
85
                    {senderName(responseMessage)}
86
                    <p className="">
87
                      {parse(emojione.shortnameToImage(responseMessage.m))}
88
                      <br />
89
                    </p>
90
                  </div>
91
                </ResponseMessageContainer>
92
              }
93
              <div className="conversation-text">
94
                <div className="ctext-wrap">
95
                  {senderName(message)}
96
                  <p className="">
97
                    {parse(emojione.shortnameToImage(message.m))}
98
                    <br />
2177 stevensc 99
                    {
2180 stevensc 100
                      messagesReceived
101
                      &&
102
                      <i className={"fa fa-check text-right ellipsis "} style={message.seen && { color: 'blue' }}>{message.time}</i>
2177 stevensc 103
                    }
1305 stevensc 104
                  </p>
105
                  {
106
                    isLiked
107
                    &&
108
                    <i
109
                      className="fas fa-heart"
110
                      style={{
111
                        color: '#0961bf',
112
                        position: 'absolute',
113
                        top: '87%',
114
                        left: '85%'
115
                      }}
116
                    />
117
                  }
118
                </div>
2119 steven 119
                {/* <i
1305 stevensc 120
                  className="la la-ellipsis-v icon"
121
                  style={{ position: 'relative' }}
122
                  onClick={() => setIsShow(!isShow)}
1298 stevensc 123
                >
2119 steven 124
                </i> */}
1305 stevensc 125
                {
126
                  isShow
127
                  &&
128
                  <div
129
                    className="display-reactions"
130
                  >
131
                    <LikeButton
132
                      onClick={handleLike}
133
                    />
134
                    <button
135
                      type="button"
136
                      onClick={() => setResponseMessage(message)}
137
                    >
138
                      <i className="fa fa-reply"></i>
139
                    </button>
1331 stevensc 140
                    <button
141
                      type="button"
142
                      onClick={() => handleCopy(message)}
143
                    >
144
                      <i className="fa fa-copy"></i>
145
                    </button>
1305 stevensc 146
                  </div>
147
                }
1197 stevensc 148
              </div>
1305 stevensc 149
            </div>
1 www 150
          </div>
151
        </li>
152
      );
153
    case "image":
154
      return (
155
        <li
156
          key={message.id}
1189 stevensc 157
          className={`clearfix ${message.u === 1 ? "odd" : ""
158
            } m-t-10 conversers${message.u}`}
1 www 159
        >
160
          <div
161
            className="conversation-text"
162
            data-toggle="tooltip"
163
            data-placement="left"
164
            data-html="true"
165
          >
166
            <div className="ctext-wrap">
167
              {senderName(message)}
168
              <StyledChatImgMessage>
169
                <div className="chat_image_container">
170
                  <img src={message.m} alt="chat_image" />
171
                </div>
172
                {message.u === 1 ? (
173
                  ""
174
                ) : (
175
                  <a
176
                    href={message.m}
177
                    target="_blank"
178
                    className="chat_image__download_button"
179
                  >
180
                    <i className="fa ti-arrow-circle-down"></i>
181
                  </a>
182
                )}
183
              </StyledChatImgMessage>
184
              <br />
185
              <i className="text-right">{message.time}</i>
186
            </div>
187
          </div>
188
        </li>
189
      );
190
    case "video":
191
      return (
192
        <li
193
          key={message.id}
1189 stevensc 194
          className={`clearfix ${message.u === 1 ? "odd" : ""
195
            } m-t-10 conversers${message.u}`}
1 www 196
        >
197
          <div
198
            className="conversation-text"
199
            data-toggle="tooltip"
200
            data-placement="left"
201
            data-html="true"
202
          >
203
            <div className="ctext-wrap">
204
              {senderName(message)}
205
              <StyledChatImgMessage>
206
                <div className="chat_image_container">
207
                  <video src={message.m} preload="none" controls></video>
208
                </div>
209
                {message.u === 1 ? (
210
                  ""
211
                ) : (
212
                  <a
213
                    href={message.m}
214
                    target="_blank"
215
                    className="chat_image__download_button"
216
                  >
217
                    <i className="fa ti-arrow-circle-down"></i>
218
                  </a>
219
                )}
220
              </StyledChatImgMessage>
221
              <br />
222
              <i className="text-right">{message.time}</i>
223
            </div>
224
          </div>
225
        </li>
226
      );
227
    case "document":
228
      return (
229
        <li
230
          key={message.id}
1189 stevensc 231
          className={`clearfix ${message.u === 1 ? "odd" : ""
232
            } m-t-10 conversers${message.u}`}
1 www 233
        >
234
          <div
235
            className="conversation-text"
236
            data-toggle="tooltip"
237
            data-placement="left"
238
            data-html="true"
239
          >
240
            <div className="ctext-wrap">
241
              {senderName(message)}
242
              <StyledChatImgMessage>
243
                <div className="chat_image_container">
244
                  <img
245
                    className="pdf"
246
                    src="/storage/type/default/filename/pdf.png"
247
                    alt="pdf"
248
                  />
249
                </div>
250
                {message.u === 1 ? (
251
                  ""
252
                ) : (
253
                  <a
254
                    href={message.m}
255
                    target="_blank"
256
                    className="chat_image__download_button"
257
                  >
258
                    <i className="fa ti-arrow-circle-down"></i>
259
                  </a>
260
                )}
261
              </StyledChatImgMessage>
262
              <br />
263
              <i className="text-right">{message.time}</i>
264
            </div>
265
          </div>
266
        </li>
267
      );
268
    default:
269
      return (
270
        <li
271
          key={message.id}
1189 stevensc 272
          className={`clearfix ${message.u === 1 ? "odd" : ""
273
            } m-t-10 conversers${message.u}`}
1 www 274
        >
275
          <div
276
            className="conversation-text"
277
            data-toggle="tooltip"
278
            data-placement="left"
279
            data-html="true"
280
          >
281
            <div className="ctext-wrap">
282
              {senderName(message)}
283
              <p className="">
284
                {message.mtype}
285
                <br />
286
                <i className="text-right">{message.time}</i>
287
              </p>
288
            </div>
289
          </div>
290
        </li>
291
      );
292
  }
293
};
294
 
295
export default MessageTemplate;