import React from 'react'; import { useHistory, useParams } from 'react-router-dom'; import { ConnectorState, ConnectorAction } from 'generated-sources'; import { ClusterName, ConnectName, ConnectorName } from 'redux/interfaces'; import { clusterConnectConnectorEditPath, clusterConnectorsPath, } from 'lib/paths'; import ConfirmationModal from 'components/common/ConfirmationModal/ConfirmationModal'; import styled from 'styled-components'; import { Button } from 'components/common/Button/Button'; interface RouterParams { clusterName: ClusterName; connectName: ConnectName; connectorName: ConnectorName; } const ConnectorActionsWrapperStyled = styled.div` display: flex; gap: 8px; `; export interface ActionsProps { deleteConnector(payload: { clusterName: ClusterName; connectName: ConnectName; connectorName: ConnectorName; }): Promise; isConnectorDeleting: boolean; connectorStatus?: ConnectorState; restartConnector(payload: { clusterName: ClusterName; connectName: ConnectName; connectorName: ConnectorName; }): void; restartTasks(payload: { clusterName: ClusterName; connectName: ConnectName; connectorName: ConnectorName; action: ConnectorAction; }): void; pauseConnector(payload: { clusterName: ClusterName; connectName: ConnectName; connectorName: ConnectorName; }): void; resumeConnector(payload: { clusterName: ClusterName; connectName: ConnectName; connectorName: ConnectorName; }): void; isConnectorActionRunning: boolean; } const Actions: React.FC = ({ deleteConnector, isConnectorDeleting, connectorStatus, restartConnector, restartTasks, pauseConnector, resumeConnector, isConnectorActionRunning, }) => { const { clusterName, connectName, connectorName } = useParams(); const history = useHistory(); const [ isDeleteConnectorConfirmationVisible, setIsDeleteConnectorConfirmationVisible, ] = React.useState(false); const deleteConnectorHandler = React.useCallback(async () => { try { await deleteConnector({ clusterName, connectName, connectorName }); history.push(clusterConnectorsPath(clusterName)); } catch { // do not redirect } }, [deleteConnector, clusterName, connectName, connectorName, history]); const restartConnectorHandler = React.useCallback(() => { restartConnector({ clusterName, connectName, connectorName }); }, [restartConnector, clusterName, connectName, connectorName]); const restartTasksHandler = React.useCallback( (actionType) => { restartTasks({ clusterName, connectName, connectorName, action: actionType, }); }, [restartTasks, clusterName, connectName, connectorName] ); const pauseConnectorHandler = React.useCallback(() => { pauseConnector({ clusterName, connectName, connectorName }); }, [pauseConnector, clusterName, connectName, connectorName]); const resumeConnectorHandler = React.useCallback(() => { resumeConnector({ clusterName, connectName, connectorName }); }, [resumeConnector, clusterName, connectName, connectorName]); return ( {connectorStatus === ConnectorState.RUNNING && ( )} {connectorStatus === ConnectorState.PAUSED && ( )} setIsDeleteConnectorConfirmationVisible(false)} onConfirm={deleteConnectorHandler} isConfirming={isConnectorDeleting} > Are you sure you want to remove {connectorName} connector? ); }; export default Actions;