SearchItem.jsx 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import React from 'react';
  2. import { loginAs, logout } from 'src/actions/Session/sessionActions';
  3. import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
  4. import Container from '../ControlPanel/Container/Container';
  5. import ListItem from '../ControlPanel/ListItem/ListItem';
  6. import { useDispatch, useSelector } from 'react-redux';
  7. import { Link, useHistory } from 'react-router-dom';
  8. import './SearchItem.scss';
  9. const SearchItem = ({ data, handleModal }) => {
  10. const { i18n, userName } = useSelector(state => state.session);
  11. const dispatch = useDispatch();
  12. const history = useHistory()
  13. const signInAs = user => {
  14. dispatch(loginAs(user)).then(() => history.push('/'));
  15. }
  16. const signOut = () => {
  17. dispatch(logout()).then(() => history.push('/'));
  18. }
  19. const handleDelete = () => {
  20. handleModal(data.delete_confirmation, `/api/v1/${data.TYPE === 'user' ? `/api/v1/delete/user/index.php?user=${data.USER}` : data.delete_link}`);
  21. }
  22. const handleSuspend = () => {
  23. handleModal(data.spnd_confirmation, `/api/v1/${data.TYPE === 'user' ? `${data.spnd_action}/user/index.php?user=${data.USER}` : data.spnd_link}`);
  24. }
  25. const printLoginActionButton = () => {
  26. if (data.TYPE !== 'user') return;
  27. if (userName === data.USER) {
  28. return (
  29. <div>
  30. <button onClick={signOut}>{i18n['Log out']}
  31. {data.FOCUSED ? <span className="shortcut-button">L</span> : <FontAwesomeIcon icon="user-lock" />}
  32. </button>
  33. </div>
  34. );
  35. } else {
  36. return (
  37. <div>
  38. <button onClick={() => signInAs(data.USER)}>{i18n['login as']} {data.USER}
  39. {data.FOCUSED ? <span className="shortcut-button">L</span> : <FontAwesomeIcon icon="user-lock" />}
  40. </button>
  41. </div>
  42. );
  43. }
  44. }
  45. return (
  46. <ListItem date={data.DATE} suspended={data.SUSPENDED === 'yes'}>
  47. <Container className="search-list r-col w-85">
  48. <div className="name">{data.RESULT}</div>
  49. <div className="stats">
  50. <Container className="c-1">
  51. <div className="object">{data.TYPE === 'user' ? i18n['USER'] : i18n[data.object]}</div>
  52. </Container>
  53. <Container className="c-2">
  54. <div className="owner">{i18n.Owner}: <span>{data.USER}</span></div>
  55. </Container>
  56. <Container className="c-3">
  57. <div className="status">{i18n.Status}: <span>{data.status}</span></div>
  58. </Container>
  59. </div>
  60. </Container>
  61. <div className="actions">
  62. {printLoginActionButton()}
  63. <div><Link className="link-edit" to={data.edit_link}>{i18n.edit} <FontAwesomeIcon icon="pen" /></Link></div>
  64. <div>
  65. <button
  66. className="link-gray"
  67. onClick={handleSuspend}>
  68. {data.spnd_action}
  69. <FontAwesomeIcon icon={data.SUSPENDED === 'yes' ? 'unlock' : 'lock'} />
  70. </button>
  71. </div>
  72. <div>
  73. <button
  74. className="link-delete"
  75. onClick={handleDelete}>
  76. {i18n.Delete}
  77. <FontAwesomeIcon icon="times" />
  78. </button>
  79. </div>
  80. </div>
  81. </ListItem>
  82. );
  83. }
  84. export default SearchItem;