PostFeed.js 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import {useEffect, useState} from "react";
  2. import {gqlOnePost} from "../shared/services&utilits/gqlRequest";
  3. import ImgBlock from "./ImgBlock";
  4. import AvaLoginBlock from "./AvaLoginBlock";
  5. import styled from "styled-components";
  6. import LikeBlock from "./LikeBlock";
  7. import TimeOfCreation from "./TimeOfCreation";
  8. import ModalWindow from "./ModalWindow";
  9. import Post from "./Post";
  10. import {SpaceBetweenWrapper, StyledButton} from "../shared/styledComponents";
  11. const Title = styled.p`
  12. margin-left: 20px;
  13. font-weight: 700;
  14. `
  15. const Text = styled.p`
  16. margin-left: 20px;
  17. `
  18. const ImgWrapper = styled.div`
  19. width: 100%;
  20. max-height: 350px;
  21. display: flex;
  22. align-items: center;
  23. `
  24. const InnerModalWrapper = styled.div`
  25. width: 60vw;
  26. height: 80vh;
  27. display: flex;
  28. `
  29. function PostFeed({post}) {
  30. const [postFeedData, setPostFeedData] = useState(null);
  31. const [isModal, setModal] = useState(false);
  32. useEffect(() => {
  33. if (!postFeedData) {
  34. gqlOnePost(post._id).then(res => res.json())
  35. .then(data => setPostFeedData(data["data"].PostFindOne))
  36. }
  37. }, [])
  38. function updPostData() {
  39. gqlOnePost(post._id).then(res => res.json())
  40. .then(data => setPostFeedData(data["data"].PostFindOne))
  41. }
  42. function toggleModalWindow() {
  43. setModal(!isModal)
  44. }
  45. return (<>
  46. {post && postFeedData && <>
  47. <AvaLoginBlock user={postFeedData.owner}
  48. closeModal={toggleModalWindow}/>
  49. <ImgWrapper>
  50. <ImgBlock images={post.images}/>
  51. </ImgWrapper>
  52. <SpaceBetweenWrapper>
  53. <LikeBlock likes={postFeedData.likes} postId={postFeedData._id} updatePostData={updPostData}/>
  54. <TimeOfCreation createdTime={postFeedData.createdAt}/>
  55. </SpaceBetweenWrapper>
  56. <Title>Title: {postFeedData.title}</Title>
  57. <Text>Text: {postFeedData.text}</Text>
  58. <StyledButton onClick={toggleModalWindow}>Show all comments
  59. ({postFeedData.comments && postFeedData.comments.length || 0})
  60. </StyledButton>
  61. {isModal &&
  62. <ModalWindow closeModal={toggleModalWindow}>
  63. <InnerModalWrapper>
  64. <Post closeModal={toggleModalWindow} postData={postFeedData} updatePostData={updPostData}/>
  65. </InnerModalWrapper>
  66. </ModalWindow>
  67. }
  68. </>
  69. }
  70. </>
  71. )
  72. }
  73. export default PostFeed;