1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
import React, { useState } from 'react';
import {
Grid, FormControl, InputLabel, Select, MenuItem,
} from '@material-ui/core';
import ReportLayout from './components/ReportLayout';
import ReportFilter from './components/ReportFilter';
import Graph from './components/Graph';
import { useAttributePreference } from '../common/util/preferences';
import { formatDate } from '../common/util/formatter';
import { speedFromKnots } from '../common/util/converter';
import { useTranslation } from '../common/components/LocalizationProvider';
const Filter = ({ children, setItems }) => {
const speedUnit = useAttributePreference('speedUnit');
const handleSubmit = async (deviceId, from, to, mail, headers) => {
const query = new URLSearchParams({
deviceId, from, to, mail,
});
const response = await fetch(`/api/reports/route?${query.toString()}`, { headers });
if (response.ok) {
const positions = await response.json();
const formattedPositions = positions.map((position) => ({
speed: Number(speedFromKnots(position.speed, speedUnit)),
altitude: position.altitude,
accuracy: position.accuracy,
fixTime: formatDate(position.fixTime),
}));
setItems(formattedPositions);
}
};
return (
<>
<ReportFilter handleSubmit={handleSubmit} showOnly />
{children}
</>
);
};
const ChartType = ({ type, setType }) => {
const t = useTranslation();
return (
<Grid container spacing={3}>
<Grid item xs={12} sm={6}>
<FormControl variant="filled" margin="normal" fullWidth>
<InputLabel>{t('reportChartType')}</InputLabel>
<Select value={type} onChange={(e) => setType(e.target.value)}>
<MenuItem value="speed">{t('positionSpeed')}</MenuItem>
<MenuItem value="accuracy">{t('positionAccuracy')}</MenuItem>
<MenuItem value="altitude">{t('positionAltitude')}</MenuItem>
</Select>
</FormControl>
</Grid>
</Grid>
);
};
const ChartReportPage = () => {
const [items, setItems] = useState([]);
const [type, setType] = useState('speed');
return (
<ReportLayout filter={(
<Filter setItems={setItems}>
<ChartType type={type} setType={setType} />
</Filter>
)}
>
<Graph items={items} type={type} />
</ReportLayout>
);
};
export default ChartReportPage;
|