App.tsx 2.0 KB

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