import DateFnsUtils from '@date-io/date-fns'; import { Button, Checkbox, Chip, CircularProgress, FormControl, FormControlLabel, Grid, InputLabel, ListItemText, MenuItem, Select } from "@material-ui/core"; import { KeyboardDatePicker, KeyboardTimePicker, MuiPickersUtilsProvider } from '@material-ui/pickers'; import React, { useEffect, useState } from "react"; import { logger } from "../../../services/monitoring"; import { CANSignalsExportProvider, useCANSignalsExportContext } from "../../Contexts/CANSignalsExportContext"; import { useStatusContext } from "../../Contexts/StatusContext"; import { useUserContext } from "../../Contexts/UserContext"; import useStyles from "../../useStyles"; const MainForm = ({ id }) => { const classes = useStyles(); const { setMessage } = useStatusContext(); const { busy, canSignals, getCANSignalList, getDynamicColumnCANSignals } = useCANSignalsExportContext(); const [selectedStartDate, setSelectedStartDate] = useState(new Date(Date.now() - 24 * 60 * 60 * 1000)); const [selectedEndDate, setSelectedEndDate] = useState(new Date()); const [selectedCanSignals, setSelectedCanSignals] = useState([]); const [selectAllCanSignals, setSelectAllCanSignals] = useState(false); const [gmtTimezone, setGmtTimezone] = useState(false); const { token: { idToken: { jwtToken: token }, }, } = useUserContext(); const handleSubmit = async (event) => { event.preventDefault(); let timestamp_start = Date.parse(selectedStartDate.toUTCString()) / 1000 let timestamp_end = Date.parse(selectedEndDate.toUTCString()) / 1000 try { await getDynamicColumnCANSignals(id, timestamp_start, timestamp_end, selectedCanSignals, selectAllCanSignals, token) } catch (e) { setMessage(e.message); logger.error(e.stack) } }; const isSubmitDisabled = !selectedStartDate || !selectedEndDate || selectedCanSignals.length === 0; useEffect(() => { (async () => { try { if (!token) return; await getCANSignalList(token); } catch (e) { setMessage(e.message); logger.warn(e.stack); } })(); // eslint-disable-next-line react-hooks/exhaustive-deps }, [token]); const handleDateChange = (value, dateType) => { const newDate = new Date(value); const oldDate = dateType === "start" ? selectedStartDate || new Date() : selectedEndDate || new Date(); newDate.setHours(oldDate.getHours()); newDate.setMinutes(oldDate.getMinutes()); newDate.setSeconds(oldDate.getSeconds()); if (dateType === "start") { setSelectedStartDate(newDate); } else { setSelectedEndDate(newDate); } }; const handleTimeFromChange = (value) => { setSelectedStartDate(value); }; const handleTimeToChange = (value) => { setSelectedEndDate(value); }; const handleSelectedItemsChange = (event) => { const { value } = event.target; if (value.some(item => item === "Select All")) { setSelectAllCanSignals(true); if (selectedCanSignals.length === canSignals.length) { setSelectedCanSignals([]); } else { setSelectedCanSignals(canSignals.map(signal => signal.signal_name)); } } else { setSelectAllCanSignals(false); setSelectedCanSignals(value); } }; const displayTimeAsGMT = (date) => { return gmtTimezone ? date.toLocaleString("en-US", {timeZone: "Etc/GMT"}) : date; } return (
handleDateChange(value, "start")} KeyboardButtonProps={{ 'aria-label': 'change date', }} /> handleDateChange(value, "end")} KeyboardButtonProps={{ 'aria-label': 'change date', }} /> setGmtTimezone((current) => !current)} /> } /> Select CAN signals
); }; const CANSignalExport = (props) => ( ); export default CANSignalExport;