MailAccount.jsx 3.2 KB

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