|
@@ -2,60 +2,47 @@ import React from 'react';
|
|
import {
|
|
import {
|
|
Switch,
|
|
Switch,
|
|
Route,
|
|
Route,
|
|
- NavLink,
|
|
|
|
} from 'react-router-dom';
|
|
} from 'react-router-dom';
|
|
import './App.scss';
|
|
import './App.scss';
|
|
import TopicsContainer from './Topics/TopicsContainer';
|
|
import TopicsContainer from './Topics/TopicsContainer';
|
|
|
|
+import NavConatiner from './Nav/NavConatiner';
|
|
|
|
+import PageLoader from './common/PageLoader/PageLoader';
|
|
|
|
|
|
-const App: React.FC = () => {
|
|
|
|
- const [expandedNavbar, setExpandedNavbar] = React.useState<boolean>(false);
|
|
|
|
- const toggleNavbar = () => setExpandedNavbar(!expandedNavbar);
|
|
|
|
|
|
+interface AppProps {
|
|
|
|
+ isClusterListFetched: boolean;
|
|
|
|
+ fetchClustersList: () => void;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+const App: React.FC<AppProps> = ({
|
|
|
|
+ isClusterListFetched,
|
|
|
|
+ fetchClustersList,
|
|
|
|
+}) => {
|
|
|
|
+ React.useEffect(() => { fetchClustersList() }, [fetchClustersList]);
|
|
|
|
|
|
return (
|
|
return (
|
|
<div className="Layout">
|
|
<div className="Layout">
|
|
- <aside className={`Layout__navbar ${expandedNavbar && 'Layout__navbar--expanded'}`}>
|
|
|
|
- <header className="Layout__logo">
|
|
|
|
- Kafka UI
|
|
|
|
- </header>
|
|
|
|
- <div className="menu">
|
|
|
|
- <ul className="menu-list">
|
|
|
|
- <li>
|
|
|
|
- <NavLink exact to="/" activeClassName="is-active">
|
|
|
|
- <i className="fas fa-tachometer-alt Layout__navbarIcon"></i>
|
|
|
|
- <span className="Layout__navbarText">
|
|
|
|
- Dashboard
|
|
|
|
- </span>
|
|
|
|
- </NavLink>
|
|
|
|
- </li>
|
|
|
|
- <li>
|
|
|
|
- <NavLink to="/topics" activeClassName="is-active">
|
|
|
|
- <i className="fas fa-stream Layout__navbarIcon"></i>
|
|
|
|
- <span className="Layout__navbarText">
|
|
|
|
- Topics
|
|
|
|
- </span>
|
|
|
|
- </NavLink>
|
|
|
|
- </li>
|
|
|
|
- </ul>
|
|
|
|
|
|
+ <nav className="navbar is-fixed-top is-white Layout__header" role="navigation" aria-label="main navigation">
|
|
|
|
+ <div className="navbar-brand">
|
|
|
|
+ <a className="navbar-item title is-5 is-marginless" href="/">
|
|
|
|
+ Kafka UI
|
|
|
|
+ </a>
|
|
</div>
|
|
</div>
|
|
- </aside>
|
|
|
|
|
|
+ </nav>
|
|
<main className="Layout__container">
|
|
<main className="Layout__container">
|
|
- <nav className="Layout__header navbar">
|
|
|
|
- <div className="navbar-item">
|
|
|
|
- <a title="Collapse" href="#" onClick={toggleNavbar}>
|
|
|
|
- <span className="icon">
|
|
|
|
- <i className="icon fas fa-bars"></i>
|
|
|
|
- </span>
|
|
|
|
- </a>
|
|
|
|
- </div>
|
|
|
|
- </nav>
|
|
|
|
- <div className="Layout__content">
|
|
|
|
- <Switch>
|
|
|
|
- <Route path="/topics" component={TopicsContainer} />
|
|
|
|
- <Route exact path="/">
|
|
|
|
- Dashboard
|
|
|
|
- </Route>
|
|
|
|
- </Switch>
|
|
|
|
- </div>
|
|
|
|
|
|
+ <NavConatiner className="Layout__navbar" />
|
|
|
|
+ {isClusterListFetched ? (
|
|
|
|
+ <section className="section">
|
|
|
|
+ <Switch>
|
|
|
|
+ <Route path="/clusters/:clusterId/topics" component={TopicsContainer} />
|
|
|
|
+ <Route exact path="/">
|
|
|
|
+ Dashboard
|
|
|
|
+ </Route>
|
|
|
|
+ </Switch>
|
|
|
|
+ </section>
|
|
|
|
+ ) : (
|
|
|
|
+ <PageLoader />
|
|
|
|
+ )}
|
|
|
|
+
|
|
</main>
|
|
</main>
|
|
</div>
|
|
</div>
|
|
);
|
|
);
|