Mail.jsx 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import React, { Component } 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 { Link } from 'react-router-dom';
  6. import './Mail.scss';
  7. import { useSelector } from 'react-redux';
  8. const Mail = props => {
  9. const { data } = props;
  10. const { i18n } = useSelector(state => state.session);
  11. const token = localStorage.getItem("token");
  12. const printStat = (stat, text) => {
  13. if (text === 'no') {
  14. return <div className="crossed">{stat}</div>;
  15. }
  16. return <div>{stat}: <span className="stat">{text}</span></div>;
  17. }
  18. const toggleFav = (starred) => {
  19. if (starred) {
  20. props.toggleFav(props.data.NAME, 'add');
  21. } else {
  22. props.toggleFav(props.data.NAME, 'delete');
  23. }
  24. }
  25. const checkItem = () => {
  26. props.checkItem(props.data.NAME);
  27. }
  28. const handleSuspend = () => {
  29. let suspendedStatus = data.SUSPENDED === 'yes' ? 'unsuspend' : 'suspend' === 'yes' ? 'unsuspend' : 'suspend';
  30. props.handleModal(data.suspend_conf, `/api/v1/${suspendedStatus}/mail/index.php?domain=${data.NAME}`);
  31. }
  32. const handleDelete = () => {
  33. props.handleModal(data.delete_conf, `/api/v1/delete/mail/index.php?domain=${data.NAME}`);
  34. }
  35. return (
  36. <ListItem
  37. id={data.NAME}
  38. focused={data.FOCUSED}
  39. checked={data.isChecked}
  40. date={data.DATE}
  41. starred={data.STARRED}
  42. toggleFav={toggleFav}
  43. checkItem={checkItem}
  44. suspended={data.SUSPENDED === 'yes'}>
  45. <Container className="r-col w-85">
  46. <div className="name">{data.NAME}</div>
  47. <div className="stats">
  48. <Container className="c-1">
  49. <div className="bandwidth">{i18n.Disk} <span><span className="stat">{data.U_DISK}</span>{i18n.mb}</span></div>
  50. </Container>
  51. <Container className="c-2">
  52. {printStat(i18n['AntiVirus Support'], data.ANTIVIRUS)}
  53. {printStat(i18n['DKIM Support'], data.DKIM)}
  54. </Container>
  55. <Container className="c-3">
  56. {printStat(i18n['AntiSpam Support'], data.ANTISPAM)}
  57. <div>{i18n['Catchall email']}: <span className="stat catchall-mail">{data.CATCHALL}</span></div>
  58. </Container>
  59. </div>
  60. </Container>
  61. <div className="actions">
  62. <div>
  63. <Link className="link-gray" to={`/list/mail/?domain=${data.NAME}`}>
  64. {data.list_accounts_button}
  65. {data.FOCUSED ? <span className="shortcut-button">L</span> : <FontAwesomeIcon icon="list" />}
  66. </Link>
  67. </div>
  68. <div>
  69. <Link className="link-edit" to={`/add/mail/?domain=${data.NAME}`}>
  70. {i18n['add account']}
  71. {data.FOCUSED ? <span className="shortcut-button">N</span> : <FontAwesomeIcon icon="plus" />}
  72. </Link>
  73. </div>
  74. <div>
  75. <Link className="link-edit" to={`/edit/mail/?domain=${data.NAME}`}>
  76. {i18n.edit}
  77. {data.FOCUSED ? <span className="shortcut-button html-unicode">&#8617;</span> : <FontAwesomeIcon icon="pen" />}
  78. </Link>
  79. </div>
  80. <div>
  81. <button
  82. className="link-gray"
  83. onClick={() => handleSuspend()}>
  84. {i18n[data.suspend_action]}
  85. {data.FOCUSED ? <span className="shortcut-button">S</span> : <FontAwesomeIcon icon={data.SUSPENDED === 'yes' ? 'unlock' : 'lock'} />}
  86. </button>
  87. </div>
  88. <div>
  89. <button className="link-delete" onClick={() => handleDelete()}>
  90. {i18n.Delete}
  91. {data.FOCUSED ? <span className="shortcut-button del">Del</span> : <FontAwesomeIcon icon="times" />}
  92. </button>
  93. </div>
  94. </div>
  95. </ListItem>
  96. );
  97. }
  98. export default Mail;