index.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. import React, { useMemo, useState, useEffect } from 'react'
  2. import {
  3. actionAllPostsFeed,
  4. actionFullAllGetPosts,
  5. // actionAddFullComment,
  6. // actionFindSubComment,
  7. actionAddSubFullComment,
  8. actionFindLikes,
  9. actionGetFindLiked,
  10. actionDeleteFullLike,
  11. actionAddFullLikeForFeed,
  12. actionDeleteFullLikeForFeed,
  13. actionAddFullLike,
  14. } from '../../actions'
  15. import {
  16. actionFullFeed,
  17. // actionAddFullCommentFeed,
  18. // actionAddFullLikeFeed,
  19. // actionDeleteFullLikeFeed,
  20. } from '../../redux/saga'
  21. import {actionClearFeedPosts} from '../../redux/reducers/feed/feedReducer'
  22. import { Link } from 'react-router-dom'
  23. import { Provider, connect } from 'react-redux'
  24. import { Upload, Button, DatePicker, Space } from 'antd'
  25. import { Avatar, Image, Divider, Radio } from 'antd'
  26. import { CPost } from '../onePost'
  27. import { Row, Col } from 'antd'
  28. import LinkToUser from '../../components/LinkToUser'
  29. import { AddComment, Comments } from '../../components/Comment'
  30. import { Like, Likes } from '../../components/Like'
  31. import { MyCarousel } from '../../components/Carousel'
  32. import load from '../../materials/load.gif'
  33. const MyPostFeed = ({
  34. // myData,
  35. postsFeed = [],
  36. onPostsFeed,
  37. addComment,
  38. onClearFeed,
  39. postsFeedPromise
  40. }) => {
  41. const [checkScroll, setScroll] = useState(true)
  42. useEffect(() => {
  43. if (checkScroll) {
  44. console.log('попало в новую порцию постов')
  45. onPostsFeed()
  46. }
  47. setScroll(false)
  48. }, [checkScroll])
  49. useEffect(() => {
  50. document.addEventListener('scroll', scrollHandler)
  51. return () => {
  52. document.removeEventListener('scroll', scrollHandler)
  53. onClearFeed()
  54. }
  55. }, [])
  56. console.log('check scroll ', checkScroll)
  57. useEffect(() => {
  58. document.addEventListener('scroll', scrollHandler)
  59. }, [postsFeed.length])
  60. const scrollHandler = (e) => {
  61. if (e.target.documentElement.scrollHeight -
  62. (e.target.documentElement.scrollTop + window.innerHeight) < 200) {
  63. console.log('SCROLL HANDLER', checkScroll)
  64. setScroll(true)
  65. document.removeEventListener('scroll', scrollHandler)
  66. }
  67. }
  68. return (
  69. <div style={{ marginTop: '50px'}}>
  70. <div className="PostsFeed" >
  71. <Row>
  72. <Col span={12} offset={6}>
  73. <div>
  74. {postsFeed?.length == 0 && (
  75. <div>
  76. <center>
  77. <h1> You have no posts to feed! </h1>
  78. <h1>
  79. {' '}
  80. Post and follow other users!{' '}
  81. </h1>
  82. </center>
  83. </div>
  84. )}
  85. {(postsFeed || []).map(
  86. ({ _id, images, title, text, owner, comments, likes }) => (
  87. <div className="PostFeed" >
  88. <LinkToUser _id={owner?._id} key={_id} login={owner?.login} avatar={owner?.avatar} size={50} />
  89. <MyCarousel images={images} style={{ marginTop: '60px' }} />
  90. <h1 className='Title'> Title: {title || ''}</h1>
  91. <h1 className='Title'> Text: {text || ''}</h1>
  92. <Divider>Comments</Divider>
  93. <div className="ScrollForFeed">
  94. {/* <CCommentsForFeed
  95. postId={_id}
  96. comments={comments || []}
  97. /> */}
  98. </div>
  99. <center>
  100. <div style={{ display: 'flex', padding: '20px', marginLeft:'100px' }}>
  101. {/* <CLikeForFeed likes={likes} postId={_id} /> */}
  102. {/* <AddComment addComment={addComment} postId={_id} /> */}
  103. </div>
  104. </center>
  105. </div>
  106. ),
  107. )}
  108. </div>
  109. </Col>
  110. </Row>
  111. {(postsFeedPromise?.status == "PENDING") &&
  112. <img style={{display:'block', margin: '0 auto', padding:'10px' }} src={load} width="100" height="100" />
  113. }
  114. </div>
  115. </div>
  116. )
  117. }
  118. const CCommentsForFeed = connect(
  119. (state) => ({
  120. addComment: state.promise?.addComment?.payload,
  121. // addSubComment: state.promise?.addSubComment,
  122. }),
  123. {
  124. // addComment: actionAddFullCommentFeed,
  125. // addCommentReply: actionAddSubFullComment,
  126. // findSubComment: actionFindSubComment,
  127. },
  128. )(Comments)
  129. export const CPostForFeed = connect(
  130. (state) => ({
  131. // myData: state?.myData.aboutMe || '',
  132. postsFeed: state.feed?.postsFeed || [],
  133. addComment: state.promise?.addComment?.payload,
  134. postsFeedPromise :state.promise?.postsFeed
  135. }),
  136. {
  137. onPostsFeed: actionFullAllGetPosts,
  138. onClearFeed: actionClearFeedPosts,
  139. // addComment: actionAddFullCommentFeed,
  140. // addCommentReply: actionAddSubFullComment,
  141. // addLike: actionAddFullLikeForFeed,
  142. },
  143. )(MyPostFeed)
  144. const AllLikeComp = ({ my_Id, addLike, deleteLike, likes, postId }) => (
  145. <Like
  146. my_Id={my_Id}
  147. addLike={addLike}
  148. deleteLike={deleteLike}
  149. likes={likes}
  150. postId={postId}
  151. >
  152. <Likes likes={likes} />
  153. </Like>
  154. )
  155. export const CLikeForFeed = connect(
  156. (state) => ({
  157. my_Id: state.auth?.payload?.sub?.id || '',
  158. addLike: state.promise?.addLike?.payload,
  159. deleteLike: state.promise?.deleteLike?.payload,
  160. }),
  161. {
  162. // addLike: actionAddFullLikeFeed,
  163. // deleteLike: actionDeleteFullLikeFeed,
  164. },
  165. )(AllLikeComp)