Skip to content
Snippets Groups Projects
App.tsx 1.36 KiB
Newer Older
import { createBrowserRouter, RouterProvider } from 'react-router-dom';
import { useState, useEffect } from 'react';
import { BucketInfo } from './models/bucket';
import { BucketBrowser } from './routes/BucketBrowser';
import { staticRouts } from './routes';
import APIService from './services/APIService';
import { BucketsListContext } from './services/BucketListContext';
Jacopo Gasparetto's avatar
Jacopo Gasparetto committed

function App() {

  const [isAuthenticated, setIsAuthenticated] = useState(false);
  const [bucketList, setBucketLists] = useState<BucketInfo[]>([]);

  useEffect(() => {
    setIsAuthenticated(APIService.isAuthenticated());
    APIService
      .get("buckets")
      .then(data => {
        const buckets: BucketInfo[] = data["buckets"];
        console.log(`Fetched ${buckets.length} buckets`);
        setBucketLists(buckets);
      });
  }, [isAuthenticated]);

  let routes = staticRouts.map(route => {
    return {
      path: route.path,
      element: route.element
    }
  });

  routes.push(...bucketList.map(bucketInfo => {
    return {
      path: "/" + bucketInfo.name,
      element: <BucketBrowser bucketName={bucketInfo.name} />
    }
  }));

  const router = createBrowserRouter(routes);
Jacopo Gasparetto's avatar
Jacopo Gasparetto committed
  return (
    <div className="flex mb-4">
      <BucketsListContext.Provider value={bucketList}>
        <RouterProvider router={router} />
      </BucketsListContext.Provider>
Jacopo Gasparetto's avatar
Jacopo Gasparetto committed
    </div>
  )
}

export default App;