|
@@ -14,22 +14,31 @@ import {
|
|
} from '@mui/icons-material/'
|
|
} from '@mui/icons-material/'
|
|
|
|
|
|
import EmojiPicker from 'emoji-picker-react';
|
|
import EmojiPicker from 'emoji-picker-react';
|
|
-import { SkinTones } from 'emoji-picker-react';
|
|
|
|
|
|
|
|
import { useState } from "react";
|
|
import { useState } from "react";
|
|
-import { useDispatch } from "react-redux";
|
|
|
|
|
|
+import { useDispatch, useSelector } from "react-redux";
|
|
|
|
|
|
-import { actionAddComment } from "../redux/action";
|
|
|
|
|
|
+import { actionFullAddComment } from "../redux/thunks";
|
|
|
|
+import { useParams } from "react-router-dom";
|
|
|
|
|
|
|
|
|
|
-function CommentField({ id }) {
|
|
|
|
|
|
+import { CommentContext } from "./card_post";
|
|
|
|
+import { useContext } from "react";
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+function CommentField() {
|
|
// console.log('id: ', id)
|
|
// console.log('id: ', id)
|
|
|
|
|
|
|
|
+ const [comment, setComment] = useContext(CommentContext)
|
|
|
|
+ console.log('testContext from field: ', comment,)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ const { postId } = useParams()
|
|
const dispatch = useDispatch()
|
|
const dispatch = useDispatch()
|
|
|
|
|
|
// отслеживаем состояние поля ввода комментария для поста
|
|
// отслеживаем состояние поля ввода комментария для поста
|
|
- const [comment, setComment] = useState({ text: '', post: { _id: id } })
|
|
|
|
- // console.log('comment: ', comment)
|
|
|
|
|
|
+ // const [comment, setComment] = useState({ text: '', post: { _id: postId } })
|
|
|
|
+ // console.log('params for new comment: ', comment)
|
|
|
|
|
|
// открытие поповера emoji
|
|
// открытие поповера emoji
|
|
const [openPopover, setOpenPopover] = useState(null);
|
|
const [openPopover, setOpenPopover] = useState(null);
|
|
@@ -43,12 +52,47 @@ function CommentField({ id }) {
|
|
const emojiField = open ? 'simple-popover' : undefined;
|
|
const emojiField = open ? 'simple-popover' : undefined;
|
|
|
|
|
|
|
|
|
|
- // вот это будет перерабатываться после того, как загружу все комментарии: после отправки коммента, нужно перезагрузить комментарии, чтобы обновить их на странице и сразу отобразить
|
|
|
|
- function uploadComment(params) {
|
|
|
|
- dispatch(actionAddComment(params))
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+ const allComments = useSelector(state => state?.promise?.FindComments?.payload)
|
|
|
|
+
|
|
|
|
+ // запрос на создание комментария
|
|
|
|
+ function uploadComment() {
|
|
|
|
+ console.log('======================= start ========================')
|
|
|
|
+ // проверка на то, осталось ли в поле вводе комментария логин пользователя, которому нужно ответить. если нет, тогда удаляем из объекта ключ answerTo и диспатчим запрос с именем CreateComment, потому что это уже коммент к посту
|
|
|
|
+ const idToFind = comment?.answerTo?._id
|
|
|
|
+ const findLogin = allComments.find(user => user?._id === idToFind)
|
|
|
|
+
|
|
|
|
+ console.log('idToFind, findLogin: ', idToFind, findLogin)
|
|
|
|
+ console.log('второй true: ', ((comment.text).includes(findLogin?.owner?.login)))
|
|
|
|
+
|
|
|
|
+ // let isInclude = false
|
|
|
|
+ // if (findLogin && ((comment.text).includes(findLogin?.owner?.login))) {
|
|
|
|
+ // isInclude = true
|
|
|
|
+ // }
|
|
|
|
+ let isInclude
|
|
|
|
+ (comment.text).includes(findLogin?.owner?.login) && (isInclude = true)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ console.log('isInclude: ', isInclude)
|
|
|
|
+
|
|
|
|
+ // удаляем ключ answerTo, если нет в строке ввода комментария логина
|
|
|
|
+ if (!isInclude) {
|
|
|
|
+ delete comment.answerTo
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // определяем, какое имя дать запросу
|
|
|
|
+ let nameOfPromise = (isInclude && ('answerTo' in comment)) ? 'CreateCommentTo' : 'CreateComment'
|
|
|
|
+
|
|
|
|
+ // отправляем запрос на создание комментария с нужным именем
|
|
|
|
+ dispatch(actionFullAddComment(nameOfPromise, comment, postId))
|
|
|
|
+
|
|
|
|
+ // и чистим поле ввода комментария
|
|
|
|
+ setComment({ ...comment, text: '' })
|
|
|
|
+
|
|
|
|
+ console.log('======================= finish ========================')
|
|
|
|
+ }
|
|
|
|
+
|
|
return (
|
|
return (
|
|
<Box
|
|
<Box
|
|
sx={{
|
|
sx={{
|
|
@@ -99,10 +143,13 @@ function CommentField({ id }) {
|
|
}}
|
|
}}
|
|
>
|
|
>
|
|
<EmojiPicker
|
|
<EmojiPicker
|
|
|
|
+ searchPlaceHolder='Найти'
|
|
|
|
+ emojiStyle='apple'
|
|
width={300}
|
|
width={300}
|
|
- height={400}
|
|
|
|
- defaultSkinTone={SkinTones}
|
|
|
|
- onEmojiClick={e => setComment({ ...comment, text: comment.text + e.emoji })}
|
|
|
|
|
|
+ height={450}
|
|
|
|
+ onEmojiClick={
|
|
|
|
+ e => setComment({ ...comment, text: comment.text + e.emoji })
|
|
|
|
+ }
|
|
/>
|
|
/>
|
|
</Popover>
|
|
</Popover>
|
|
</Box>,
|
|
</Box>,
|
|
@@ -118,7 +165,7 @@ function CommentField({ id }) {
|
|
cursor: 'pointer',
|
|
cursor: 'pointer',
|
|
margin: '0 8px'
|
|
margin: '0 8px'
|
|
}}
|
|
}}
|
|
- onClick={() => uploadComment(comment)}
|
|
|
|
|
|
+ onClick={uploadComment}
|
|
>
|
|
>
|
|
Отправить
|
|
Отправить
|
|
</Typography>}
|
|
</Typography>}
|