ClusterMenu.tsx 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import React from 'react';
  2. import { Cluster, ClusterFeaturesEnum } from 'generated-sources';
  3. import {
  4. clusterBrokersPath,
  5. clusterTopicsPath,
  6. clusterConsumerGroupsPath,
  7. clusterSchemasPath,
  8. clusterConnectorsPath,
  9. clusterConnectsPath,
  10. clusterKsqlDbPath,
  11. } from 'lib/paths';
  12. import ClusterMenuItem from './ClusterMenuItem';
  13. import ClusterTab from './ClusterTab/ClusterTab';
  14. import * as S from './Nav.styled';
  15. interface Props {
  16. cluster: Cluster;
  17. singleMode?: boolean;
  18. }
  19. const ClusterMenu: React.FC<Props> = ({
  20. cluster: { name, status, features },
  21. singleMode,
  22. }) => {
  23. const hasFeatureConfigured = (key: ClusterFeaturesEnum) =>
  24. features?.includes(key);
  25. const [isOpen, setIsOpen] = React.useState(!!singleMode);
  26. return (
  27. <S.List>
  28. <S.Divider />
  29. <ClusterTab
  30. title={name}
  31. status={status}
  32. isOpen={isOpen}
  33. toggleClusterMenu={() => setIsOpen((prev) => !prev)}
  34. />
  35. {isOpen && (
  36. <S.List>
  37. <ClusterMenuItem to={clusterBrokersPath(name)} title="Brokers" />
  38. <ClusterMenuItem to={clusterTopicsPath(name)} title="Topics" />
  39. <ClusterMenuItem
  40. to={clusterConsumerGroupsPath(name)}
  41. title="Consumers"
  42. />
  43. {hasFeatureConfigured(ClusterFeaturesEnum.SCHEMA_REGISTRY) && (
  44. <ClusterMenuItem
  45. to={clusterSchemasPath(name)}
  46. title="Schema Registry"
  47. />
  48. )}
  49. {hasFeatureConfigured(ClusterFeaturesEnum.KAFKA_CONNECT) && (
  50. <ClusterMenuItem
  51. to={clusterConnectorsPath(name)}
  52. title="Kafka Connect"
  53. isActive={(_, location) =>
  54. location.pathname.startsWith(clusterConnectsPath(name)) ||
  55. location.pathname.startsWith(clusterConnectorsPath(name))
  56. }
  57. />
  58. )}
  59. {hasFeatureConfigured(ClusterFeaturesEnum.KSQL_DB) && (
  60. <ClusterMenuItem to={clusterKsqlDbPath(name)} title="KSQL DB" />
  61. )}
  62. </S.List>
  63. )}
  64. </S.List>
  65. );
  66. };
  67. export default ClusterMenu;