diff --git a/CHANGELOG.md b/CHANGELOG.md index c3e6921f31b919f58ae4ee618bef72c961e2fd07..42058fcc4a344c36131c8ab4caa23dd95d802dcd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ Todas as alterações relevantes deste projeto serão documentadas neste arquivo O formato é baseado em [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), e este projeto segue a [Versão Semântica](https://semver.org/lang/pt-BR/spec/v2.0.0.html). -## [1.13.0] - 19/05/2025 +## [1.13.1] - 19/05/2025 ## Todas as mudanças são introduzidas às sextas-feiras. Mas apenas nas **segundas-feiras** vão para produção. ### Adiconado @@ -13,6 +13,11 @@ e este projeto segue a [Versão Semântica](https://semver.org/lang/pt-BR/spec/v ### Corrigido - Slides da tela de sobre não possuem mais scrolls. + - Botão de fechar pesquisa no mobile. + - Link de compartilhar recurso não volta mais undefined. + - Botão de seguir da tela de coleção agora corresponde ao status correto. + - Usuário não consegue mais se auto-seguir. + - Uusário não pode se auto-reportar mais. ## [1.12.0] - 14/05/2025 ## Todas as mudanças são introduzidas às sextas-feiras. Mas apenas nas **segundas-feiras** vão para produção. diff --git a/package.json b/package.json index 8ccffb7a4ad8deccbd5a474c4432a3713a32078e..d5f33b7e98bce2d662e9b71f7be6bffbd4e2c285 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "frontend-mecred", - "version": "1.13.0", + "version": "1.13.1", "private": true, "scripts": { "dev": "npx next dev", diff --git a/src/app/colecao/[id]/components/publisherInfoCollection.js b/src/app/colecao/[id]/components/publisherInfoCollection.js index 8c8ac1b2536fc529e57899c5bab2d6e8b87f4dd5..cda07b95ff03addcbeffa77681683e9a64f3f9fa 100644 --- a/src/app/colecao/[id]/components/publisherInfoCollection.js +++ b/src/app/colecao/[id]/components/publisherInfoCollection.js @@ -3,9 +3,11 @@ import { useLoginBarrier } from "@/app/handlers/loginHandler"; import { useState, useEffect } from "react"; import mecredApi, { mecredURL } from "@/axiosConfig"; import { getStoredValue } from "@/app/handlers/localStorageHandler"; +import { isLoggedIn } from "@/app/handlers/loginHandler"; export default function PublisherInfoCollection({ publisher, disabledButton = false }) { const [followed, setFollowed] = useState(false); + const [error, setError] = useState(false); const loginBarrier = useLoginBarrier(); const token = getStoredValue("access_token") diff --git a/src/app/colecao/[id]/page.js b/src/app/colecao/[id]/page.js index 4ef56f1beff4765ed49d768fb1f79a8103dd2e82..47f00e45c8119b2d80d9ce39528bada1a7ea63c1 100644 --- a/src/app/colecao/[id]/page.js +++ b/src/app/colecao/[id]/page.js @@ -19,7 +19,6 @@ export default function Colecao({ params }) { const [needLoginOpen, setNeedLoginOpen] = useState(false); const [error, setError] = useState(false); const [isSmallScreen, setIsSmallScreen] = useState(false); - const token = getStoredValue("access_token"); const client = getStoredValue("client"); const uid = getStoredValue("uid"); @@ -39,8 +38,7 @@ export default function Colecao({ params }) { }; } - const response = await mecredApi.get(`collections/${params.id}`); - + const response = await mecredApi.get(`collections/${params.id}`, {headers}); setCollection(response.data); } catch (error) { setError(true); diff --git a/src/app/components/Header.js b/src/app/components/Header.js index 677d6e1c10f4fc831ee13cf6a3b67ae384f9e490..65776f76b33f5ebe42a1e07a8675f4dda720e73f 100644 --- a/src/app/components/Header.js +++ b/src/app/components/Header.js @@ -143,17 +143,26 @@ export default function Header({ setFilterState, filterState, mobileSearch }) { const [needLoginOpen, setNeedLoginOpen] = useState(false); const [mobileSearchOpen, setMobileSearchOpen] = useState(false); + useEffect(() => { + if (mobileSearch.searchIsClicked) { + setMobileSearchOpen(true); + } + }, [mobileSearch.searchIsClicked]); + + + // Função para alternar a exibição da pesquisa no mobile const handleToggleMobileSearch = () => { setTimeout(() => { setMobileSearchOpen((curr) => !curr); - }, 100); + mobileSearch.setSearchIsClicked(false); // limpa depois de usar + }, 50); }; return ( <div className="fixed flex items-center max-md:h-[70px] h-[120px] top-[35px] max-md:top-[0px] z-50 shadow-none w-screen bg-fundo bg-repeat bg-fixed"> <div className="flex flex-grow gap-3 sm:gap-12 justify-between "> - {mobileSearchOpen || mobileSearch.searchIsClicked ? ( + {mobileSearchOpen ? ( <MobileSearch handleToggleMobileSearch={handleToggleMobileSearch} setFilterState={setFilterState} filterState={filterState} /> ) : ( <DefaultContent diff --git a/src/app/components/ShareModal.js b/src/app/components/ShareModal.js index 2dd0f1e854d396cd95e384c7fc10d58c894b89c9..d30c8c3f2f4e9e2fbe657edd96b5f03b720f9347 100644 --- a/src/app/components/ShareModal.js +++ b/src/app/components/ShareModal.js @@ -10,24 +10,22 @@ import SendOutlinedIcon from "@mui/icons-material/SendOutlined"; * @param {String} props.title Título do compartilhamento * @param {String} props.link URL a ser compartilhada */ -export default function ShareModal({ open, onClose, title, link }) { +export default function ShareModal({ open, onClose, title, id }) { const [clicked, setClicked] = useState(false); - + const baseUrl = typeof window !== 'undefined' ? window.location.origin : ''; + const link = `${baseUrl}/recurso/${id}`; // Gera o link dinâmico baseado no tipo e ID + useEffect(() => { setClicked(false); }, [open]); - function shareLink() { - if (navigator.share) { + const shareLink = () => { navigator.share({ title: title, url: link, }) .then(() => console.log("Compartilhamento realizado com sucesso")) .catch((error) => console.error("Erro ao compartilhar:", error)); - } else { - console.error("Compartilhamento nativo não suportado"); - } } return ( @@ -76,7 +74,7 @@ export default function ShareModal({ open, onClose, title, link }) { <span>Enviar</span> </Button> </div> - ) : ""} + ) : ""} </div> <div className="flex justify-center"> <button diff --git a/src/app/components/publisherInfo.js b/src/app/components/publisherInfo.js index 80f8dcfbac1ba5ce961cae50ff1f6d1664d6bb35..7d9b837aa24d479f4917b7b973f893707dfe25c7 100644 --- a/src/app/components/publisherInfo.js +++ b/src/app/components/publisherInfo.js @@ -4,8 +4,9 @@ import { useState, useEffect } from "react"; import mecredApi, { mecredURL } from "@/axiosConfig"; import { getStoredValue } from "@/app/handlers/localStorageHandler"; -export default function PublisherInfo({ publisher, disabledButton = false }) { +export default function PublisherInfo({ publisher, disabledButton = false, userId }) { const [followed, setFollowed] = useState(false); + const [isPublisher, setIsPublisher] = useState(false); const loginBarrier = useLoginBarrier(); const token = getStoredValue("access_token") @@ -14,8 +15,8 @@ export default function PublisherInfo({ publisher, disabledButton = false }) { useEffect(() => { setFollowed(publisher?.followed ?? false); + setIsPublisher(publisher["id"] === userId ? true : false) }, [publisher]); - if (!publisher) { return <></>; } @@ -58,8 +59,8 @@ export default function PublisherInfo({ publisher, disabledButton = false }) { <> <Paper className="bg-white-HC-dark outline outline-1 outline-ice-HC-white shadow-none flex flex-shrink-0 rounded-xl p-1 m-1 normal-case text-sm font-bold max-sm:flex-col"> <Button href={`/perfil/${publisher.id}`} > - <div className="flex flex-row truncate"> - {publisher?.avatar ? ( + <div className="flex flex-row truncate"> + {publisher?.avatar ? ( <Avatar fill="true" src={mecredURL + publisher.avatar} @@ -67,18 +68,18 @@ export default function PublisherInfo({ publisher, disabledButton = false }) { title={publisher.name} className="m-4" /> - ) : ( - <div className={`flex items-center justify-center text-xl m-2 font-bold text-ice-HC-dark rounded-full h-10 w-10 ${getRandomBg(publisher.id)}`} >{publisher.name[0]}</div> - )} - <div className="flex flex-col justify-center p-1 text-darkGray-HC-white-underline truncate"> - <div className="font-bold text-lg truncate sm:text-wrap"> - {publisher.name} - </div> - <div className="font-normal text-md truncate "> - {publisher.description} + ) : ( + <div className={`flex items-center justify-center text-xl m-2 font-bold text-ice-HC-dark rounded-full h-10 w-10 ${getRandomBg(publisher.id)}`} >{publisher.name[0]}</div> + )} + <div className="flex flex-col justify-center p-1 text-darkGray-HC-white-underline truncate"> + <div className="font-bold text-lg truncate sm:text-wrap"> + {publisher.name} + </div> + <div className="font-normal text-md truncate "> + {publisher.description} + </div> </div> </div> - </div> </Button> <div className="flex justify-end flex-grow flex-shrink-0 p-3 truncate max-sm:justify-start"> <Button @@ -88,14 +89,17 @@ export default function PublisherInfo({ publisher, disabledButton = false }) { > Ver Perfil </Button> - <Button - disabled={disabledButton} - onClick={followHandler} - variant="outlined" - className="bg-turquoise-HC-white h-12 text-white-HC-dark-underline hover:text-white-HC-underline hover:bg-darkTurquoise-HC-dark border-1 border-transparent hover:border-turquoise-HC-white shadow-none rounded-xl m-1 px-2 sm:px-8 normal-case font-bold" - > - {followed ? "Seguindo" : "Seguir"} - </Button> + {!isPublisher ? + <Button + disabled={disabledButton} + onClick={followHandler} + variant="outlined" + className="bg-turquoise-HC-white h-12 text-white-HC-dark-underline hover:text-white-HC-underline hover:bg-darkTurquoise-HC-dark border-1 border-transparent hover:border-turquoise-HC-white shadow-none rounded-xl m-1 px-2 sm:px-8 normal-case font-bold" + > + {followed ? "Seguindo" : "Seguir"} + </Button> + : "" + } </div> </Paper> </> diff --git a/src/app/recurso/[id]/components/actionButtons.js b/src/app/recurso/[id]/components/actionButtons.js index 4ee38dc572a0943560f19aea999c65d01d1a38c7..e593392758752c47500f906d18795f4159339aae 100644 --- a/src/app/recurso/[id]/components/actionButtons.js +++ b/src/app/recurso/[id]/components/actionButtons.js @@ -144,6 +144,7 @@ export default function ActionButtons({ learningObject, setNeedLoginOpen, state extraProps: {}, }, // Botão de Reportar + userData.id === learningObject.publisher.id ? null : { name: reported ? "Reportado" : "Reportar", icon: reported ? <FlagIcon /> : <FlagOutlinedIcon />, @@ -193,7 +194,7 @@ export default function ActionButtons({ learningObject, setNeedLoginOpen, state <> <DeleteModal open={deleteOpen} onClose={() => setDeleteOpen(false)} idLogin={userData["id"]} resourceId={learningObject.id} /> <HomologationModal open={submitOpen} onClose={() => setSubmitOpen(false)} name={learningObject.name} id={learningObject.submission_id} setSubmitted={setSubmitted}/> - <ShareModal open={shareOpen} onClose={() => setShareOpen(false)} /> + <ShareModal open={shareOpen} onClose={() => setShareOpen(false)} id={learningObject.id} /> <ReportModal learningObject={learningObject} open={reportOpen} diff --git a/src/app/recurso/[id]/page.js b/src/app/recurso/[id]/page.js index 48b2a35191c0c5f1562f8be70266447c00e9d286..4995e06637c4882a17239c020555e147e340ba01 100644 --- a/src/app/recurso/[id]/page.js +++ b/src/app/recurso/[id]/page.js @@ -67,7 +67,6 @@ export default function Recurso({ params }) { fetchData(); }, [params.id, client, token, uid]); - useEffect(() => { setComplained(learningObject?.state === "suspended"); }, [learningObject]); @@ -137,7 +136,7 @@ export default function Recurso({ params }) { )} </div> <ActionButtons learningObject={learningObject} setNeedLoginOpen={setNeedLoginOpen} state={state} /> - <PublisherInfo publisher={learningObject?.publisher} /> + <PublisherInfo publisher={learningObject?.publisher} userId={userData.id} /> <ResourceInfo learningObject={learningObject} /> <Comments learningObjectId={params.id} /> </div>