123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- import { Card, Col, Row } from 'antd'
- import React, { useEffect, useState } from 'react'
- import { connect } from 'react-redux'
- import { Link } from 'react-router-dom'
- import { UserAvatar } from './Header'
- import Paragraph from 'antd/lib/typography/Paragraph'
- import Text from 'antd/lib/typography/Text'
- import { actionPostsFeed, actionRemovePostsFeedAC } from '../actions'
- import { DateCreated } from '../components/main/DateCreated'
- import PostImage from '../components/main/postsFeed/PostImage'
- import { CPostUserPanel } from '../components/main/postsFeed/PostUserPanel'
- import { CFieldCommentSend } from '../components/main/postsFeed/FieldComment'
- export const PostTitle = ({ owner }) =>
- <Row justify="start" align='middle'>
- <Link to={`/profile/${owner?._id}`} className='owner'>
- <UserAvatar avatar={owner?.avatar} login={owner?.login} avatarSize={'45px'} nick={owner?.nick} />
- <span>{owner?.nick ? owner.nick : owner?.login ? owner.login : 'Null'}</span>
- </Link >
- </Row>
- const PostDescription = ({ title, description, date }) =>
- <>
- <Row justify='space-between'>
- <Col >
- {!!title && <Text level={3} strong>{title}</Text>}
- </Col>
- <Col >
- <Text type='secondary'>
- <DateCreated date={date} />
- </Text>
- </Col>
- </Row>
- <Paragraph ellipsis={true ? { rows: 1, expandable: true, symbol: 'more' } : false}>
- {description}
- </Paragraph>
- </>
- const Comments = ({ comments }) =>
- <>
- {comments && comments.length > 2 &&
- <Link to={`/#`}>
- <Text type={'secondary'} level={3}>{`Посмотреть все ${comments.length} комментария`}</Text>
- </Link>}
- {comments && <div>
- <div className='Post__comments'>
- <Link to={`/#`}>{comments[comments?.length - 2]?.owner?.nick || comments[comments?.length - 2]?.owner?.login}: </Link>
- <span>{comments[comments?.length - 2]?.text}</span>
- </div>
- <div className='Post__comments'>
- <Link to={`/#`}>{comments[comments?.length - 1]?.owner?.login || comments[comments?.length - 1]?.owner?.login}: </Link>
- <span>{comments[comments?.length - 1]?.text}</span>
- </div>
- </div>}
- </>
- const Post = ({ postData: { _id, text, title, owner, images, createdAt = '', comments, likes } }) =>
- <div className='Post'>
- <Card
- title={<PostTitle owner={owner} />}
- cover={<PostImage images={images} />}
- actions={[<CFieldCommentSend postId={_id} />]}
- >
- <CPostUserPanel postId={_id} likes={likes} />
- <PostDescription title={title} description={text} date={createdAt} />
- <Comments comments={comments} />
- </Card>
- </div>
- const MainPostsFeed = ({ posts, count, postsFollowing, postsFollowingRemove, following }) => {
- const [checkScroll, setCheckScroll] = useState(true)
- useEffect(() => {
- if (checkScroll && following.length !== 0) {
- postsFollowing(following)
- setCheckScroll(false)
- }
- }, [checkScroll, following])
- useEffect(() => {
- document.addEventListener('scroll', scrollHandler)
- return () => {
- document.removeEventListener('scroll', scrollHandler)
- postsFollowingRemove()
- console.log(posts.length);
- }
- }, [])
- const scrollHandler = (e) => {
- if (e.target.documentElement.scrollHeight - (e.target.documentElement.scrollTop + window.innerHeight) < 500) {
- setCheckScroll(true)
- }
- }
- return (
- <>
- {posts.map(p => <Post key={p._id} postData={p} />)}
- </>
- )
- }
- export const CMainPostsFeed = connect(state => ({
- posts: state?.postsFeed?.posts || [],
- following: state?.myData.following || []
- }), {
- postsFollowing: actionPostsFeed,
- postsFollowingRemove: actionRemovePostsFeedAC,
- })(MainPostsFeed)
|