File size: 888 Bytes
8b105ad
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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;