ActionsCell.tsx 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. import React from 'react';
  2. import {
  3. Action,
  4. ConnectorAction,
  5. ConnectorState,
  6. FullConnectorInfo,
  7. ResourceType,
  8. } from 'generated-sources';
  9. import { CellContext } from '@tanstack/react-table';
  10. import { ClusterNameRoute } from 'lib/paths';
  11. import useAppParams from 'lib/hooks/useAppParams';
  12. import { Dropdown, DropdownItem } from 'components/common/Dropdown';
  13. import {
  14. useDeleteConnector,
  15. useUpdateConnectorState,
  16. } from 'lib/hooks/api/kafkaConnect';
  17. import { useConfirm } from 'lib/hooks/useConfirm';
  18. import { useIsMutating } from '@tanstack/react-query';
  19. import { ActionDropdownItem } from 'components/common/ActionComponent';
  20. const ActionsCell: React.FC<CellContext<FullConnectorInfo, unknown>> = ({
  21. row,
  22. }) => {
  23. const { connect, name, status } = row.original;
  24. const { clusterName } = useAppParams<ClusterNameRoute>();
  25. const mutationsNumber = useIsMutating();
  26. const isMutating = mutationsNumber > 0;
  27. const confirm = useConfirm();
  28. const deleteMutation = useDeleteConnector({
  29. clusterName,
  30. connectName: connect,
  31. connectorName: name,
  32. });
  33. const stateMutation = useUpdateConnectorState({
  34. clusterName,
  35. connectName: connect,
  36. connectorName: name,
  37. });
  38. const handleDelete = () => {
  39. confirm(
  40. <>
  41. Are you sure want to remove <b>{name}</b> connector?
  42. </>,
  43. async () => {
  44. await deleteMutation.mutateAsync();
  45. }
  46. );
  47. };
  48. // const stateMutation = useUpdateConnectorState(routerProps);
  49. const resumeConnectorHandler = () =>
  50. stateMutation.mutateAsync(ConnectorAction.RESUME);
  51. const restartConnectorHandler = () =>
  52. stateMutation.mutateAsync(ConnectorAction.RESTART);
  53. const restartAllTasksHandler = () =>
  54. stateMutation.mutateAsync(ConnectorAction.RESTART_ALL_TASKS);
  55. const restartFailedTasksHandler = () =>
  56. stateMutation.mutateAsync(ConnectorAction.RESTART_FAILED_TASKS);
  57. return (
  58. <Dropdown>
  59. {status.state === ConnectorState.PAUSED && (
  60. <ActionDropdownItem
  61. onClick={resumeConnectorHandler}
  62. disabled={isMutating}
  63. permission={{
  64. resource: ResourceType.CONNECT,
  65. action: Action.EDIT,
  66. value: name,
  67. }}
  68. >
  69. Resume
  70. </ActionDropdownItem>
  71. )}
  72. <ActionDropdownItem
  73. onClick={restartConnectorHandler}
  74. disabled={isMutating}
  75. permission={{
  76. resource: ResourceType.CONNECT,
  77. action: Action.RESTART,
  78. value: name,
  79. }}
  80. >
  81. Restart Connector
  82. </ActionDropdownItem>
  83. <ActionDropdownItem
  84. onClick={restartAllTasksHandler}
  85. disabled={isMutating}
  86. permission={{
  87. resource: ResourceType.CONNECT,
  88. action: Action.RESTART,
  89. value: name,
  90. }}
  91. >
  92. Restart All Tasks
  93. </ActionDropdownItem>
  94. <ActionDropdownItem
  95. onClick={restartFailedTasksHandler}
  96. disabled={isMutating}
  97. permission={{
  98. resource: ResourceType.CONNECT,
  99. action: Action.RESTART,
  100. value: name,
  101. }}
  102. >
  103. Restart Failed Tasks
  104. </ActionDropdownItem>
  105. <DropdownItem onClick={handleDelete} danger>
  106. Remove Connector
  107. </DropdownItem>
  108. </Dropdown>
  109. );
  110. };
  111. export default ActionsCell;