import { CButton, CModal, CModalHeader, CModalTitle, CModalBody, CModalFooter, CSwitch, CCol, CRow, CPopover, } from '@coreui/react'; import CIcon from '@coreui/icons-react'; import { cilX } from '@coreui/icons'; import React, { useState, useEffect } from 'react'; import { useTranslation } from 'react-i18next'; import DatePicker from 'react-widgets/DatePicker'; import PropTypes from 'prop-types'; import { dateToUnix } from 'utils/helper'; import 'react-widgets/styles.css'; import axiosInstance from 'utils/axiosInstance'; import eventBus from 'utils/eventBus'; import { LoadingButton, useAuth, useDevice, useToast } from 'ucentral-libs'; import SuccessfulActionModalBody from 'components/SuccessfulActionModalBody'; import { useGlobalWebSocket } from 'contexts/WebSocketProvider'; const ActionModal = ({ show, toggleModal }) => { const { t } = useTranslation(); const { currentToken, endpoints } = useAuth(); const { deviceSerialNumber } = useDevice(); const { addDeviceListener } = useGlobalWebSocket(); const { addToast } = useToast(); const [waiting, setWaiting] = useState(false); const [result, setResult] = useState(null); const [chosenDate, setChosenDate] = useState(new Date().toString()); const [isNow, setIsNow] = useState(true); const toggleNow = () => { setIsNow(!isNow); }; const setDate = (date) => { if (date) { setChosenDate(date.toString()); } }; useEffect(() => { if (show) { setResult(null); setWaiting(false); setChosenDate(new Date().toString()); setIsNow(true); } }, [show]); const doAction = () => { setWaiting(true); const utcDate = new Date(chosenDate); const parameters = { serialNumber: deviceSerialNumber, when: isNow ? 0 : dateToUnix(utcDate), }; const headers = { Accept: 'application/json', Authorization: `Bearer ${currentToken}`, }; axiosInstance .post( `${endpoints.owgw}/api/v1/device/${encodeURIComponent(deviceSerialNumber)}/reboot`, parameters, { headers }, ) .then(() => { addDeviceListener({ serialNumber: deviceSerialNumber, types: ['device_connection', 'device_disconnection'], addToast: (title, body) => addToast({ title, body, color: 'info', autohide: true, }), }); toggleModal(); }) .catch(() => { setResult('error'); }) .finally(() => { setWaiting(false); eventBus.dispatch('actionCompleted', { message: 'An action has been completed' }); }); }; return ( {t('reboot.title')}
{result === 'success' ? ( ) : (

{t('reboot.now')}

{t('common.cancel')}
)}
); }; ActionModal.propTypes = { show: PropTypes.bool.isRequired, toggleModal: PropTypes.func.isRequired, }; export default ActionModal;