consumers.ts 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import { consumerGroupsApiClient as api } from 'lib/api';
  2. import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
  3. import { ClusterName } from 'redux/interfaces';
  4. import {
  5. ConsumerGroup,
  6. ConsumerGroupOffsetsReset,
  7. ConsumerGroupOrdering,
  8. SortOrder,
  9. } from 'generated-sources';
  10. import { showSuccessAlert } from 'lib/errorHandling';
  11. export type ConsumerGroupID = ConsumerGroup['groupId'];
  12. type UseConsumerGroupsProps = {
  13. clusterName: ClusterName;
  14. orderBy?: ConsumerGroupOrdering;
  15. sortOrder?: SortOrder;
  16. page?: number;
  17. perPage?: number;
  18. search: string;
  19. };
  20. type UseConsumerGroupDetailsProps = {
  21. clusterName: ClusterName;
  22. consumerGroupID: ConsumerGroupID;
  23. };
  24. export function useConsumerGroups(props: UseConsumerGroupsProps) {
  25. const { clusterName, ...rest } = props;
  26. return useQuery(
  27. ['clusters', clusterName, 'consumerGroups', rest],
  28. () => api.getConsumerGroupsPage(props),
  29. { suspense: false, keepPreviousData: true }
  30. );
  31. }
  32. export function useConsumerGroupDetails(props: UseConsumerGroupDetailsProps) {
  33. const { clusterName, consumerGroupID } = props;
  34. return useQuery(
  35. ['clusters', clusterName, 'consumerGroups', consumerGroupID],
  36. () => api.getConsumerGroup({ clusterName, id: consumerGroupID })
  37. );
  38. }
  39. export const useDeleteConsumerGroupMutation = ({
  40. clusterName,
  41. consumerGroupID,
  42. }: UseConsumerGroupDetailsProps) => {
  43. const queryClient = useQueryClient();
  44. return useMutation(
  45. () => api.deleteConsumerGroup({ clusterName, id: consumerGroupID }),
  46. {
  47. onSuccess: () => {
  48. showSuccessAlert({
  49. message: `Consumer ${consumerGroupID} group deleted`,
  50. });
  51. queryClient.invalidateQueries([
  52. 'clusters',
  53. clusterName,
  54. 'consumerGroups',
  55. ]);
  56. },
  57. }
  58. );
  59. };
  60. export const useResetConsumerGroupOffsetsMutation = ({
  61. clusterName,
  62. consumerGroupID,
  63. }: UseConsumerGroupDetailsProps) => {
  64. const queryClient = useQueryClient();
  65. return useMutation(
  66. (props: ConsumerGroupOffsetsReset) =>
  67. api.resetConsumerGroupOffsets({
  68. clusterName,
  69. id: consumerGroupID,
  70. consumerGroupOffsetsReset: props,
  71. }),
  72. {
  73. onSuccess: () => {
  74. showSuccessAlert({
  75. message: `Consumer ${consumerGroupID} group offsets reset`,
  76. });
  77. queryClient.invalidateQueries([
  78. 'clusters',
  79. clusterName,
  80. 'consumerGroups',
  81. ]);
  82. },
  83. }
  84. );
  85. };