import { Button, Checkbox, DialogActions, DialogContent, DialogTitle, Divider, FormControlLabel, InputAdornment, TextField } from "@mui/material"; import ResponsiveDialog from "common/ResponsiveDialog"; import { GetDefaultDateRange } from "common/time/DateRange"; import DateSelect from "common/time/DateSelect"; import { useDeviceAPI } from "hooks"; import { Component, Device } from "models"; import { Moment } from "moment"; import { useGlobalState } from "providers"; import React, { useState } from "react"; import { downloadJSON } from "utils"; interface Props { open: boolean; close: (refresh: boolean) => void; device: Device; components: Component[]; } export default function ArcGISDeviceData(props: Props) { const { open, close, device, components } = props; const [{as}] = useGlobalState(); const [startDate, setStartDate] = useState(GetDefaultDateRange().start); const [endDate, setEndDate] = useState(GetDefaultDateRange().end); const [includedComponents, setIncludedComponents] = useState([]); const [filename, setFilename] = useState(GetDefaultDateRange().start.toString()); const [limit, setLimit] = useState(0); const deviceAPI = useDeviceAPI(); const [useFlat, setUseFlat] = useState(false); const handleClose = () => { setUseFlat(false); close(false); }; const updateDateRange = (start: Moment, end: Moment) => { setStartDate(start); setEndDate(end); }; const includeComponent = (checked: boolean, comp: Component) => { let inComps = includedComponents; if (checked) { inComps.push(comp); } else if (!checked && inComps.includes(comp)) { inComps.splice(inComps.indexOf(comp), 1); } setIncludedComponents(inComps); }; const isFormValid = () => { let valid = false; if (filename.length > 0) { valid = true; } return valid; }; const componentSelector = () => { return components.map(comp => ( includeComponent(e.target.checked, comp)} color="primary" /> } /> )); }; const getMeasurements = () => { if (useFlat) { deviceAPI.listSimpleJSON(device.id(), as).then(resp => { downloadJSON(resp.data, "Device" + device.id() + ".json"); }); } else { deviceAPI .listJSONMeasurements( device.id(), includedComponents, startDate, endDate, limit, 0, "asc", "timestamp", as ) .then(resp => { downloadJSON(resp.data, filename + ".json"); }); } }; return ( Export JSON Data for Device setUseFlat(e.target.checked)} color="primary" /> } /> {!useFlat && ( setFilename(e.target.value)} InputProps={{ endAdornment: .json }} /> setLimit(+e.target.value)} /> {componentSelector()} )} ); }