You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
4.1 KiB
114 lines
4.1 KiB
import React from "react";
|
|
import Typography from "@mui/material/Typography";
|
|
import Grid from "@mui/material/Grid";
|
|
import { useGetAllDataQuery } from "../services/covidDataApi";
|
|
import { ChartData } from "../types";
|
|
import { DateRange } from "@mui/lab/DateRangePicker";
|
|
import DatePicker from "./DatePicker";
|
|
import LineChart from "./LineChart";
|
|
import PieChart from "./PieChart";
|
|
|
|
export default function RecoveryRate() {
|
|
const { data, error, isLoading } = useGetAllDataQuery({});
|
|
const [dateRange, setDateRange] = React.useState<DateRange<Date>>([
|
|
null,
|
|
null,
|
|
]);
|
|
|
|
let lineData: ChartData[] = [];
|
|
let pieData: ChartData[] = [];
|
|
|
|
if (data) {
|
|
if (dateRange[0] == null && dateRange[1] == null) {
|
|
setDateRange([
|
|
new Date(data[0].created_at),
|
|
new Date(data[data.length - 1].created_at),
|
|
]);
|
|
}
|
|
|
|
lineData = data
|
|
.map((d) => {
|
|
const date = new Date(d.created_at);
|
|
return {
|
|
name:
|
|
date.getFullYear() +
|
|
"." +
|
|
("0" + (date.getMonth() + 1)).slice(-2) +
|
|
"." +
|
|
("0" + date.getDate()).slice(-2),
|
|
values: {
|
|
"Gyógyultak száma": d.recovered ?? 0,
|
|
"Elhalálozottak száma": d.deceased ?? 0,
|
|
},
|
|
};
|
|
})
|
|
.filter((d) => {
|
|
const ddate = new Date(d.name);
|
|
if (dateRange[0] == null || dateRange[1] == null) return true;
|
|
let endDate = new Date(dateRange[1].getTime());
|
|
endDate.setDate(endDate.getDate() + 1);
|
|
return ddate >= dateRange[0] && ddate < endDate;
|
|
});
|
|
|
|
pieData = data
|
|
.filter((n) => {
|
|
const ddate = new Date(n.created_at);
|
|
if (dateRange[0] == null || dateRange[1] == null) return true;
|
|
let endDate = new Date(dateRange[1].getTime());
|
|
endDate.setDate(endDate.getDate() + 1);
|
|
return ddate >= dateRange[0] && ddate < endDate;
|
|
})
|
|
.map((d) => {
|
|
const date = new Date(d.created_at);
|
|
return {
|
|
name:
|
|
date.getFullYear() +
|
|
"." +
|
|
("0" + (date.getMonth() + 1)).slice(-2) +
|
|
"." +
|
|
("0" + date.getDate()).slice(-2),
|
|
values: {
|
|
Gyógyultak: d.recovered ?? 0,
|
|
Elhalálozottak: d.deceased ?? 0,
|
|
},
|
|
};
|
|
});
|
|
}
|
|
return (
|
|
<>
|
|
<Typography paragraph>
|
|
A gyógyultak és az elhalálozottak számának alakulása
|
|
</Typography>
|
|
{typeof data != "undefined" ? (
|
|
<Grid container spacing={2}>
|
|
<Grid
|
|
item
|
|
xs={12}
|
|
container
|
|
spacing={2}
|
|
justifyContent="center"
|
|
>
|
|
<Grid item>
|
|
<DatePicker
|
|
minDate={new Date(data[0].created_at)}
|
|
maxDate={
|
|
new Date(data[data.length - 1].created_at)
|
|
}
|
|
value={dateRange}
|
|
setValue={(n: DateRange<Date>) =>
|
|
setDateRange(n)
|
|
}
|
|
/>
|
|
</Grid>
|
|
</Grid>
|
|
<Grid item md={6} xs={12}>
|
|
<LineChart data={lineData} scale="sqrt" />
|
|
</Grid>
|
|
<Grid item md={6} xs={12}>
|
|
<PieChart data={pieData} />
|
|
</Grid>
|
|
</Grid>
|
|
) : null}
|
|
</>
|
|
);
|
|
}
|
|
|