|
@@ -1,4 +1,6 @@
|
|
|
import React, {useState, useEffect, useRef} from 'react'
|
|
|
+import FileDownloadIcon from '@mui/icons-material/FileDownload';
|
|
|
+import InsertDriveFileIcon from '@mui/icons-material/InsertDriveFile';
|
|
|
|
|
|
import { connect } from 'react-redux'
|
|
|
import { dateFromStamp, stringColor, backURL } from '../helpers'
|
|
@@ -83,7 +85,50 @@ const dateBlock = {
|
|
|
color: "#555"
|
|
|
}
|
|
|
|
|
|
+const mediaBlock = {
|
|
|
+ marginBottom: "20px"
|
|
|
+}
|
|
|
+const textBlock = {
|
|
|
+}
|
|
|
|
|
|
+const imgStyle = {
|
|
|
+ maxWidth: "100%",
|
|
|
+ width: "auto",
|
|
|
+ maxHeight: "400px",
|
|
|
+ height: "auto",
|
|
|
+ margin: "0 5px"
|
|
|
+}
|
|
|
+const downloadStyle = {
|
|
|
+ display: "flex",
|
|
|
+ maxWidth: "300px",
|
|
|
+ minHeight: "54px",
|
|
|
+ borderRadius: "30px",
|
|
|
+ textDecoration: "none",
|
|
|
+ margin: "5px 0",
|
|
|
+ padding: "10px",
|
|
|
+ backgroundColor: "#eeee"
|
|
|
+}
|
|
|
+const imgDownload = {
|
|
|
+ alignSelf: "center",
|
|
|
+ borderRadius: "50%",
|
|
|
+ backgroundColor: "#1976d2",
|
|
|
+ height: "45px",
|
|
|
+ width: "45px",
|
|
|
+ display: "flex",
|
|
|
+ justifyContent: "center",
|
|
|
+ alignItems: "center",
|
|
|
+ marginRight: "10px",
|
|
|
+}
|
|
|
+const textDownload = {
|
|
|
+ alignSelf: "start",
|
|
|
+ // marginTop: "10px",
|
|
|
+ maxWidth: "calc(100% - 55px)",
|
|
|
+ fontSize: 14,
|
|
|
+ fontWeight: 500,
|
|
|
+ color: "#000",
|
|
|
+ wordWrap: "break-word",
|
|
|
+ overflow: "hidden"
|
|
|
+}
|
|
|
|
|
|
|
|
|
const Msg = ({ msg, prevOwner, prevTime, myProfile }) => {
|
|
@@ -104,16 +149,11 @@ const Msg = ({ msg, prevOwner, prevTime, myProfile }) => {
|
|
|
|
|
|
allMedia[objName].push(file)
|
|
|
} else {
|
|
|
-
|
|
|
allMedia[objName] = [file]
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // console.log(media)
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
const prOwner = prevOwner.current
|
|
|
prevOwner.current = owner._id
|
|
|
|
|
@@ -123,7 +163,6 @@ const Msg = ({ msg, prevOwner, prevTime, myProfile }) => {
|
|
|
// console.log( prTime - createdAt, text)
|
|
|
const nameBlockNew = {...nameBlock, color: stringColor.stringToColor(nick || login)}
|
|
|
return (
|
|
|
- <>
|
|
|
<div
|
|
|
style={(myId === owner._id) ?
|
|
|
( (prOwner === owner._id) ?
|
|
@@ -132,6 +171,7 @@ const Msg = ({ msg, prevOwner, prevTime, myProfile }) => {
|
|
|
{...msgBlock, marginBottom: "2px"} : {...msgBlock, marginBottom: "15px"})
|
|
|
}
|
|
|
>
|
|
|
+
|
|
|
<div style={avBlock} >
|
|
|
{ (prOwner === owner._id &&
|
|
|
prTime - createdAt < 600000) ||
|
|
@@ -139,6 +179,7 @@ const Msg = ({ msg, prevOwner, prevTime, myProfile }) => {
|
|
|
<CMyAvatar /> :
|
|
|
<UserAvatar profile={owner} /> ) }
|
|
|
</div>
|
|
|
+
|
|
|
<div style={(myId === owner._id) ? myBodyBlock : bodyBlock} >
|
|
|
|
|
|
<div style={(myId === owner._id) ? nameBlock : nameBlockNew} >
|
|
@@ -146,24 +187,68 @@ const Msg = ({ msg, prevOwner, prevTime, myProfile }) => {
|
|
|
</div>
|
|
|
|
|
|
<div style={contentBlock} >
|
|
|
-
|
|
|
- {
|
|
|
- (media && media.length !== 0) &&
|
|
|
- <div>
|
|
|
- {media.map((mediaObj) => <div key={mediaObj.url}
|
|
|
- style={{
|
|
|
- }} >
|
|
|
- <img key={mediaObj.url}
|
|
|
- // type={mediaObj.type}
|
|
|
- style={{ maxWidth: "100%", width: "auto",
|
|
|
- maxHeight: "400px", height: "auto" }}
|
|
|
- src={backURL + mediaObj.url } />
|
|
|
- </div>
|
|
|
- )}
|
|
|
- </div>
|
|
|
- }
|
|
|
-
|
|
|
- <pre>
|
|
|
+ <div style={mediaBlock}>
|
|
|
+ { Object.keys(allMedia).map((key) =>
|
|
|
+ <div key={key} >
|
|
|
+ {
|
|
|
+ (key === 'image') &&
|
|
|
+ allMedia[key].map((mediaObj) =>
|
|
|
+ <img
|
|
|
+ key={mediaObj.url}
|
|
|
+ style={imgStyle}
|
|
|
+ src={backURL + mediaObj.url}
|
|
|
+ />
|
|
|
+ ) ||
|
|
|
+ (key === 'video') &&
|
|
|
+ allMedia[key].map((mediaObj) =>
|
|
|
+ <video
|
|
|
+ key={mediaObj.url}
|
|
|
+ style={imgStyle}
|
|
|
+ src={backURL + mediaObj.url}
|
|
|
+ controls
|
|
|
+ preload={'metadata'}
|
|
|
+ >
|
|
|
+ </video>
|
|
|
+ ) ||
|
|
|
+ (key === 'audio') &&
|
|
|
+ allMedia[key].map((mediaObj) =>
|
|
|
+ <div
|
|
|
+ key={mediaObj.url}
|
|
|
+ >
|
|
|
+ <audio
|
|
|
+ src={backURL + mediaObj.url}
|
|
|
+ controls
|
|
|
+ >
|
|
|
+ </audio>
|
|
|
+ </div>
|
|
|
+ ) ||
|
|
|
+ allMedia[key].map((mediaObj) =>
|
|
|
+ <a
|
|
|
+ key={mediaObj.url}
|
|
|
+ href={backURL + mediaObj.url}
|
|
|
+ download
|
|
|
+ style={downloadStyle}
|
|
|
+ >
|
|
|
+ <div
|
|
|
+ style={imgDownload}>
|
|
|
+ <FileDownloadIcon
|
|
|
+ style={{
|
|
|
+ fontSize: 35,
|
|
|
+ color: "#ddd",
|
|
|
+ }} />
|
|
|
+ </div>
|
|
|
+ <div
|
|
|
+ style={textDownload} >
|
|
|
+ {mediaObj.originalFileName}
|
|
|
+ </div>
|
|
|
+ </a>
|
|
|
+ )
|
|
|
+ }
|
|
|
+ </div>
|
|
|
+ )}
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <pre style={textBlock}>
|
|
|
{text}
|
|
|
</pre>
|
|
|
|
|
@@ -174,7 +259,6 @@ const Msg = ({ msg, prevOwner, prevTime, myProfile }) => {
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- </>
|
|
|
)
|
|
|
}
|
|
|
const CMsg = connect( state => ({ myProfile: state.promise.myProfile?.payload || {}}))(Msg)
|