index.js 5.8 KB

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