| 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); // Trigger fade-out animation | |
| const timer = setTimeout(() => setIsVisible(true), 300); // Match animation duration | |
| return () => clearTimeout(timer); | |
| }, [location]); | |
| return <PageContainer isVisible={isVisible}>{children}</PageContainer>; | |
| }; | |
| export default TransitionWrapper; |