Select.jsx 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import React, { useEffect, useState } from 'react';
  2. import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
  3. import { values } from '../../../../ControlPanelService/Select';
  4. import { useSelector } from 'react-redux';
  5. import './Select.scss';
  6. const Select = ({ cronReports, ...props }) => {
  7. const { i18n } = useSelector(state => state.session);
  8. const listValues = values(i18n);
  9. const [state, setState] = useState({
  10. usersList: listValues.usersList,
  11. webList: listValues.webList,
  12. dnsList: listValues.dnsList,
  13. mailList: listValues.mailList,
  14. dbList: listValues.dbList,
  15. cronList: listValues.cronList,
  16. backupList: listValues.backupList,
  17. packagesList: listValues.packagesList,
  18. internetProtocolsList: listValues.internetProtocolsList,
  19. statisticsList: [],
  20. updatesList: listValues.updatesList,
  21. firewallList: listValues.firewallList,
  22. serverList: listValues.serverList,
  23. backupDetailList: listValues.backupDetailList,
  24. banList: listValues.banList,
  25. selected: '',
  26. });
  27. useEffect(() => {
  28. const { list } = props;
  29. setState({ ...state, list });
  30. }, []);
  31. const defaultValue = () => {
  32. if (props.list === 'statisticsList') {
  33. return i18n['show per user'];
  34. }
  35. return i18n['apply to selected'];
  36. }
  37. const renderOptions = () => {
  38. const { list } = props;
  39. let activeList = state[list];
  40. if (list === 'cronList') {
  41. if (cronReports) {
  42. activeList = activeList.filter((item, index) => index !== 0);
  43. } else {
  44. activeList = activeList.filter((item, index) => index !== 1);
  45. }
  46. }
  47. if (list === 'statisticsList') {
  48. return props.users.map((item, index) => { return <option key={index} value={item}>{item}</option> });
  49. } else {
  50. return activeList.map((item, index) => { return <option key={index} value={item.value}>{item.name}</option> });
  51. }
  52. }
  53. const handleSelect = event => {
  54. setState({ ...state, selected: event.target.value });
  55. }
  56. const bulkAction = () => {
  57. props.bulkAction(state.selected);
  58. setState({ ...state, selected: '' });
  59. }
  60. return (
  61. <div className="select-wrapper">
  62. <select className="custom-select" id="inputGroupSelect04" onChange={handleSelect}>
  63. <option defaultValue={defaultValue()} value={defaultValue()}>{props.list === "statisticsList" ? i18n['show per user'] : i18n['apply to selected']}</option>
  64. {renderOptions()}
  65. </select>
  66. <div className="input-group-append">
  67. <button className="btn btn-outline-secondary" type="button" onClick={bulkAction}>
  68. <FontAwesomeIcon icon="angle-right" />
  69. </button>
  70. </div>
  71. </div>
  72. );
  73. }
  74. export default Select;