import { CButton, CModal, CModalHeader, CModalTitle, CModalBody, CModalFooter, CSpinner, CBadge, CCol, CRow, CInput, CInvalidFeedback, } from '@coreui/react'; import React, { useState, useEffect } from 'react'; import DatePicker from 'react-widgets/DatePicker'; import { useSelector } from 'react-redux'; import { convertDateToUtc, convertDateFromUtc } from '../utils/helper'; import 'react-widgets/styles.css'; import { getToken } from '../utils/authHelper'; import axiosInstance from '../utils/axiosInstance'; const FirmwareUpgradeModal = ({ show, toggleModal }) => { const [hadSuccess, setHadSuccess] = useState(false); const [hadFailure, setHadFailure] = useState(false); const [waiting, setWaiting] = useState(false); const [chosenDate, setChosenDate] = useState(new Date().toString()); const [firmware, setFirmware] = useState(''); const [validFirmware, setValidFirmware] = useState(true); const [validDate, setValidDate] = useState(true); const [responseBody, setResponseBody] = useState(''); const [checkingIfSure, setCheckingIfSure] = useState(false); const selectedDeviceId = useSelector((state) => state.selectedDeviceId); const formValidation = () => { let valid = true; if (firmware.trim() === '') { setValidFirmware(false); valid = false; } if (chosenDate.trim() === ''){ setValidDate(false); valid = false } return valid; }; const setDateToNow = () => { const now = new Date().toString(); setChosenDate(now); }; const setDateToLate = () => { const date = convertDateToUtc(new Date()); if (date.getHours() >= 3) { date.setDate(date.getDate() + 1); } date.setHours(3); date.setMinutes(0); setChosenDate(convertDateFromUtc(date).toString()); }; const setDate = (date) => { if (date) { setChosenDate(date.toString()); } }; const confirmingIfSure = () => { setCheckingIfSure(true); }; useEffect(() => { setHadSuccess(false); setHadFailure(false); setWaiting(false); setChosenDate(new Date().toString()); setFirmware(''); setValidFirmware(true); setResponseBody(''); setCheckingIfSure(false); }, [show]); useEffect(() => { setValidFirmware(true); setValidDate(true); }, [firmware, chosenDate]); const postUpgrade = () => { setHadFailure(false); setHadSuccess(false); setWaiting(true); const token = getToken(); const utcDate = new Date(chosenDate); const utcDateString = utcDate.toISOString(); const headers = { Accept: 'application/json', Authorization: `Bearer ${token}`, serialNumber: selectedDeviceId, }; const parameters = { serialNumber: selectedDeviceId, when: utcDateString, uri: firmware, }; axiosInstance .post(`/device/${selectedDeviceId}/upgrade`, parameters, { headers }) .then((response) => { setResponseBody(JSON.stringify(response.data, null, 4)); setHadSuccess(true); }) .catch((error) => { setHadFailure(true); console.log(error); console.log(error.response); }) .finally(() => { setCheckingIfSure(false); setWaiting(false); }); }; return ( Firmware Upgrade
Choose a time and a firmware version for this device
setDateToNow()}> Now setDateToLate()}> Later tonight

Time of upgrade:

setDate(date)} min={new Date()} /> You need a date...
Firmware URI:
setFirmware(event.target.value)} value={firmware} /> You need a url...
Cancel
); }; export default FirmwareUpgradeModal;