index.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. import { actionOnePost } from '../../actions/query/postQuery'
  2. import user from '../../materials/user.png'
  3. import React, { useState, useEffect } from 'react'
  4. import { Card } from '../../components/post/PostCard'
  5. import ListOfUsers from '../../components/ListOfUsers'
  6. import { connect } from 'react-redux'
  7. import { Avatar } from 'antd'
  8. import {
  9. actionFullProfilePageUserTypeSaga,
  10. actionPostsPortionTypeSaga,
  11. } from '../../actions/typeSaga/userTypesSaga'
  12. import { actionClearAllPostsType } from '../../actions/types/postTypes'
  13. import { Row, Col } from 'antd'
  14. import { CSubscribe } from '../../components/Subscribe'
  15. import { CEditSetting } from '../setting'
  16. import load from '../../materials/load.gif'
  17. import backendURL from '../../helpers/backendUrl'
  18. export const PageAboutUser = ({
  19. match: {
  20. params: { _id },
  21. },
  22. my_Id,
  23. aboutUser: { login, nick, createdAt, avatar, followers, following } = {},
  24. allPosts,
  25. onPost,
  26. onAboutUser,
  27. countPosts,
  28. onClearPosts,
  29. onUserPosts,
  30. userPostPromise,
  31. }) => {
  32. const [checkScroll, setScroll] = useState(true)
  33. useEffect(() => {
  34. onAboutUser(_id)
  35. }, [_id])
  36. useEffect(() => {
  37. if (checkScroll) {
  38. onUserPosts(_id)
  39. }
  40. setScroll(false)
  41. }, [checkScroll])
  42. useEffect(() => {
  43. document.addEventListener('scroll', scrollHandler)
  44. return () => {
  45. document.removeEventListener('scroll', scrollHandler)
  46. onClearPosts()
  47. }
  48. }, [])
  49. useEffect(() => {
  50. document.addEventListener('scroll', scrollHandler)
  51. }, [allPosts?.length])
  52. const scrollHandler = (e) => {
  53. if (
  54. e.target.documentElement.scrollHeight -
  55. (e.target.documentElement.scrollTop + window.innerHeight) <
  56. 200
  57. ) {
  58. setScroll(true)
  59. document.removeEventListener('scroll', scrollHandler)
  60. }
  61. }
  62. const checkMyId = _id === my_Id
  63. return (
  64. <>
  65. <Row>
  66. <Col xl={{ span: 12, offset: 6 }}
  67. md={{ span: 20, offset: 3 }}
  68. sm={{ offset: 3, span: 15 }}
  69. xs={{ offset: 2, span: 20 }}
  70. >
  71. <section className="AboutMe">
  72. <Row>
  73. {avatar?.url ? (
  74. <Avatar
  75. className='ProfileAvatar'
  76. src={backendURL+'/' + avatar?.url}
  77. />
  78. ) : (
  79. <Avatar
  80. className='ProfileAvatar'
  81. src={user}
  82. />
  83. )}
  84. <div className="Info">
  85. {login ? <p className='Login'> {login}</p> : <p className='Login'> {'Anon'}</p>}
  86. <p>
  87. Created Account:{' '}
  88. {new Intl.DateTimeFormat('en-GB').format(createdAt)}
  89. </p>
  90. <div style={{ display: 'flex' }}>
  91. {countPosts > 0 ? (
  92. <div
  93. style={{
  94. display: 'flex',
  95. justifyContent: 'space-between',
  96. }}
  97. >
  98. <p> {countPosts} posts </p>
  99. </div>
  100. ) : (
  101. <p> 0 posts </p>
  102. )}
  103. <ListOfUsers
  104. listResult={followers}
  105. listUsers={followers}
  106. onPageData={onAboutUser}
  107. text={'followers'}
  108. />
  109. <ListOfUsers
  110. listResult={following}
  111. listUsers={following}
  112. onPageData={onAboutUser}
  113. text={'following'}
  114. />
  115. </div>
  116. <p> nick: {nick == null ? login : nick}</p>
  117. {checkMyId ? <CEditSetting /> : <CSubscribe />}
  118. </div>
  119. </Row>
  120. </section>
  121. </Col>
  122. </Row>
  123. <Row>
  124. <Col xl={{ span: 17, offset: 4 }}
  125. lg={{ offset: 4, span: 20 }}
  126. md={{ offset: 4, span: 20}}
  127. sm={{ offset: 3, span: 15 }}
  128. xs={{ offset: 0, span: 24 }}
  129. // md={{ span: 1 }}
  130. >
  131. <div
  132. className='ProfilePage'
  133. >
  134. {(allPosts || [])?.map((item) => (
  135. <Card post={item} onPost={onPost} />
  136. ))}
  137. </div>
  138. </Col>
  139. </Row>
  140. {userPostPromise?.status == 'PENDING' && (
  141. <img className="Preloader" src={load} width="100" height="100" />
  142. )}
  143. </>
  144. )
  145. }
  146. export const CPageAboutUser = connect(
  147. (state) => ({
  148. my_Id: state.auth?.payload?.sub?.id,
  149. aboutUser: state.userData?.aboutUser,
  150. countPosts: state?.promise?.countPosts?.payload,
  151. allPosts: state.userData?.allPosts,
  152. userPostPromise: state.promise?.allPosts,
  153. }),
  154. {
  155. onAboutUser: actionFullProfilePageUserTypeSaga,
  156. onPost: actionOnePost,
  157. onClearPosts: actionClearAllPostsType,
  158. onUserPosts: actionPostsPortionTypeSaga,
  159. },
  160. )(PageAboutUser)