Actions.tsx 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  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 restartConnectorHandler = () =>
  50. stateMutation.mutateAsync(ConnectorAction.RESTART);
  51. const restartAllTasksHandler = () =>
  52. stateMutation.mutateAsync(ConnectorAction.RESTART_ALL_TASKS);
  53. const restartFailedTasksHandler = () =>
  54. stateMutation.mutateAsync(ConnectorAction.RESTART_FAILED_TASKS);
  55. const pauseConnectorHandler = () =>
  56. stateMutation.mutateAsync(ConnectorAction.PAUSE);
  57. const resumeConnectorHandler = () =>
  58. stateMutation.mutateAsync(ConnectorAction.RESUME);
  59. return (
  60. <S.ConnectorActionsWrapperStyled>
  61. <Dropdown
  62. label={
  63. <S.RestartButton>
  64. <S.ButtonLabel>Restart</S.ButtonLabel>
  65. <ChevronDownIcon />
  66. </S.RestartButton>
  67. }
  68. >
  69. {connector?.status.state === ConnectorState.RUNNING && (
  70. <ActionDropdownItem
  71. onClick={pauseConnectorHandler}
  72. disabled={isMutating}
  73. permission={{
  74. resource: ResourceType.CONNECT,
  75. action: Action.EDIT,
  76. value: routerProps.connectorName,
  77. }}
  78. >
  79. Pause
  80. </ActionDropdownItem>
  81. )}
  82. {connector?.status.state === ConnectorState.PAUSED && (
  83. <ActionDropdownItem
  84. onClick={resumeConnectorHandler}
  85. disabled={isMutating}
  86. permission={{
  87. resource: ResourceType.CONNECT,
  88. action: Action.EDIT,
  89. value: routerProps.connectorName,
  90. }}
  91. >
  92. Resume
  93. </ActionDropdownItem>
  94. )}
  95. <ActionDropdownItem
  96. onClick={restartConnectorHandler}
  97. disabled={isMutating}
  98. permission={{
  99. resource: ResourceType.CONNECT,
  100. action: Action.RESTART,
  101. value: routerProps.connectorName,
  102. }}
  103. >
  104. Restart Connector
  105. </ActionDropdownItem>
  106. <ActionDropdownItem
  107. onClick={restartAllTasksHandler}
  108. disabled={isMutating}
  109. permission={{
  110. resource: ResourceType.CONNECT,
  111. action: Action.RESTART,
  112. value: routerProps.connectorName,
  113. }}
  114. >
  115. Restart All Tasks
  116. </ActionDropdownItem>
  117. <ActionDropdownItem
  118. onClick={restartFailedTasksHandler}
  119. disabled={isMutating}
  120. permission={{
  121. resource: ResourceType.CONNECT,
  122. action: Action.RESTART,
  123. value: routerProps.connectorName,
  124. }}
  125. >
  126. Restart Failed Tasks
  127. </ActionDropdownItem>
  128. </Dropdown>
  129. <Dropdown>
  130. <ActionDropdownItem
  131. onClick={deleteConnectorHandler}
  132. disabled={isMutating}
  133. danger
  134. permission={{
  135. resource: ResourceType.CONNECT,
  136. action: Action.DELETE,
  137. value: routerProps.connectorName,
  138. }}
  139. >
  140. Delete
  141. </ActionDropdownItem>
  142. </Dropdown>
  143. </S.ConnectorActionsWrapperStyled>
  144. );
  145. };
  146. export default Actions;