|
import React, { useEffect, useState } from "react"; |
|
import { useLocation } from "react-router-dom"; |
|
import styled from "styled-components"; |
|
|
|
const PageContainer = styled.div` |
|
position: relative; |
|
width: 100%; |
|
height: 100%; |
|
opacity: ${(props) => (props.isVisible ? 1 : 0)}; |
|
transform: ${(props) => (props.isVisible ? "translateY(0)" : "translateY(10px)")}; |
|
transition: opacity 0.3s ease, transform 0.3s ease; |
|
`; |
|
|
|
const TransitionWrapper = ({ children }) => { |
|
const location = useLocation(); |
|
const [isVisible, setIsVisible] = useState(true); |
|
|
|
useEffect(() => { |
|
setIsVisible(false); |
|
const timer = setTimeout(() => setIsVisible(true), 300); |
|
return () => clearTimeout(timer); |
|
}, [location]); |
|
|
|
return <PageContainer isVisible={isVisible}>{children}</PageContainer>; |
|
}; |
|
|
|
export default TransitionWrapper; |