KsqlDb.tsx 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import React from 'react';
  2. import Query from 'components/KsqlDb/Query/Query';
  3. import useAppParams from 'lib/hooks/useAppParams';
  4. import * as Metrics from 'components/common/Metrics';
  5. import {
  6. clusterKsqlDbQueryRelativePath,
  7. clusterKsqlDbStreamsPath,
  8. clusterKsqlDbStreamsRelativePath,
  9. clusterKsqlDbTablesPath,
  10. clusterKsqlDbTablesRelativePath,
  11. ClusterNameRoute,
  12. } from 'lib/paths';
  13. import PageHeading from 'components/common/PageHeading/PageHeading';
  14. import { ActionButton } from 'components/common/ActionComponent';
  15. import Navbar from 'components/common/Navigation/Navbar.styled';
  16. import { Navigate, NavLink, Route, Routes } from 'react-router-dom';
  17. import { Action, ResourceType } from 'generated-sources';
  18. import { useKsqlkDb } from 'lib/hooks/api/ksqlDb';
  19. import 'ace-builds/src-noconflict/ace';
  20. import TableView from './TableView';
  21. const KsqlDb: React.FC = () => {
  22. const { clusterName } = useAppParams<ClusterNameRoute>();
  23. const [tables, streams] = useKsqlkDb(clusterName);
  24. const isFetching = tables.isFetching || streams.isFetching;
  25. return (
  26. <>
  27. <PageHeading text="KSQL DB">
  28. <ActionButton
  29. to={clusterKsqlDbQueryRelativePath}
  30. buttonType="primary"
  31. buttonSize="M"
  32. permission={{
  33. resource: ResourceType.KSQL,
  34. action: Action.EXECUTE,
  35. }}
  36. >
  37. Execute KSQL Request
  38. </ActionButton>
  39. </PageHeading>
  40. <Metrics.Wrapper>
  41. <Metrics.Section>
  42. <Metrics.Indicator
  43. label="Tables"
  44. title="Tables"
  45. fetching={isFetching}
  46. >
  47. {tables.isSuccess ? tables.data.length : '-'}
  48. </Metrics.Indicator>
  49. <Metrics.Indicator
  50. label="Streams"
  51. title="Streams"
  52. fetching={isFetching}
  53. >
  54. {streams.isSuccess ? streams.data.length : '-'}
  55. </Metrics.Indicator>
  56. </Metrics.Section>
  57. </Metrics.Wrapper>
  58. <div>
  59. <Navbar role="navigation">
  60. <NavLink
  61. to={clusterKsqlDbTablesPath(clusterName)}
  62. className={({ isActive }) => (isActive ? 'is-active' : '')}
  63. end
  64. >
  65. Tables
  66. </NavLink>
  67. <NavLink
  68. to={clusterKsqlDbStreamsPath(clusterName)}
  69. className={({ isActive }) => (isActive ? 'is-active' : '')}
  70. end
  71. >
  72. Streams
  73. </NavLink>
  74. </Navbar>
  75. <Routes>
  76. <Route
  77. index
  78. element={<Navigate to={clusterKsqlDbTablesRelativePath} />}
  79. />
  80. <Route
  81. path={clusterKsqlDbTablesRelativePath}
  82. element={
  83. <TableView
  84. fetching={tables.isFetching}
  85. rows={tables.data || []}
  86. />
  87. }
  88. />
  89. <Route
  90. path={clusterKsqlDbStreamsRelativePath}
  91. element={
  92. <TableView
  93. fetching={streams.isFetching}
  94. rows={streams.data || []}
  95. />
  96. }
  97. />
  98. <Route path={clusterKsqlDbQueryRelativePath} element={<Query />} />
  99. </Routes>
  100. </div>
  101. </>
  102. );
  103. };
  104. export default KsqlDb;