index.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  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. <h1> You have no posts to feed! </h1>
  71. <h1> Post and follow other users! </h1>
  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. <MyCarousel
  91. images={images}
  92. carouselWidth={'600px'}
  93. carouselHeight={'400px'}
  94. />
  95. <div style={{ margin: '0 7%' }}>
  96. <p className="Title"> Title: {title || ''}</p>
  97. <p className="Title"> Text: {text || ''}</p>
  98. <Divider>Comments</Divider>
  99. <div style={{ margin: '10px', position: 'relative' }}>
  100. <CCommentsForFeed postId={_id} comments={comments} />
  101. <div style={{ display: 'flex', margin: '20px 0px' }}>
  102. <CLikeFeed likes={likes} postId={_id} />
  103. <AddComment
  104. addComment={addComment}
  105. postId={_id}
  106. style={{
  107. position: 'absolute',
  108. // bottom: '70px',
  109. // zIndex: '100',
  110. // height:'30px'
  111. }}
  112. // width={'300px'}
  113. />
  114. </div>
  115. </div>
  116. </div>
  117. </div>
  118. ),
  119. )}
  120. </div>
  121. </Col>
  122. </Row>
  123. {postsFeedPromise?.status == 'PENDING' && (
  124. <img
  125. style={{
  126. display: 'block',
  127. margin: '0 auto',
  128. padding: '10px',
  129. }}
  130. src={load}
  131. width="100"
  132. height="100"
  133. />
  134. )}
  135. </div>
  136. )
  137. }
  138. const CCommentsForFeed = connect(
  139. (state) => ({
  140. addSubComment: state.promise?.addSubComment,
  141. addComment: state.promise?.addComment?.payload,
  142. }),
  143. {
  144. findSubComment: actionFindSubCommentFeedTypeSaga,
  145. },
  146. )(Comments)
  147. export const CPostForFeed = connect(
  148. (state) => ({
  149. postsFeed: state.feed?.postsFeed || [],
  150. addComment: state.promise?.addComment?.payload,
  151. postsFeedPromise: state.promise?.postsFeed,
  152. }),
  153. {
  154. onPostsFeed: actionFullAllGetPostsSaga,
  155. onClearFeed: actionClearFeedPostsType,
  156. addComment: actionAddCommentFeedTypeSaga,
  157. },
  158. )(MyPostFeed)