index.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. import React, { useState, useEffect } from 'react'
  2. import { actionFullAllGetPostsSaga } from '../../actions/typeSaga/feedTypesSaga'
  3. import { actionAddCommentFeedTypeSaga } from '../../actions/typeSaga/commentTypesSaga'
  4. import { actionClearFeedPostsType } from '../../actions/types/feedTypes'
  5. import { Provider, connect } from 'react-redux'
  6. import { Divider } from 'antd'
  7. import { CPost } from '../onePost'
  8. import { Row, Col } from 'antd'
  9. import LinkToUser from '../../components/LinkToUser'
  10. import { Comments } from '../../components/comment/Comment'
  11. import AddComment from '../../components/comment/AddComment'
  12. import { MyCarousel } from '../../components/post/Carousel'
  13. import load from '../../materials/load.gif'
  14. import {
  15. actionFullOnePostSaga,
  16. actionAddFullCommentSaga,
  17. } from '../../actions/typeSaga/postTypesSaga'
  18. import {
  19. actionFindSubCommentTypeSaga,
  20. actionFindSubCommentFeedTypeSaga,
  21. } from '../../actions/typeSaga/postTypesSaga'
  22. import { CLikeFeed } from '../../components/like/Like'
  23. const MyPostFeed = ({
  24. postsFeed = [],
  25. onPostsFeed,
  26. addComment,
  27. onClearFeed,
  28. postsFeedPromise,
  29. }) => {
  30. const [checkScroll, setScroll] = useState(true)
  31. useEffect(() => {
  32. if (checkScroll) {
  33. onPostsFeed()
  34. }
  35. setScroll(false)
  36. }, [checkScroll])
  37. useEffect(() => {
  38. document.addEventListener('scroll', scrollHandler)
  39. return () => {
  40. document.removeEventListener('scroll', scrollHandler)
  41. onClearFeed()
  42. }
  43. }, [])
  44. useEffect(() => {
  45. document.addEventListener('scroll', scrollHandler)
  46. }, [postsFeed.length])
  47. const scrollHandler = (e) => {
  48. if (
  49. e.target.documentElement.scrollHeight -
  50. (e.target.documentElement.scrollTop + window.innerHeight) <
  51. 200
  52. ) {
  53. setScroll(true)
  54. document.removeEventListener('scroll', scrollHandler)
  55. }
  56. }
  57. return (
  58. <div className="PostsFeed">
  59. <Row>
  60. <Col
  61. xl={{ offset: 6, span: 12 }}
  62. lg={{ offset: 6, span: 15 }}
  63. md={{ offset: 3, span: 17 }}
  64. sm={{ offset: 3, span: 20 }}
  65. xs={{ offset: 1, span: 22 }}
  66. >
  67. <div>
  68. {postsFeed?.length == 0 && (
  69. <div style={{ textAlign: 'center' }}>
  70. <p style={{fontSize:'20px'}}> You have no posts to feed! </p>
  71. <p style={{fontSize:'20px'}}> Post and follow other users! </p>
  72. </div>
  73. )}
  74. {(postsFeed || []).map(
  75. ({ _id, images, title, text, owner, comments, likes }) => (
  76. <div className="PostsFeed-one">
  77. <Col
  78. xl={{ offset: 1, span: 12 }}
  79. lg={{ offset: 1, span: 15 }}
  80. >
  81. <LinkToUser
  82. className="Owner"
  83. _id={owner?._id}
  84. key={_id}
  85. login={owner?.login}
  86. avatar={owner?.avatar}
  87. size={40}
  88. />
  89. </Col>
  90. <Col
  91. xs={{ offset: 1, span: 22 }}
  92. >
  93. <MyCarousel
  94. images={images}
  95. carouselWidth={'600px'}
  96. carouselHeight={'400px'}
  97. />
  98. </Col>
  99. <div style={{ margin: '0 5%' }}>
  100. <p className="Title"> Title: {title || ''}</p>
  101. <p className="Title"> Text: {text || ''}</p>
  102. <p>
  103. <Divider>Comments</Divider></p>
  104. <div style={{
  105. margin: '10px',
  106. position: 'relative'
  107. }}>
  108. <CCommentsForFeed postId={_id} comments={comments} />
  109. <div className='FooterFeed'>
  110. <CLikeFeed likes={likes} postId={_id} />
  111. <AddComment
  112. addComment={addComment}
  113. postId={_id}
  114. style={{
  115. position: 'absolute',
  116. // bottom: '70px',
  117. // zIndex: '100',
  118. // height:'30px'
  119. }}
  120. // width={'300px'}
  121. />
  122. </div>
  123. </div>
  124. </div>
  125. </div>
  126. ),
  127. )}
  128. </div>
  129. </Col>
  130. </Row>
  131. {postsFeedPromise?.status == 'PENDING' && (
  132. <img
  133. style={{
  134. display: 'block',
  135. margin: '0 auto',
  136. padding: '10px',
  137. }}
  138. src={load}
  139. width="100"
  140. height="100"
  141. />
  142. )}
  143. </div>
  144. )
  145. }
  146. const CCommentsForFeed = connect(
  147. (state) => ({
  148. addSubComment: state.promise?.addSubComment,
  149. addComment: state.promise?.addComment?.payload,
  150. }),
  151. {
  152. findSubComment: actionFindSubCommentFeedTypeSaga,
  153. },
  154. )(Comments)
  155. export const CPostForFeed = connect(
  156. (state) => ({
  157. postsFeed: state.feed?.postsFeed || [],
  158. addComment: state.promise?.addComment?.payload,
  159. postsFeedPromise: state.promise?.postsFeed,
  160. }),
  161. {
  162. onPostsFeed: actionFullAllGetPostsSaga,
  163. onClearFeed: actionClearFeedPostsType,
  164. addComment: actionAddCommentFeedTypeSaga,
  165. },
  166. )(MyPostFeed)