Skip to content
Snippets Groups Projects
App.tsx 3.83 KiB
Newer Older
import { useEffect, useState } from "react";
import "./App.css";
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
import "./HP.css"
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
import "./mediarules.css"
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
import "./Timelines.css";
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
import '../App/Graph.css'; 
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
import '../components/test.css'
import "./LandingPage.css"
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
import "../contents/example.css"
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
import 'beautiful-react-diagrams/styles.css';
import "bootstrap/dist/css/bootstrap.min.css";
Asal Sahami Moghaddam's avatar
Asal Sahami Moghaddam committed
import "./Graph.css"
import LoadingScreen from "../components/LoadingScreen.tsx";
import { Routes, Route } from "react-router-dom";
import { Footer } from "../components/Footer.tsx";
import { NotFound } from "../components/NotFound.tsx";
import { Navbar } from "../components/Navbar.tsx";
import { getPathMapping } from "../utils/getPathMapping.ts";
import { stringToSlug } from "../utils/stringToSlug.ts";
import { Villbuttonrow } from "../components/Buttons.tsx";
Asal Sahami Moghaddam's avatar
Asal Sahami Moghaddam committed
import "../utils/Highlight-functions.js";
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
import "./LoadingScreen.css";
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
import { useScroll, motion } from "framer-motion";
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
import "./calendar.css"
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
  const { scrollYProgress } = useScroll({
    offset: ["start start", "end end"],
  });

  const [isLoading, setIsLoading] = useState(true);
  const pathMapping = getPathMapping();
  const currentPath =
    location.pathname
      .split(`${stringToSlug(import.meta.env.VITE_TEAM_NAME)}`)
      .pop() || "/";

  // Set Page Title
  const title =
    currentPath in pathMapping ? pathMapping[currentPath].title : "Not Found";

  useEffect(() => {
    document.title = `${title || ""} | ${import.meta.env.VITE_TEAM_NAME} - iGEM ${import.meta.env.VITE_TEAM_YEAR}`;
  }, [title]);

  useEffect(() => {
    const timer = setTimeout(() => {
      console.log("Hiding loading screen");
      setIsLoading(false);
    }, 0); // Adjust the delay as needed, Update the loading state after 3 seconds
    return () => {
      console.log("Cleaning up timer");
      clearTimeout(timer);  // Clear the timer on component unmount
    };
  }, []);
    {isLoading ? (
      <LoadingScreen />
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
      
      {/* Navigation */}
      <Navbar />
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
      <motion.div
        className="progress-bar"
        style={{ scaleX: scrollYProgress }}
      />
      {/* Header and PageContent */}
      <Routes>
        {Object.entries(pathMapping).map(([path, { header: Header, component: Component, navlist: Sidebar }]) => (
          <Route
            key={path}
            path={path}
            element={
              <>
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
                
                <Header />
                {/* Page content */}
                <div className="container-fluid">
                  <div className="row">
                    <Sidebar />
                    <div className="col">
                      <Component />
                      <Villbuttonrow />
                    <div className="col-1 d-none d-lg-block">
                      {/* <!-- empty!--> */}
                    </div>
                  </div>
                </div>
                {/* End page content */}
              </>
            }
          />
        ))}
        {/* Add a route for the Description component */}
        <Route
          path="/description"
          element={
            <>
              {/* Page content */}
              <div className="container-fluid">
                <div className="row">
                  <div className="col">
                    <Villbuttonrow />
                  </div>
                  <div className="col-1 d-none d-lg-block">
                    {/* <!-- empty!--> */}
                  </div>
                </div>
              </div>
            </>
          }
        />

        <Route
          path="*"
          element={
            <>
              <NotFound />
            </>
          }
        />
      </Routes>
      {/* Footer */}
      <Footer />
Asal Sahami Moghaddam's avatar
Asal Sahami Moghaddam committed
export default App;