App.tsx 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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 exact path="/clusters" component={Dashboard} />
  37. <Route path="/clusters/:clusterId/topics" component={TopicsContainer} />
  38. <Route path="/clusters/:clusterId/brokers" component={BrokersContainer} />
  39. <Redirect from="/clusters/:clusterId" to="/clusters/:clusterId/brokers" />
  40. </Switch>
  41. ) : (
  42. <PageLoader />
  43. )}
  44. </main>
  45. </div>
  46. );
  47. }
  48. export default App;