Server.jsx 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import React from 'react';
  2. import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
  3. import Container from '../ControlPanel/Container/Container';
  4. import ListItem from '../ControlPanel/ListItem/ListItem';
  5. import './Server.scss';
  6. import { Link } from 'react-router-dom';
  7. import { useSelector } from 'react-redux';
  8. const Server = props => {
  9. const { data } = props;
  10. const { i18n } = useSelector(state => state.session);
  11. const checkItem = () => {
  12. props.checkItem(data.NAME);
  13. }
  14. return (
  15. <ListItem
  16. id={data.NAME}
  17. focused={data.FOCUSED}
  18. checked={data.isChecked}
  19. checkItem={checkItem}>
  20. <Container className="r-col w-85">
  21. <div className="server-name">{data.NAME}</div>
  22. <div className="stats">
  23. <Container className="c-1">
  24. <div className="descr"><span className="stat">{i18n[data.SYSTEM]}</span></div>
  25. </Container>
  26. <Container className="c-1" />
  27. <Container className="c-1">
  28. <div className="descr"><span>{i18n.CPU}: <span className="stat">{data.CPU}</span></span></div>
  29. </Container>
  30. <Container className="c-2">
  31. <div><span>{i18n.Memory}: <span className="stat">{data.MEM} {i18n.mb}</span></span></div>
  32. </Container>
  33. <Container className="c-3">
  34. <div><span>{i18n.Uptime}: <span className="stat">{data.RTIME}</span></span></div>
  35. </Container>
  36. <Container className="c-1" />
  37. </div>
  38. </Container>
  39. <div className="actions">
  40. <div>
  41. <Link className="link-list" to={`/edit/server/${data.NAME}`}>
  42. {i18n.configure}
  43. {data.FOCUSED ? <span className="shortcut-button html-unicode">&#8617;</span> : <FontAwesomeIcon icon="cogs" />}
  44. </Link>
  45. </div>
  46. <div>
  47. <button className="link-delete" onClick={() => props.handleAction('/api/v1' + data.action_url)}>
  48. {data.STATE === 'running' ? i18n.stop : i18n.start}
  49. {data.FOCUSED ? <span className="shortcut-button">S</span> : <FontAwesomeIcon icon={data.STATE === 'running' ? "stop" : "play"} />}
  50. </button>
  51. </div>
  52. <div>
  53. <button className="link-download restart" onClick={() => props.handleAction(`/api/v1/restart/service/?srv=${data.NAME}`)}>
  54. {i18n.restart}
  55. {
  56. data.FOCUSED
  57. ? <span className="shortcut-button">R</span>
  58. : <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-arrow-repeat" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
  59. <path fill-rule="evenodd" d="M2.854 7.146a.5.5 0 0 0-.708 0l-2 2a.5.5 0 1 0 .708.708L2.5 8.207l1.646 1.647a.5.5 0 0 0 .708-.708l-2-2zm13-1a.5.5 0 0 0-.708 0L13.5 7.793l-1.646-1.647a.5.5 0 0 0-.708.708l2 2a.5.5 0 0 0 .708 0l2-2a.5.5 0 0 0 0-.708z" />
  60. <path fill-rule="evenodd" d="M8 3a4.995 4.995 0 0 0-4.192 2.273.5.5 0 0 1-.837-.546A6 6 0 0 1 14 8a.5.5 0 0 1-1.001 0 5 5 0 0 0-5-5zM2.5 7.5A.5.5 0 0 1 3 8a5 5 0 0 0 9.192 2.727.5.5 0 1 1 .837.546A6 6 0 0 1 2 8a.5.5 0 0 1 .501-.5z" />
  61. </svg>
  62. }
  63. </button>
  64. </div>
  65. </div>
  66. </ListItem>
  67. );
  68. }
  69. export default Server;