We are trying to add the initial date as 12/01/2023 for the startDate field, however while converting it in the cloudscape DatePicker component we get the following error:
Any help is greatly appreciated.
We have the below code which results into the following error:
Uncaught RangeError: date value is not finite in
DateTimeFormat.format()
import React, {Fragment, useEffect, useContext, useState} from 'react';
import DatePicker from "@cloudscape-design/components/date-picker";
import TimeInput from "@cloudscape-design/components/time-input";
import FormField from "@cloudscape-design/components/form-field";
import { Paper } from '@material-ui/core';
import './ReportTracker.scss';
import {Box} from '@material-ui/core';
import 'date-fns';
import { KeyboardTimePicker, KeyboardDatePicker , MuiPickersUtilsProvider,DateTimePicker } from '@material-ui/pickers';
import DateFnsUtils from '@date-io/date-fns';
import Button from '@material-ui/core/Button';
//import { useHistory } from 'react-router-dom';
import {Select,MenuItem} from '@material-ui/core';
import { AppLayout } from '@amzn/awsui-components-react';
import moment from 'moment-timezone';
import { Navigation } from 'src/components/common/AlfredSideNav/Navigation'
import { ComponentsRoutesContext } from '../../context/ComponentsRoutesContext';
const ReportTracker = () =>{
const { org , idToken, alias } = useContext(ComponentsRoutesContext);
const [navigationOpen , setNavigationOpen] = useState(false);
const [currentStartDate,setCurrentStartDate]=useState(true);
const [currentEndDate,setCurrentEndDate]=useState(true);
const [selectedStartDate, setSelectedStartDate] = React.useState(new Date());
const [selectedEndDate, setSelectedEndDate] = React.useState(new Date());
const [endDate, setEndDate] = React.useState(new Date());
const [startDate ,setStartDate] = useState(React.useState(new Date()));
//const history = useHistory();
const [peak,setPeak]=useState("PD Peak");
const [status,setStatus]=useState("Green");
const [startDateError,setStartDateError] = useState(false);
const [endDateError,setEndDateError] = useState(false);
const peakdropdownValues = ["PD Peak","Q4 Peak","PBDD Peak"];
const statusdropdownValues = ["Green","Red"];
const handleStartDateChange = (date) => {
if(currentEndDate){
if(moment(date).isAfter(endDate)){
setStartDateError(true);
}else{
setStartDateError(false);
setEndDateError(false);
}
setCurrentStartDate(false);
setSelectedStartDate(date);
}else{
if(moment(date).isAfter(selectedEndDate)){
setStartDateError(true);
}else{
setStartDateError(false);
setEndDateError(false);
}
setCurrentStartDate(false);
setSelectedStartDate(date);
}
};
const handleEndDateChange = (date) => {
if(currentStartDate){
if(moment(date).isBefore(startDate)){
setEndDateError(true);
}else{
setEndDateError(false);
setStartDateError(false);
}
setCurrentEndDate(false);
setSelectedEndDate(date);
}else{
if(moment(date).isBefore(selectedStartDate)){
setEndDateError(true);
}else{
setEndDateError(false);
setStartDateError(false);
}
setCurrentEndDate(false);
setSelectedEndDate(date);
}
};
const getCurrentTime = () => {
var date = new Date();
var pstDate = date.toLocaleString("en-US", {
timeZone: "America/Los_Angeles"
})
setEndDate(pstDate);
var curr = new Date(pstDate);
setStartDate(curr.setHours(curr.getHours() - 4));
}
const handlepPeakTypeChange = (event) => {
setPeak(event.target.value);
};
const handleStatusChange = (event) => {
setStatus(event.target.value);
};
useEffect(() => {
getCurrentTime();
const interval=setInterval(()=>{
getCurrentTime();
},1000);
return()=>clearInterval(interval);
}, []);
console.log("FP: startDate "+ startDate);
const startDateSlice = startDate.toString().slice(0, -3);
console.log("FP: startDate "+ startDateSlice);
console.log("FP: selectedStartDate "+ selectedStartDate);
console.log("FP: currentStartDate "+ currentStartDate);
let formattedStartDate = new Intl.DateTimeFormat("en-US", {
year: "numeric",
month: "2-digit",
day: "2-digit"
}).format(startDateSlice);
console.log("FP: current formatted Date"+formattedDate)
return(
<div>
<AppLayout
navigationOpen={navigationOpen}
onNavigationChange={() => {setNavigationOpen(!navigationOpen)}}
content={<>
<div style={{ minHeight: "500vh" }}
className='col-md-7'>
<Paper className='mt-4 ml-4 paper-component-container' >
<div className='mt-4 ml-4 font-weight-bold'>Hi {alias}, Welcome to Alfred Peak Report!</div>
<div className='mt-5 d-flex flex-row'>
<FormField
label="Start Date"
constraintText="Use MM/DD/YYYY format."
>
<DatePicker
onChange={handleStartDateChange}
margin="normal"
value={currentStartDate ? formattedStartDate : selectedStartDate.toString()}
openCalendarAriaLabel={selectedDate =>
"Select Start Date" +
(selectedDate
? `, selected date is ${selectedDate}`
: "")
}
placeholder="MM/DD/YYYY"
/>
</FormField>
</div>
{/* <div className='mt-5 d-flex flex-row'>
<Box component="span" sx={{ p: 1}} className='ml-5 label-box'>
<div className='p-2 label-text'>END TIME</div>
</Box>
<Box component="span" sx={{ p: 1}} className='ml-5 date-time'>
<div className='mt-2'>
<MuiPickersUtilsProvider utils={DateFnsUtils}>
<KeyboardDatePicker data-test="timeline-date-change"
margin="normal"
id="date-picker-dialog"
className='m-0'
format="MM/dd/yyyy"
value={currentEndDate ? endDate : selectedEndDate}
onChange={handleEndDateChange}
popperPlacement = "top"
KeyboardButtonProps={{
'aria-label': 'change date',
}}
disableFuture={true}
error={endDateError}
/>
<KeyboardTimePicker data-test="timeline-time-change"
margin="normal"
className='my-0 ml-3'
id="time-picker"
value={currentEndDate ? endDate : selectedEndDate }
views={['hours']}
format="hh aa"
onChange={handleEndDateChange}
KeyboardButtonProps={{
'aria-label': 'change time',
}}
error={endDateError}
/>
</MuiPickersUtilsProvider>
</div>
</Box>
</div>
<div className='mt-5 d-flex flex-row'>
<Box component="span" sx={{ p: 1}} className='ml-5 label-box'>
<div className='p-2 label-text'>PEAK TYPE</div>
</Box>
<Select sx={{ p: 1}}
id="peak-event-dropdown"
value={peak}
className='ml-5 pl-4 peak-event'
onChange={handlepPeakTypeChange}
MenuProps={{
anchorOrigin: {
vertical: "bottom",
horizontal: "left"
},
transformOrigin: {
vertical: "top",
horizontal: "left"
},
getContentAnchorEl: null
}}
>
{peakdropdownValues.map((val) => <MenuItem value={val}>{val}</MenuItem>)}
</Select>
</div>
<div className='mt-5 d-flex flex-row'>
<Box component="span" sx={{ p: 1}} className='ml-5 label-box'>
<div className='p-2 label-text'>STATUS</div>
</Box>
<Select sx={{ p: 1}}
id="peak-status-dropdown"
value={status}
className='ml-5 pl-4 peak-event'
onChange={handleStatusChange}
MenuProps={{
anchorOrigin: {
vertical: "bottom",
horizontal: "left"
},
transformOrigin: {
vertical: "top",
horizontal: "left"
},
getContentAnchorEl: null
}}
>
{statusdropdownValues.map((val) => <MenuItem value={val}>{val}</MenuItem>)}
</Select>
</div> */}
<div className='mt-5 d-flex flex-row'>
<Button className='ml-5 mt-5' disabled={startDateError || endDateError} variant="contained" color="primary"
// onClick = {() => history.push({
// pathname: "/alfred/report-template",
// state: {
// end: currentEndDate ? endDate : selectedEndDate,
// peakType: peak,
// start: currentStartDate ? startDate: selectedStartDate,
// status: status
// }
// })}
>
<div className='label-text'>GENERATE REPORT</div>
</Button>
</div>
</Paper>
</div>
<div>
</div>
</>}
navigation={<Navigation navigationType={"all"}/>}
headerSelector={"#topNav"}
footerSelector={"#bottomNav"}
/>
</div>
);
};
export default ReportTracker;