123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- import React from 'react';
- import { FullConnectorInfo } from 'generated-sources';
- import { clusterConnectConnectorPath, clusterTopicPath } from 'lib/paths';
- import { ClusterName } from 'redux/interfaces';
- import { Link, NavLink } from 'react-router-dom';
- import { useDispatch } from 'react-redux';
- import { deleteConnector } from 'redux/reducers/connect/connectSlice';
- import Dropdown from 'components/common/Dropdown/Dropdown';
- import DropdownItem from 'components/common/Dropdown/DropdownItem';
- import ConfirmationModal from 'components/common/ConfirmationModal/ConfirmationModal';
- import { Tag } from 'components/common/Tag/Tag.styled';
- import { TableKeyLink } from 'components/common/table/Table/TableKeyLink.styled';
- import VerticalElipsisIcon from 'components/common/Icons/VerticalElipsisIcon';
- import getTagColor from 'components/common/Tag/getTagColor';
- import * as S from './List.styled';
- export interface ListItemProps {
- clusterName: ClusterName;
- connector: FullConnectorInfo;
- }
- const ListItem: React.FC<ListItemProps> = ({
- clusterName,
- connector: {
- name,
- connect,
- type,
- connectorClass,
- topics,
- status,
- tasksCount,
- failedTasksCount,
- },
- }) => {
- const dispatch = useDispatch();
- const [
- isDeleteConnectorConfirmationVisible,
- setDeleteConnectorConfirmationVisible,
- ] = React.useState(false);
- const handleDelete = () => {
- if (clusterName && connect && name) {
- dispatch(
- deleteConnector({
- clusterName,
- connectName: connect,
- connectorName: name,
- })
- );
- }
- setDeleteConnectorConfirmationVisible(false);
- };
- const runningTasks = React.useMemo(() => {
- if (!tasksCount) return null;
- return tasksCount - (failedTasksCount || 0);
- }, [tasksCount, failedTasksCount]);
- return (
- <tr>
- <TableKeyLink>
- <NavLink to={clusterConnectConnectorPath(clusterName, connect, name)}>
- {name}
- </NavLink>
- </TableKeyLink>
- <td>{connect}</td>
- <td>{type}</td>
- <td>{connectorClass}</td>
- <td>
- <S.TagsWrapper>
- {topics?.map((t) => (
- <Tag key={t} color="gray">
- <Link to={clusterTopicPath(clusterName, t)}>{t}</Link>
- </Tag>
- ))}
- </S.TagsWrapper>
- </td>
- <td>{status && <Tag color={getTagColor(status)}>{status.state}</Tag>}</td>
- <td>
- {runningTasks && (
- <span>
- {runningTasks} of {tasksCount}
- </span>
- )}
- </td>
- <td>
- <div>
- <Dropdown label={<VerticalElipsisIcon />} right up>
- <DropdownItem
- onClick={() => setDeleteConnectorConfirmationVisible(true)}
- danger
- >
- Remove Connector
- </DropdownItem>
- </Dropdown>
- </div>
- <ConfirmationModal
- isOpen={isDeleteConnectorConfirmationVisible}
- onCancel={() => setDeleteConnectorConfirmationVisible(false)}
- onConfirm={handleDelete}
- >
- Are you sure want to remove <b>{name}</b> connector?
- </ConfirmationModal>
- </td>
- </tr>
- );
- };
- export default ListItem;
|