Skip to content
Snippets Groups Projects
App.tsx 1.83 KiB
Newer Older
Tianyi Liang's avatar
Tianyi Liang committed
import "./App.css";
import "bootstrap/dist/css/bootstrap.min.css";
Xingan Zhao's avatar
Xingan Zhao committed
import 'bootstrap/dist/js/bootstrap.bundle.min.js';  // 引入 Bootstrap JavaScript
Tianyi Liang's avatar
Tianyi Liang committed
import { Route, Routes } from "react-router-dom";
import { Footer, Header, Navbar, NotFound } from "../../components";
Kamile Liucija Vainiute's avatar
Kamile Liucija Vainiute committed
import { getPathMapping, stringToSlug } from "../../utils";
Tianyi Liang's avatar
Tianyi Liang committed
import { useEffect } from "react";
Tianyi Liang's avatar
Tianyi Liang committed

const App = () => {
  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";
Tianyi Liang's avatar
Tianyi Liang committed

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

  return (
Tianyi Liang's avatar
Tianyi Liang committed
    <>
      {/* Navigation */}
      <Navbar />
Tianyi Liang's avatar
Tianyi Liang committed

Tianyi Liang's avatar
Tianyi Liang committed
      {/* Header and PageContent */}
      <Routes>
        {Object.entries(pathMapping).map(
Xingan Zhao's avatar
Xingan Zhao committed
          ([path, {component: Component }]) => (
Tianyi Liang's avatar
Tianyi Liang committed
            <Route
              key={path}
              path={path}
              element={
                <>
                  {/* <Header title={title || ""} lead={lead || ""} /> */}
                  <div className="container-fluid">
Tianyi Liang's avatar
Tianyi Liang committed
                    <Component />
                  </div>
                </>
              }
            />
          ),
        )}
        <Route
          path="*"
          element={
            <>
              <Header
                title="Not Found"
                lead="The requested URL was not found on this server."
Tianyi Liang's avatar
Tianyi Liang committed
              />
Tianyi Liang's avatar
Tianyi Liang committed
              <NotFound />
            </>
          }
        />
      </Routes>
Tianyi Liang's avatar
Tianyi Liang committed

Tianyi Liang's avatar
Tianyi Liang committed
      {/* Footer */}
      {/* MUST mention license AND have a link to team wiki's repository on gitlab.igem.org */}
      <Footer />
    </>
Tianyi Liang's avatar
Tianyi Liang committed
  );
};

export default App;