App.tsx 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import React from 'react';
  2. import {
  3. Switch,
  4. Route,
  5. Redirect,
  6. } from 'react-router-dom';
  7. import './App.scss';
  8. import BrokersContainer from './Brokers/BrokersContainer';
  9. import TopicsContainer from './Topics/TopicsContainer';
  10. import NavConatiner from './Nav/NavConatiner';
  11. import PageLoader from './common/PageLoader/PageLoader';
  12. import Dashboard from './Dashboard/Dashboard';
  13. interface AppProps {
  14. isClusterListFetched: boolean;
  15. fetchClustersList: () => void;
  16. }
  17. const App: React.FC<AppProps> = ({
  18. isClusterListFetched,
  19. fetchClustersList,
  20. }) => {
  21. React.useEffect(() => { fetchClustersList() }, [fetchClustersList]);
  22. return (
  23. <div className="Layout">
  24. <nav className="navbar is-fixed-top is-white Layout__header" role="navigation" aria-label="main navigation">
  25. <div className="navbar-brand">
  26. <a className="navbar-item title is-5 is-marginless" href="/">
  27. Kafka UI
  28. </a>
  29. </div>
  30. </nav>
  31. <main className="Layout__container">
  32. <NavConatiner className="Layout__navbar" />
  33. {isClusterListFetched ? (
  34. <Switch>
  35. <Route exact path="/" component={Dashboard} />
  36. <Route path="/clusters/:clusterId/topics" component={TopicsContainer} />
  37. <Route path="/clusters/:clusterId/brokers" component={BrokersContainer} />
  38. <Redirect from="/clusters/:clusterId" to="/clusters/:clusterId/brokers" />
  39. </Switch>
  40. ) : (
  41. <PageLoader />
  42. )}
  43. </main>
  44. </div>
  45. );
  46. }
  47. export default App;