mirror of
				https://github.com/Telecominfraproject/wlan-cloud-ucentralgw-ui.git
				synced 2025-10-30 18:27:53 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			151 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			151 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import {
 | |
|   CButton,
 | |
|   CModal,
 | |
|   CModalHeader,
 | |
|   CModalTitle,
 | |
|   CModalBody,
 | |
|   CModalFooter,
 | |
|   CSpinner,
 | |
|   CRow,
 | |
|   CForm,
 | |
|   CSwitch,
 | |
|   CAlert,
 | |
| } from '@coreui/react';
 | |
| import React, { useState, useEffect } from 'react';
 | |
| import { useTranslation } from 'react-i18next';
 | |
| import PropTypes from 'prop-types';
 | |
| import 'react-widgets/styles.css';
 | |
| import { useAuth } from 'contexts/AuthProvider';
 | |
| import { useDevice } from 'contexts/DeviceProvider';
 | |
| import axiosInstance from 'utils/axiosInstance';
 | |
| import SuccessfulActionModalBody from 'components/SuccessfulActionModalBody';
 | |
| import styles from './index.module.scss';
 | |
| 
 | |
| const ConfigureModal = ({ show, toggleModal }) => {
 | |
|   const { t } = useTranslation();
 | |
|   const { currentToken, endpoints } = useAuth();
 | |
|   const { deviceSerialNumber } = useDevice();
 | |
|   const [hadSuccess, setHadSuccess] = useState(false);
 | |
|   const [hadFailure, setHadFailure] = useState(false);
 | |
|   const [doingNow, setDoingNow] = useState(false);
 | |
|   const [waiting, setWaiting] = useState(false);
 | |
|   const [keepRedirector, setKeepRedirector] = useState(true);
 | |
|   const [responseBody, setResponseBody] = useState('');
 | |
|   const [checkingIfSure, setCheckingIfSure] = useState(false);
 | |
| 
 | |
|   const toggleRedirector = () => {
 | |
|     setKeepRedirector(!keepRedirector);
 | |
|   };
 | |
| 
 | |
|   const confirmingIfSure = () => {
 | |
|     setCheckingIfSure(true);
 | |
|   };
 | |
| 
 | |
|   useEffect(() => {
 | |
|     setHadSuccess(false);
 | |
|     setHadFailure(false);
 | |
|     setWaiting(false);
 | |
|     setResponseBody('');
 | |
|     setCheckingIfSure(false);
 | |
|   }, [show]);
 | |
| 
 | |
|   const doAction = () => {
 | |
|     setHadFailure(false);
 | |
|     setHadSuccess(false);
 | |
|     setWaiting(true);
 | |
| 
 | |
|     const parameters = {
 | |
|       serialNumber: deviceSerialNumber,
 | |
|       keepRedirector,
 | |
|     };
 | |
| 
 | |
|     const headers = {
 | |
|       Accept: 'application/json',
 | |
|       Authorization: `Bearer ${currentToken}`,
 | |
|     };
 | |
| 
 | |
|     axiosInstance
 | |
|       .post(
 | |
|         `${endpoints.ucentralgw}/api/v1/device/${encodeURIComponent(deviceSerialNumber)}/factory`,
 | |
|         parameters,
 | |
|         { headers },
 | |
|       )
 | |
|       .then(() => {
 | |
|         setHadSuccess(true);
 | |
|       })
 | |
|       .catch(() => {
 | |
|         setResponseBody(t('commands.error'));
 | |
|         setHadFailure(true);
 | |
|       })
 | |
|       .finally(() => {
 | |
|         setDoingNow(false);
 | |
|         setCheckingIfSure(false);
 | |
|         setWaiting(false);
 | |
|       });
 | |
|   };
 | |
| 
 | |
|   return (
 | |
|     <CModal show={show} onClose={toggleModal}>
 | |
|       <CModalHeader closeButton>
 | |
|         <CModalTitle>{t('factory_reset.title')}</CModalTitle>
 | |
|       </CModalHeader>
 | |
|       {hadSuccess ? (
 | |
|         <SuccessfulActionModalBody toggleModal={toggleModal} />
 | |
|       ) : (
 | |
|         <div>
 | |
|           <CModalBody>
 | |
|             <CAlert color="danger">{t('factory_reset.warning')}</CAlert>
 | |
|             <CRow className={styles.spacedRow}>
 | |
|               <p className={styles.spacedForm}>{t('factory_reset.redirector')}</p>
 | |
|               <CForm className={styles.spacedForm}>
 | |
|                 <CSwitch
 | |
|                   color="primary"
 | |
|                   defaultChecked={keepRedirector}
 | |
|                   onClick={toggleRedirector}
 | |
|                   labelOn="Yes"
 | |
|                   labelOff="No"
 | |
|                 />
 | |
|               </CForm>
 | |
|             </CRow>
 | |
|             <div hidden={!hadSuccess && !hadFailure}>
 | |
|               <div>
 | |
|                 <pre className="ignore">{responseBody}</pre>
 | |
|               </div>
 | |
|             </div>
 | |
|           </CModalBody>
 | |
|           <CModalFooter>
 | |
|             <div hidden={!checkingIfSure}>Are you sure?</div>
 | |
|             <CButton
 | |
|               disabled={waiting}
 | |
|               hidden={checkingIfSure}
 | |
|               color="primary"
 | |
|               onClick={() => confirmingIfSure()}
 | |
|             >
 | |
|               {t('factory_reset.reset')}
 | |
|             </CButton>
 | |
|             <CButton
 | |
|               hidden={!checkingIfSure}
 | |
|               disabled={waiting}
 | |
|               color="primary"
 | |
|               onClick={() => doAction(false)}
 | |
|             >
 | |
|               {waiting && !doingNow ? t('factory_reset.resetting') : t('common.yes')} {'   '}
 | |
|               <CSpinner color="light" hidden={!waiting || doingNow} component="span" size="sm" />
 | |
|             </CButton>
 | |
|             <CButton color="secondary" onClick={toggleModal}>
 | |
|               {t('common.cancel')}
 | |
|             </CButton>
 | |
|           </CModalFooter>
 | |
|         </div>
 | |
|       )}
 | |
|     </CModal>
 | |
|   );
 | |
| };
 | |
| 
 | |
| ConfigureModal.propTypes = {
 | |
|   show: PropTypes.bool.isRequired,
 | |
|   toggleModal: PropTypes.func.isRequired,
 | |
| };
 | |
| 
 | |
| export default ConfigureModal;
 | 
