Meu modal esta estilizado e funciona quase tudo certo, o problema esta na hora que eu fecho a imagem, quando eu clico para fechar, a imagem some mas a tela fica presa com o overlay, tenho que recarregar a pagina, alguém sabe onde esta o problema?
ModalZoom
import React from 'react'
import Card from '../Card';
import styled from 'styled-components';
const Overlay = styled.div`
background-color: rgba(0, 0, 0, 0.7);
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
`
const DialogEstilizado = styled.dialog`
position: absolute;
top: 294px;
padding: 0;
background: transparent;
border: transparent;
`
const ButtonEstilizado = styled.button`
background: rgba(0, 0, 0, 0.7);
border-radius: 20px;
border: transparent;
position: absolute;
top: 0;
right: 0;
img {
width: 32px;
height: 32px;
}
`
function ModalZoom({ foto }) {
return (
<>
{foto && <>
<Overlay />
<DialogEstilizado open={!!foto}>
<Card foto={foto} expandida={true} />
<form method="dialog">
<ButtonEstilizado>
<img src="/icones/fechar.png"/>
</ButtonEstilizado>
</form>
</DialogEstilizado>
</>}
</>
)
}
export default ModalZoom;
Card (o componente imagem do professor)
import styled from "styled-components";
const CardEstilizado = styled.figure`
display: flex;
flex-direction: column;
margin: 0;
`
const ImgEstilizado = styled.img`
width: ${props => props.$expandida ? "1156px" : "448px"};
border-radius: 20px 20px 0 0;
`
const FigcaptionEstilizado = styled.figcaption`
background-color: #001634;
border-radius: 0 0 20px 20px;
`
const H2Estilizado = styled.h2`
color: #FFF;
font-size: 20px;
font-weight: 700;
font-style: normal;
line-height: normal;
margin-top: 16px;
margin-left: 21px;
margin-bottom: 2px;
`
const CardInfoEstilizado = styled.div`
display: flex;
justify-content: space-between;
align-items: center;
width: ${props => props.$expandida ? "1156" : "448"};
`
const H4Estilizado = styled.h4`
color: #FFF;
font-size: 16px;
font-weight: 400;
font-style: normal;
line-height: normal;
margin-left: 21px;
margin-bottom: 16px;
margin-top: 2px;
`
const DivIconesEstilizado = styled.div`
display: flex;
gap: 24px;
margin-right: 16px;
margin-bottom: 16px;
`
const ButtonEstilizado = styled.button`
background: transparent;
border: transparent;
`
const IconeEstilizado = styled.img`
height: 24px;
width: 24px;
`
const Card = ({ foto, expandida = false, aoZoomSolicitado }) => {
return (
<CardEstilizado>
<ImgEstilizado $expandida={expandida} src={foto.path} />
<FigcaptionEstilizado>
<H2Estilizado>{foto.titulo}</H2Estilizado>
<CardInfoEstilizado $expandida={expandida}>
<H4Estilizado>{foto.fonte}</H4Estilizado>
<DivIconesEstilizado>
<ButtonEstilizado>
<IconeEstilizado src="/icones/favorito.png" alt="" />
</ButtonEstilizado>
{!expandida && <ButtonEstilizado aria-hidden={expandida} onClick={() => aoZoomSolicitado(foto)}>
<IconeEstilizado src="/icones/expandir.png" alt="" />
</ButtonEstilizado>}
</DivIconesEstilizado>
</CardInfoEstilizado>
</FigcaptionEstilizado>
</CardEstilizado>
)
}
export default Card;
Galeria
import styled from "styled-components";
import Titulo from "../Titulo";
import Tags from "./Tags";
import Populares from "./Populares";
import Card from "../Card";
const GaleriaContainer = styled.div`
display: flex;
`
const SecaoFluida = styled.section`
flex-grow: 1;
`
const FigureContainer = styled.figure`
display: flex;
flex-wrap: wrap;
gap: 16px;
margin: 0;
`
const Galeria = ({fotos = [], aoFotoSelecionada}) => {
return (
<>
<Tags />
<GaleriaContainer>
<SecaoFluida>
<Titulo>Navegue pela galeria</Titulo>
<FigureContainer>
{fotos.map(foto => <Card aoZoomSolicitado={aoFotoSelecionada} key={foto.id} foto={foto}/>)}
</FigureContainer>
</SecaoFluida>
<Populares />
</GaleriaContainer>
</>
)
}
export default Galeria;