TopicConsumerGroups.tsx 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import React from 'react';
  2. import { Link } from 'react-router-dom';
  3. import { clusterConsumerGroupsPath, RouteParamsClusterTopic } from 'lib/paths';
  4. import { Table } from 'components/common/table/Table/Table.styled';
  5. import TableHeaderCell from 'components/common/table/TableHeaderCell/TableHeaderCell';
  6. import { Tag } from 'components/common/Tag/Tag.styled';
  7. import { TableKeyLink } from 'components/common/table/Table/TableKeyLink.styled';
  8. import getTagColor from 'components/common/Tag/getTagColor';
  9. import useAppParams from 'lib/hooks/useAppParams';
  10. import { useTopicConsumerGroups } from 'lib/hooks/api/topics';
  11. const TopicConsumerGroups: React.FC = () => {
  12. const { clusterName, topicName } = useAppParams<RouteParamsClusterTopic>();
  13. const { data: consumerGroups } = useTopicConsumerGroups({
  14. clusterName,
  15. topicName,
  16. });
  17. return (
  18. <Table isFullwidth>
  19. <thead>
  20. <tr>
  21. <TableHeaderCell title="Consumer Group ID" />
  22. <TableHeaderCell title="Num Of Members" />
  23. <TableHeaderCell title="Messages Behind" />
  24. <TableHeaderCell title="Coordinator" />
  25. <TableHeaderCell title="State" />
  26. </tr>
  27. </thead>
  28. <tbody>
  29. {consumerGroups?.map((consumer) => (
  30. <tr key={consumer.groupId}>
  31. <TableKeyLink>
  32. <Link
  33. to={`${clusterConsumerGroupsPath(clusterName)}/${
  34. consumer.groupId
  35. }`}
  36. >
  37. {consumer.groupId}
  38. </Link>
  39. </TableKeyLink>
  40. <td>{consumer.members}</td>
  41. <td>{consumer.messagesBehind}</td>
  42. <td>{consumer.coordinator?.id}</td>
  43. <td>
  44. {consumer.state && (
  45. <Tag color={getTagColor(consumer)}>{`${consumer.state
  46. .charAt(0)
  47. .toUpperCase()}${consumer.state
  48. .slice(1)
  49. .toLowerCase()}`}</Tag>
  50. )}
  51. </td>
  52. </tr>
  53. ))}
  54. {(!consumerGroups || consumerGroups.length === 0) && (
  55. <tr>
  56. <td colSpan={10}>No active consumer groups</td>
  57. </tr>
  58. )}
  59. </tbody>
  60. </Table>
  61. );
  62. };
  63. export default TopicConsumerGroups;