ClusterMenu.tsx 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. clusterKsqlDbPath,
  10. clusterACLPath,
  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. <hr />
  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. />
  54. )}
  55. {hasFeatureConfigured(ClusterFeaturesEnum.KSQL_DB) && (
  56. <ClusterMenuItem to={clusterKsqlDbPath(name)} title="KSQL DB" />
  57. )}
  58. {(hasFeatureConfigured(ClusterFeaturesEnum.KAFKA_ACL_VIEW) ||
  59. hasFeatureConfigured(ClusterFeaturesEnum.KAFKA_ACL_EDIT)) && (
  60. <ClusterMenuItem to={clusterACLPath(name)} title="ACL" />
  61. )}
  62. </S.List>
  63. )}
  64. </S.List>
  65. );
  66. };
  67. export default ClusterMenu;