Actions.tsx 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. import React from 'react';
  2. import { useNavigate } from 'react-router-dom';
  3. import { useIsMutating } from '@tanstack/react-query';
  4. import {
  5. Action,
  6. ConnectorAction,
  7. ConnectorState,
  8. ResourceType,
  9. } from 'generated-sources';
  10. import useAppParams from 'lib/hooks/useAppParams';
  11. import {
  12. useConnector,
  13. useDeleteConnector,
  14. useUpdateConnectorState,
  15. } from 'lib/hooks/api/kafkaConnect';
  16. import {
  17. clusterConnectorsPath,
  18. RouterParamsClusterConnectConnector,
  19. } from 'lib/paths';
  20. import { useConfirm } from 'lib/hooks/useConfirm';
  21. import { Dropdown } from 'components/common/Dropdown';
  22. import { ActionDropdownItem } from 'components/common/ActionComponent';
  23. import ChevronDownIcon from 'components/common/Icons/ChevronDownIcon';
  24. import * as S from './Action.styled';
  25. const Actions: React.FC = () => {
  26. const navigate = useNavigate();
  27. const routerProps = useAppParams<RouterParamsClusterConnectConnector>();
  28. const mutationsNumber = useIsMutating();
  29. const isMutating = mutationsNumber > 0;
  30. const { data: connector } = useConnector(routerProps);
  31. const confirm = useConfirm();
  32. const deleteConnectorMutation = useDeleteConnector(routerProps);
  33. const deleteConnectorHandler = () =>
  34. confirm(
  35. <>
  36. Are you sure you want to remove <b>{routerProps.connectorName}</b>{' '}
  37. connector?
  38. </>,
  39. async () => {
  40. try {
  41. await deleteConnectorMutation.mutateAsync();
  42. navigate(clusterConnectorsPath(routerProps.clusterName));
  43. } catch {
  44. // do not redirect
  45. }
  46. }
  47. );
  48. const stateMutation = useUpdateConnectorState(routerProps);
  49. const mutationParams = (action: ConnectorAction) => {
  50. return {
  51. clusterName: routerProps.clusterName,
  52. connectName: routerProps.connectName,
  53. connectorName: routerProps.connectorName,
  54. action: action
  55. }
  56. }
  57. const restartConnectorHandler = () =>
  58. stateMutation.mutateAsync(mutationParams(ConnectorAction.RESTART));
  59. const restartAllTasksHandler = () =>
  60. stateMutation.mutateAsync(mutationParams(ConnectorAction.RESTART_ALL_TASKS));
  61. const restartFailedTasksHandler = () =>
  62. stateMutation.mutateAsync(mutationParams(ConnectorAction.RESTART_FAILED_TASKS));
  63. const pauseConnectorHandler = () =>
  64. stateMutation.mutateAsync(mutationParams(ConnectorAction.PAUSE));
  65. const resumeConnectorHandler = () =>
  66. stateMutation.mutateAsync(mutationParams(ConnectorAction.RESUME));
  67. return (
  68. <S.ConnectorActionsWrapperStyled>
  69. <Dropdown
  70. label={
  71. <S.RestartButton>
  72. <S.ButtonLabel>Restart</S.ButtonLabel>
  73. <ChevronDownIcon />
  74. </S.RestartButton>
  75. }
  76. >
  77. {connector?.status.state === ConnectorState.RUNNING && (
  78. <ActionDropdownItem
  79. onClick={pauseConnectorHandler}
  80. disabled={isMutating}
  81. permission={{
  82. resource: ResourceType.CONNECT,
  83. action: Action.EDIT,
  84. value: routerProps.connectorName,
  85. }}
  86. >
  87. Pause
  88. </ActionDropdownItem>
  89. )}
  90. {connector?.status.state === ConnectorState.PAUSED && (
  91. <ActionDropdownItem
  92. onClick={resumeConnectorHandler}
  93. disabled={isMutating}
  94. permission={{
  95. resource: ResourceType.CONNECT,
  96. action: Action.EDIT,
  97. value: routerProps.connectorName,
  98. }}
  99. >
  100. Resume
  101. </ActionDropdownItem>
  102. )}
  103. <ActionDropdownItem
  104. onClick={restartConnectorHandler}
  105. disabled={isMutating}
  106. permission={{
  107. resource: ResourceType.CONNECT,
  108. action: Action.EDIT,
  109. value: routerProps.connectorName,
  110. }}
  111. >
  112. Restart Connector
  113. </ActionDropdownItem>
  114. <ActionDropdownItem
  115. onClick={restartAllTasksHandler}
  116. disabled={isMutating}
  117. permission={{
  118. resource: ResourceType.CONNECT,
  119. action: Action.EDIT,
  120. value: routerProps.connectorName,
  121. }}
  122. >
  123. Restart All Tasks
  124. </ActionDropdownItem>
  125. <ActionDropdownItem
  126. onClick={restartFailedTasksHandler}
  127. disabled={isMutating}
  128. permission={{
  129. resource: ResourceType.CONNECT,
  130. action: Action.EDIT,
  131. value: routerProps.connectorName,
  132. }}
  133. >
  134. Restart Failed Tasks
  135. </ActionDropdownItem>
  136. </Dropdown>
  137. <Dropdown>
  138. <ActionDropdownItem
  139. onClick={deleteConnectorHandler}
  140. disabled={isMutating}
  141. danger
  142. permission={{
  143. resource: ResourceType.CONNECT,
  144. action: Action.DELETE,
  145. value: routerProps.connectorName,
  146. }}
  147. >
  148. Delete
  149. </ActionDropdownItem>
  150. </Dropdown>
  151. </S.ConnectorActionsWrapperStyled>
  152. );
  153. };
  154. export default Actions;