11import { BrowserRouter , Routes , Route } from "react-router-dom" ;
22import { useState , useEffect } from "react" ;
3+ import { motion } from "framer-motion" ;
34import Home from "./pages/Home" ;
45import About from "./pages/About" ;
56import NotFound from "./pages/404" ;
@@ -10,37 +11,44 @@ import Base from "./layouts/Base";
1011import Subscribe from "./components/Subscribe" ;
1112import Loader from "./components/Loader" ;
1213
13- export default function App ( ) {
14- const [ isVisible , setIsVisible ] = useState ( false ) ;
14+ // Custom hook to handle the loader
15+ const useLoader = ( duration = 1500 ) => {
1516 const [ loading , setLoading ] = useState ( true ) ;
16-
1717 useEffect ( ( ) => {
18- const timer = setTimeout ( ( ) => {
19- setLoading ( false ) ;
20- } , 1500 ) ; // Adjusted loader time to 1.5 seconds for smoother transition
18+ const timer = setTimeout ( ( ) => setLoading ( false ) , duration ) ;
19+ return ( ) => clearTimeout ( timer ) ; // This is the cleanup timer
20+ } , [ duration ] ) ;
21+ return loading ;
22+ } ;
2123
22- return ( ) => clearTimeout ( timer ) ; // Cleaning up timer
23- } , [ ] ) ;
24-
25- const handleSetVisible = ( value ) => setIsVisible ( value ) ;
24+ export default function App ( ) {
25+ const [ isVisible , setVisible ] = useState ( false ) ;
26+ const loading = useLoader ( ) ; // Loader logic
2627
2728 return (
2829 < div className = "bg-primary" >
29- { isVisible && < Subscribe handle = { handleSetVisible } /> }
30- < Loader loading = { loading } />
30+ { isVisible && < Subscribe handle = { setVisible } /> }
31+ { loading && < Loader loading = { loading } /> }
3132 { ! loading && (
32- < BrowserRouter >
33- < Base >
34- < Routes >
35- < Route path = "/" element = { < Home handle = { handleSetVisible } /> } />
36- < Route path = "/about-us" element = { < About handle = { handleSetVisible } /> } />
37- < Route path = "/community" element = { < Community /> } />
38- < Route path = "/events" element = { < Events /> } />
39- < Route path = "/contact-us" element = { < ContactForm /> } />
40- < Route path = "*" element = { < NotFound /> } />
41- </ Routes >
42- </ Base >
43- </ BrowserRouter >
33+ < motion . div
34+ initial = { { filter : "blur(10px)" } }
35+ animate = { { filter : "blur(0px)" } }
36+ transition = { { duration : 0.5 } }
37+ className = "transition-all duration-400"
38+ >
39+ < BrowserRouter >
40+ < Base >
41+ < Routes >
42+ < Route path = "/" element = { < Home handle = { setVisible } /> } />
43+ < Route path = "/about-us" element = { < About handle = { setVisible } /> } />
44+ < Route path = "/community" element = { < Community /> } />
45+ < Route path = "/events" element = { < Events /> } />
46+ < Route path = "/contact-us" element = { < ContactForm /> } />
47+ < Route path = "*" element = { < NotFound /> } />
48+ </ Routes >
49+ </ Base >
50+ </ BrowserRouter >
51+ </ motion . div >
4452 ) }
4553 </ div >
4654 ) ;
0 commit comments