import { CButton, CModal, CModalHeader, CModalTitle, CModalBody, CModalFooter, CSpinner, CBadge, CCol, CRow, } 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 ActionModalWidget = ({ show, toggleModal, title, directions, actionLabel, action, extraParameters, }) => { const [hadSuccess, setHadSuccess] = useState(false); const [hadFailure, setHadFailure] = useState(false); const [waiting, setWaiting] = useState(false); const [chosenDate, setChosenDate] = useState(null); const [responseBody, setResponseBody] = useState(''); const selectedDeviceId = useSelector((state) => state.selectedDeviceId); const formValidation = () => chosenDate !== null; const setDateToNow = () => { const now = new Date().toISOString(); 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).toISOString()); }; const setDate = (date) => { if (date) { setChosenDate(convertDateFromUtc(date).toISOString()); } }; useEffect(() => { setHadSuccess(false); setHadFailure(false); setWaiting(false); setChosenDate(false); setResponseBody(''); }, [show]); const doAction = () => { setHadFailure(false); setHadSuccess(false); setWaiting(true); const token = getToken(); const headers = { Accept: 'application/json', Authorization: `Bearer ${token}`, serialNumber: selectedDeviceId, }; const necessaryParameters = { serialNumber: selectedDeviceId, when: chosenDate, }; const parameters = { ...necessaryParameters, ...extraParameters }; axiosInstance .post(`/device/${selectedDeviceId}/${action}`, 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(() => { setWaiting(false); }); }; return ( {title}
{directions}
setDateToNow()}> Now setDateToLate()}> Later tonight

Custom (UTC):

setDate(date)} min={convertDateToUtc(new Date())} />

Device will {actionLabel} at (UTC): {chosenDate}

(formValidation() ? doAction() : null)} > {waiting ? 'Loading...' : 'Schedule'} {' '} Cancel
); }; export default ActionModalWidget;