EditInternetProtocol.jsx 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. import React, { useEffect, useState } from 'react';
  2. import { addActiveElement, removeFocusedElement } from "../../../actions/MainNavigation/mainNavigationActions";
  3. import { getInternetProtocolInfo, updateInternetProtocol } from '../../../ControlPanelService/Ip';
  4. import SelectInput from '../../ControlPanel/AddItemLayout/Form/SelectInput/SelectInput';
  5. import TextInput from '../../ControlPanel/AddItemLayout/Form/TextInput/TextInput';
  6. import Checkbox from '../../ControlPanel/AddItemLayout/Form/Checkbox/Checkbox';
  7. import AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout';
  8. import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
  9. import Spinner from '../../../components/Spinner/Spinner';
  10. import Toolbar from '../../MainNav/Toolbar/Toolbar';
  11. import { useHistory } from 'react-router-dom';
  12. import { useDispatch, useSelector } from 'react-redux';
  13. import QS from 'qs';
  14. import './EditInternetProtocol.scss';
  15. import { Helmet } from 'react-helmet';
  16. import { checkAuthHandler } from 'src/actions/Session/sessionActions';
  17. import { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions';
  18. import HtmlParser from 'react-html-parser';
  19. const EditInternetProtocol = () => {
  20. const token = localStorage.getItem("token");
  21. const { i18n } = useSelector(state => state.session);
  22. const history = useHistory();
  23. const dispatch = useDispatch();
  24. const [state, setState] = useState({
  25. data: {},
  26. loading: false,
  27. dedicated: false,
  28. errorMessage: '',
  29. okMessage: ''
  30. });
  31. useEffect(() => {
  32. let queryParams = QS.parse(history.location.search, { ignoreQueryPrefix: true });
  33. const { ip } = queryParams;
  34. dispatch(addActiveElement('/list/ip/'));
  35. dispatch(removeFocusedElement());
  36. if (ip) {
  37. setState({ ...state, loading: true });
  38. getInternetProtocolInfo(ip)
  39. .then(response => {
  40. setState({
  41. ...state,
  42. data: response.data,
  43. dedicated: !response.data.dedicated,
  44. errorMessage: response.data['error_msg'],
  45. okMessage: response.data['ok_msg'],
  46. loading: false
  47. });
  48. })
  49. .catch(err => console.error(err));
  50. }
  51. }, []);
  52. const submitFormHandler = event => {
  53. event.preventDefault();
  54. let updatedIP = {};
  55. for (var [name, value] of (new FormData(event.target)).entries()) {
  56. updatedIP[name] = value;
  57. }
  58. updatedIP['token'] = token;
  59. updatedIP['save'] = 'save';
  60. updatedIP['v_ip'] = state.data.database;
  61. if (Object.keys(updatedIP).length !== 0 && updatedIP.constructor === Object) {
  62. setState({ ...state, loading: true });
  63. updateInternetProtocol(updatedIP, state.data.ip)
  64. .then(result => {
  65. if (result.status === 200) {
  66. const { error_msg: errorMessage, ok_msg: okMessage } = result.data;
  67. if (errorMessage) {
  68. setState({ ...state, errorMessage, okMessage, loading: false });
  69. } else {
  70. dispatch(refreshCounters()).then(() => {
  71. setState({ ...state, okMessage, errorMessage: '', loading: false });
  72. });
  73. }
  74. }
  75. })
  76. .catch(err => console.error(err));
  77. }
  78. }
  79. const onChangeDedicated = value => {
  80. setState({ ...state, dedicated: value });
  81. }
  82. return (
  83. <div className="edit-template edit-ip">
  84. <Helmet>
  85. <title>{`Vesta - ${i18n.IP}`}</title>
  86. </Helmet>
  87. <Toolbar mobile={false}>
  88. <div></div>
  89. <div className="search-toolbar-name">{i18n['Editing IP Address']}</div>
  90. <div className="error">
  91. <span className="error-message">
  92. {state.data.errorMessage ? <FontAwesomeIcon icon="long-arrow-alt-right" /> : ''} {state.errorMessage}
  93. </span>
  94. </div>
  95. <div className="success">
  96. <span className="ok-message">
  97. {state.okMessage ? <FontAwesomeIcon icon="long-arrow-alt-right" /> : ''} <span>{HtmlParser(state.okMessage)}</span>
  98. </span>
  99. </div>
  100. </Toolbar>
  101. <AddItemLayout date={state.data.date} time={state.data.time} status={state.data.status}>
  102. {state.loading ? <Spinner /> :
  103. <form onSubmit={event => submitFormHandler(event)} id="edit-ip">
  104. <TextInput id="type" name="v_ip" title={i18n['IP address']} value={state.data.ip} disabled />
  105. <TextInput id="type" name="v_netmask" title={i18n['Netmask']} value={state.data.netmask} disabled />
  106. <TextInput id="type" name="v_interface" title={i18n['Interface']} value={state.data.interface} disabled />
  107. <Checkbox onChange={onChangeDedicated} name="v_shared" id="shared" title={i18n['Shared']} defaultChecked={state.dedicated} />
  108. {
  109. !state.dedicated && (
  110. <div className="dedicated-form-group">
  111. <SelectInput
  112. options={state.data.users}
  113. selected={state.data.owner}
  114. title={i18n['Assigned user']}
  115. name="v_owner"
  116. id="owner" />
  117. </div>
  118. )
  119. }
  120. <TextInput id="type" name="v_name" title={i18n['Assigned domain']} value={state.data.name} optionalTitle={i18n['optional']} />
  121. <TextInput id="type" name="v_nat" title={i18n['NAT IP association']} value={state.data.nat} optionalTitle={i18n['optional']} />
  122. <div className="buttons-wrapper">
  123. <button type="submit" className="add">{i18n.Save}</button>
  124. <button type="button" className="back" onClick={() => history.push('/list/ip/')}>{i18n.Back}</button>
  125. </div>
  126. </form>
  127. }
  128. </AddItemLayout>
  129. </div>
  130. );
  131. }
  132. export default EditInternetProtocol;