From 83aa76490179c8c1cd4066cbc03ddc77c2123c9b Mon Sep 17 00:00:00 2001 From: Lucas Molinari <91815333+molhinari@users.noreply.github.com> Date: Mon, 17 Feb 2025 17:56:32 -0300 Subject: [PATCH 1/3] =?UTF-8?q?Arquivos=20do=20Modal=20criados=20(por?= =?UTF-8?q?=C3=A9m=20a=20postagem=20inteira=20est=C3=A1=20clic=C3=A1vel)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/elements/Feed/index.js | 67 +++++++++++++------ .../elements/ModalPostagem/index.js | 43 ++++++++++++ .../elements/ModalPostagem/styles.js | 33 +++++++++ 3 files changed, 123 insertions(+), 20 deletions(-) create mode 100644 src/components/elements/ModalPostagem/index.js create mode 100644 src/components/elements/ModalPostagem/styles.js diff --git a/src/components/elements/Feed/index.js b/src/components/elements/Feed/index.js index 7495f33..0eee510 100644 --- a/src/components/elements/Feed/index.js +++ b/src/components/elements/Feed/index.js @@ -1,10 +1,9 @@ import React, {useEffect, useRef, useState} from 'react'; import PropTypes from 'prop-types'; import {isNull} from 'lodash'; - -import {Spinner, Box} from '@chakra-ui/react'; +import {Spinner, Box, useDisclosure} from '@chakra-ui/react'; import Postagem from '../Postagem'; - +import PostViewModal from '../ModalPostagem'; import * as User from '../../../domain/usuarios'; const Feed = ({ @@ -19,6 +18,8 @@ const Feed = ({ } = {}) => { const loaderRef = useRef(null); const [loadMore, setLoadMore] = useState(false); + const {isOpen, onOpen, onClose} = useDisclosure(); + const [selectedPost, setSelectedPost] = useState(null); useEffect(() => { const observer = new IntersectionObserver( @@ -41,7 +42,7 @@ const Feed = ({ observer.unobserve(loaderRef.current); } }; - }, [value, loaderRef]); + }, [value, loaderRef, fetchNextPage]); if (isNull(value)) { return ( @@ -51,20 +52,32 @@ const Feed = ({ ); } + const handlePostClick = (postagem) => { + setSelectedPost(postagem); + onOpen(); + }; + return ( <> {value.map((postagem, index) => { + // Envolva cada postagem em um Box clicável + const postContent = ( + + ); + if (index === value.length - 1 && hasMorePosts) { return (
- + handlePostClick(postagem)} cursor="pointer"> + {postContent} + {loadMore && ( @@ -74,17 +87,31 @@ const Feed = ({ ); } return ( - + onClick={() => handlePostClick(postagem)} + cursor="pointer"> + {postContent} + ); })} + + {/* Renderiza o modal de visualização se houver uma postagem selecionada */} + {selectedPost && ( + { + setSelectedPost(null); + onClose(); + }} + post={selectedPost} + user={user} + verifiable={canVerifyPost} + fetchComments={fetchComments} + onCreateComment={onCreateComment} + onToggleSelo={onToggleSelo} + /> + )} ); }; diff --git a/src/components/elements/ModalPostagem/index.js b/src/components/elements/ModalPostagem/index.js new file mode 100644 index 0000000..9150a5f --- /dev/null +++ b/src/components/elements/ModalPostagem/index.js @@ -0,0 +1,43 @@ +import React from 'react'; +import { + Modal, + ModalOverlay, + ModalContent, + ModalHeader, + ModalCloseButton, + ModalBody, +} from '@chakra-ui/react'; +import Postagem from '../Postagem'; + +const PostViewModal = ({ + isOpen, + onClose, + post, // Dados da postagem + user, + verifiable, + fetchComments, + onCreateComment, + onToggleSelo, +}) => { + return ( + + + + {post.title} + + + + + + + ); +}; + +export default PostViewModal; diff --git a/src/components/elements/ModalPostagem/styles.js b/src/components/elements/ModalPostagem/styles.js new file mode 100644 index 0000000..19fd7c3 --- /dev/null +++ b/src/components/elements/ModalPostagem/styles.js @@ -0,0 +1,33 @@ +import {Text} from '@chakra-ui/layout'; +import {FiTrash} from 'react-icons/fi'; +import styled from 'styled-components'; + +export const TextAnchor = styled(Text)` + a, + a:link { + text-decoration: underline; + color: var(--chakra-colors-blue-500); + + &:hover { + color: var(--chakra-colors-blue-600); + } + + &:visited { + color: var(--chakra-colors-purple-700); + + &:hover { + color: var(--chakra-colors-purple-800); + } + } + } + white-space: pre-wrap; + word-break: break-word; +`; + +export const FiTrashIcon = styled(FiTrash)` + cursor: pointer; +`; + +export default { + TextAnchor, +}; \ No newline at end of file From 720012c654f2a0541cc4fe1aee7f6e13e8ba951f Mon Sep 17 00:00:00 2001 From: Lucas Molinari <91815333+molhinari@users.noreply.github.com> Date: Wed, 19 Feb 2025 16:49:34 -0300 Subject: [PATCH 2/3] =?UTF-8?q?arrumando=20componente=20Postagem=20-=20n?= =?UTF-8?q?=C3=A3o=20abre=20mais=20modal=20ao=20clicar=20na=20se=C3=A7?= =?UTF-8?q?=C3=A3o=20de=20abrir=20coment=C3=A1rios?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 6 +++--- src/components/elements/Postagem/index.js | 5 ++++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 3eb8b78..22fa4db 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -11,8 +11,8 @@ "editor.codeActionsOnSaveTimeout": 1000, "editor.formatOnSave": false, "editor.codeActionsOnSave": { - "source.fixAll": false, - "source.organizeImports": false, - "source.fixAll.eslint": true + "source.fixAll": "never", + "source.organizeImports": "never", + "source.fixAll.eslint": "explicit" }, } \ No newline at end of file diff --git a/src/components/elements/Postagem/index.js b/src/components/elements/Postagem/index.js index 0f4599e..c7a145c 100644 --- a/src/components/elements/Postagem/index.js +++ b/src/components/elements/Postagem/index.js @@ -286,7 +286,10 @@ const Postagem = ({ py={2} borderTop="1px solid #eee" borderBottom={openComments ? '1px solid #eee' : ''} - onClick={() => setOpenComments(!openComments)}> + onClick={(e) => { + e.stopPropagation(); // Não abrir modal se clicado em comentários + setOpenComments(!openComments); + }}> {numberOfComments > 0 ? `${numberOfComments} Comentários` : 'Comentar'} From 994621cc0d2671ed52d74fa5c94061635497cdb5 Mon Sep 17 00:00:00 2001 From: Lucas Molinari <91815333+molhinari@users.noreply.github.com> Date: Wed, 19 Feb 2025 17:34:52 -0300 Subject: [PATCH 3/3] =?UTF-8?q?atualiza=C3=A7=C3=A3o=20no=20onClick=20da?= =?UTF-8?q?=20lixeira=20-=20agora=20tamb=C3=A9m=20n=C3=A3o=20abre=20o=20mo?= =?UTF-8?q?dal=20ao=20clicar=20no=20bot=C3=A3o=20da=20lixeira?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/elements/Postagem/index.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/components/elements/Postagem/index.js b/src/components/elements/Postagem/index.js index c7a145c..4b50ef5 100644 --- a/src/components/elements/Postagem/index.js +++ b/src/components/elements/Postagem/index.js @@ -243,7 +243,12 @@ const Postagem = ({ {checkIfUserCanDeletePost() ? ( - showDeleteDialog(item.id)} /> + { + e.stopPropagation(); + showDeleteDialog(item.id); + }} + /> ) : null}