|
@@ -1,44 +1,32 @@
|
|
|
-import React, { FC, useEffect } from 'react';
|
|
|
+import React, { FC } from 'react';
|
|
|
import useAppParams from 'lib/hooks/useAppParams';
|
|
|
import * as Metrics from 'components/common/Metrics';
|
|
|
-import PageLoader from 'components/common/PageLoader/PageLoader';
|
|
|
-import ListItem from 'components/KsqlDb/List/ListItem';
|
|
|
-import { useDispatch, useSelector } from 'react-redux';
|
|
|
-import { fetchKsqlDbTables } from 'redux/reducers/ksqlDb/ksqlDbSlice';
|
|
|
+import { useSelector, useDispatch } from 'react-redux';
|
|
|
import { getKsqlDbTables } from 'redux/reducers/ksqlDb/selectors';
|
|
|
-import { clusterKsqlDbQueryRelativePath, ClusterNameRoute } from 'lib/paths';
|
|
|
+import {
|
|
|
+ clusterKsqlDbQueryRelativePath,
|
|
|
+ ClusterNameRoute,
|
|
|
+ clusterKsqlDbStreamsPath,
|
|
|
+ clusterKsqlDbTablesPath,
|
|
|
+ clusterKsqlDbStreamsRelativePath,
|
|
|
+ clusterKsqlDbTablesRelativePath,
|
|
|
+} from 'lib/paths';
|
|
|
import PageHeading from 'components/common/PageHeading/PageHeading';
|
|
|
-import { Table } from 'components/common/table/Table/Table.styled';
|
|
|
-import TableHeaderCell from 'components/common/table/TableHeaderCell/TableHeaderCell';
|
|
|
import { Button } from 'components/common/Button/Button';
|
|
|
-import { KsqlDescription } from 'redux/interfaces/ksqlDb';
|
|
|
-
|
|
|
-export type KsqlDescriptionAccessor = keyof KsqlDescription;
|
|
|
-
|
|
|
-interface HeadersType {
|
|
|
- Header: string;
|
|
|
- accessor: KsqlDescriptionAccessor;
|
|
|
-}
|
|
|
-const headers: HeadersType[] = [
|
|
|
- { Header: 'Type', accessor: 'type' },
|
|
|
- { Header: 'Name', accessor: 'name' },
|
|
|
- { Header: 'Topic', accessor: 'topic' },
|
|
|
- { Header: 'Key Format', accessor: 'keyFormat' },
|
|
|
- { Header: 'Value Format', accessor: 'valueFormat' },
|
|
|
- { Header: 'Is Windowed', accessor: 'isWindowed' },
|
|
|
-];
|
|
|
+import Navbar from 'components/common/Navigation/Navbar.styled';
|
|
|
+import { NavLink, Route, Routes, Navigate } from 'react-router-dom';
|
|
|
+import { fetchKsqlDbTables } from 'redux/reducers/ksqlDb/ksqlDbSlice';
|
|
|
|
|
|
-const accessors = headers.map((header) => header.accessor);
|
|
|
+import KsqlDbItem, { KsqlDbItemType } from './KsqlDbItem/KsqlDbItem';
|
|
|
|
|
|
const List: FC = () => {
|
|
|
- const dispatch = useDispatch();
|
|
|
-
|
|
|
const { clusterName } = useAppParams<ClusterNameRoute>();
|
|
|
+ const dispatch = useDispatch();
|
|
|
|
|
|
const { rows, fetching, tablesCount, streamsCount } =
|
|
|
useSelector(getKsqlDbTables);
|
|
|
|
|
|
- useEffect(() => {
|
|
|
+ React.useEffect(() => {
|
|
|
dispatch(fetchKsqlDbTables(clusterName));
|
|
|
}, [clusterName, dispatch]);
|
|
|
|
|
@@ -68,31 +56,48 @@ const List: FC = () => {
|
|
|
</Metrics.Section>
|
|
|
</Metrics.Wrapper>
|
|
|
<div>
|
|
|
- {fetching ? (
|
|
|
- <PageLoader />
|
|
|
- ) : (
|
|
|
- <Table isFullwidth>
|
|
|
- <thead>
|
|
|
- <tr>
|
|
|
- {headers.map(({ Header, accessor }) => (
|
|
|
- <TableHeaderCell title={Header} key={accessor} />
|
|
|
- ))}
|
|
|
- </tr>
|
|
|
- </thead>
|
|
|
- <tbody>
|
|
|
- {rows.map((row) => (
|
|
|
- <ListItem key={row.name} accessors={accessors} data={row} />
|
|
|
- ))}
|
|
|
- {rows.length === 0 && (
|
|
|
- <tr>
|
|
|
- <td colSpan={headers.length + 1}>
|
|
|
- No tables or streams found
|
|
|
- </td>
|
|
|
- </tr>
|
|
|
- )}
|
|
|
- </tbody>
|
|
|
- </Table>
|
|
|
- )}
|
|
|
+ <Navbar role="navigation">
|
|
|
+ <NavLink
|
|
|
+ to={clusterKsqlDbTablesPath(clusterName)}
|
|
|
+ className={({ isActive }) => (isActive ? 'is-active' : '')}
|
|
|
+ end
|
|
|
+ >
|
|
|
+ Tables
|
|
|
+ </NavLink>
|
|
|
+ <NavLink
|
|
|
+ to={clusterKsqlDbStreamsPath(clusterName)}
|
|
|
+ className={({ isActive }) => (isActive ? 'is-active' : '')}
|
|
|
+ end
|
|
|
+ >
|
|
|
+ Streams
|
|
|
+ </NavLink>
|
|
|
+ </Navbar>
|
|
|
+ <Routes>
|
|
|
+ <Route
|
|
|
+ index
|
|
|
+ element={<Navigate to={clusterKsqlDbTablesRelativePath} />}
|
|
|
+ />
|
|
|
+ <Route
|
|
|
+ path={clusterKsqlDbTablesRelativePath}
|
|
|
+ element={
|
|
|
+ <KsqlDbItem
|
|
|
+ type={KsqlDbItemType.Tables}
|
|
|
+ fetching={fetching}
|
|
|
+ rows={rows}
|
|
|
+ />
|
|
|
+ }
|
|
|
+ />
|
|
|
+ <Route
|
|
|
+ path={clusterKsqlDbStreamsRelativePath}
|
|
|
+ element={
|
|
|
+ <KsqlDbItem
|
|
|
+ type={KsqlDbItemType.Streams}
|
|
|
+ fetching={fetching}
|
|
|
+ rows={rows}
|
|
|
+ />
|
|
|
+ }
|
|
|
+ />
|
|
|
+ </Routes>
|
|
|
</div>
|
|
|
</>
|
|
|
);
|