kafka-ui/kafka-ui-react-app/src/components/Connect/Details/Actions/Actions.tsx
Arsen Simonyan 3d04007883 Transform redux connect reducer and actions into toolkit slice. (#1883)
* integrate redux toolkit for connects

* uncomment test case

* remove unnecessary comment

* reduce duplication
2022-05-04 10:47:51 +04:00

219 lines
6 KiB
TypeScript

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<unknown>;
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<ActionsProps> = ({
deleteConnector,
isConnectorDeleting,
connectorStatus,
restartConnector,
restartTasks,
pauseConnector,
resumeConnector,
isConnectorActionRunning,
}) => {
const { clusterName, connectName, connectorName } = useParams<RouterParams>();
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 (
<ConnectorActionsWrapperStyled>
{connectorStatus === ConnectorState.RUNNING && (
<Button
buttonSize="M"
buttonType="primary"
type="button"
onClick={pauseConnectorHandler}
disabled={isConnectorActionRunning}
>
<span>
<i className="fas fa-pause" />
</span>
<span>Pause</span>
</Button>
)}
{connectorStatus === ConnectorState.PAUSED && (
<Button
buttonSize="M"
buttonType="primary"
type="button"
onClick={resumeConnectorHandler}
disabled={isConnectorActionRunning}
>
<span>
<i className="fas fa-play" />
</span>
<span>Resume</span>
</Button>
)}
<Button
buttonSize="M"
buttonType="primary"
type="button"
onClick={restartConnectorHandler}
disabled={isConnectorActionRunning}
>
<span>
<i className="fas fa-sync-alt" />
</span>
<span>Restart Connector</span>
</Button>
<Button
buttonSize="M"
buttonType="primary"
type="button"
onClick={() => restartTasksHandler(ConnectorAction.RESTART_ALL_TASKS)}
disabled={isConnectorActionRunning}
>
<span>
<i className="fas fa-sync-alt" />
</span>
<span>Restart All Tasks</span>
</Button>
<Button
buttonSize="M"
buttonType="primary"
type="button"
onClick={() =>
restartTasksHandler(ConnectorAction.RESTART_FAILED_TASKS)
}
disabled={isConnectorActionRunning}
>
<span>
<i className="fas fa-sync-alt" />
</span>
<span>Restart Failed Tasks</span>
</Button>
<Button
buttonSize="M"
buttonType="primary"
type="button"
isLink
disabled={isConnectorActionRunning}
to={clusterConnectConnectorEditPath(
clusterName,
connectName,
connectorName
)}
>
<span>
<i className="fas fa-pencil-alt" />
</span>
<span>Edit Config</span>
</Button>
<Button
buttonSize="M"
buttonType="secondary"
type="button"
onClick={() => setIsDeleteConnectorConfirmationVisible(true)}
disabled={isConnectorActionRunning}
>
<span>
<i className="far fa-trash-alt" />
</span>
<span>Delete</span>
</Button>
<ConfirmationModal
isOpen={isDeleteConnectorConfirmationVisible}
onCancel={() => setIsDeleteConnectorConfirmationVisible(false)}
onConfirm={deleteConnectorHandler}
isConfirming={isConnectorDeleting}
>
Are you sure you want to remove <b>{connectorName}</b> connector?
</ConfirmationModal>
</ConnectorActionsWrapperStyled>
);
};
export default Actions;