ListItem.tsx 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import React from 'react';
  2. import { useParams } from 'react-router-dom';
  3. import { Task, TaskId } from 'generated-sources';
  4. import { ClusterName, ConnectName, ConnectorName } from 'redux/interfaces';
  5. import Dropdown from 'components/common/Dropdown/Dropdown';
  6. import DropdownItem from 'components/common/Dropdown/DropdownItem';
  7. import VerticalElipsisIcon from 'components/common/Icons/VerticalElipsisIcon';
  8. import * as C from 'components/common/Tag/Tag.styled';
  9. import getTagColor from 'components/common/Tag/getTagColor';
  10. interface RouterParams {
  11. clusterName: ClusterName;
  12. connectName: ConnectName;
  13. connectorName: ConnectorName;
  14. }
  15. export interface ListItemProps {
  16. task: Task;
  17. restartTask(
  18. clusterName: ClusterName,
  19. connectName: ConnectName,
  20. connectorName: ConnectorName,
  21. taskId: TaskId['task']
  22. ): Promise<void>;
  23. }
  24. const ListItem: React.FC<ListItemProps> = ({ task, restartTask }) => {
  25. const { clusterName, connectName, connectorName } = useParams<RouterParams>();
  26. const restartTaskHandler = React.useCallback(async () => {
  27. await restartTask(clusterName, connectName, connectorName, task.id?.task);
  28. }, [restartTask, clusterName, connectName, connectorName, task.id?.task]);
  29. return (
  30. <tr>
  31. <td>{task.status?.id}</td>
  32. <td>{task.status?.workerId}</td>
  33. <td>
  34. <C.Tag color={getTagColor(task.status)}>{task.status.state}</C.Tag>
  35. </td>
  36. <td>{task.status.trace || 'null'}</td>
  37. <td style={{ width: '5%' }}>
  38. <div>
  39. <Dropdown label={<VerticalElipsisIcon />} right>
  40. <DropdownItem onClick={restartTaskHandler} danger>
  41. <span>Restart task</span>
  42. </DropdownItem>
  43. </Dropdown>
  44. </div>
  45. </td>
  46. </tr>
  47. );
  48. };
  49. export default ListItem;