App.tsx 1.4 KB

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