ListItem.tsx 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import React from 'react';
  2. import useAppParams from 'lib/hooks/useAppParams';
  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. import { RouterParamsClusterConnectConnector } from 'lib/paths';
  11. export interface ListItemProps {
  12. task: Task;
  13. restartTask(payload: {
  14. clusterName: ClusterName;
  15. connectName: ConnectName;
  16. connectorName: ConnectorName;
  17. taskId: TaskId['task'];
  18. }): Promise<unknown>;
  19. }
  20. const ListItem: React.FC<ListItemProps> = ({ task, restartTask }) => {
  21. const { clusterName, connectName, connectorName } =
  22. useAppParams<RouterParamsClusterConnectConnector>();
  23. const restartTaskHandler = async () => {
  24. await restartTask({
  25. clusterName,
  26. connectName,
  27. connectorName,
  28. taskId: task.id?.task,
  29. });
  30. };
  31. return (
  32. <tr>
  33. <td>{task.status?.id}</td>
  34. <td>{task.status?.workerId}</td>
  35. <td>
  36. <C.Tag color={getTagColor(task.status)}>{task.status.state}</C.Tag>
  37. </td>
  38. <td>{task.status.trace || 'null'}</td>
  39. <td style={{ width: '5%' }}>
  40. <div>
  41. <Dropdown label={<VerticalElipsisIcon />} right>
  42. <DropdownItem onClick={restartTaskHandler} danger>
  43. <span>Restart task</span>
  44. </DropdownItem>
  45. </Dropdown>
  46. </div>
  47. </td>
  48. </tr>
  49. );
  50. };
  51. export default ListItem;