[frontend]: Add train statuses & train types pie charts

This commit is contained in:
2025-03-12 23:16:29 +00:00
parent 07e3d5cff5
commit 2d7addfb25

View File

@ -4,6 +4,8 @@ import LoadingOverlay from "./LoadingOverlay.jsx";
const Statistics = () => {
const [transientTypes, setTransientTypes] = useState([]);
const [trainTypes, setTrainTypes] = useState([]);
const [trainStatuses, setTrainStatuses] = useState([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState("");
@ -13,13 +15,60 @@ const Statistics = () => {
const response = await fetch("https://281bc6mcm5.execute-api.us-east-1.amazonaws.com/transient_data");
if (!response.ok) throw new Error("Network response was not ok");
const rawData = await response.json();
const transientData = await response.json();
const transientTypes = rawData
.map((item) => item.objectType)
.map((type) => type.replace(/([a-z])([A-Z])/g, '$1 $2').replace(/([A-Z])([A-Z][a-z])/g, '$1 $2'));
let transientTypes = [];
let trainTypes = [];
let trainStatuses = [];
for (const item of transientData) {
transientTypes.push(item.objectType.replace(/([a-z])([A-Z])/g, '$1 $2').replace(/([A-Z])([A-Z][a-z])/g, '$1 $2'));
switch (item.objectType) {
case "IrishRailTrain":
let trainType;
switch (item.trainType) {
case "M":
trainType = "Mainline";
break;
case "S":
trainType = "Suburban";
break;
case "D":
trainType = "DART";
break;
default:
trainType = "Unknown";
}
trainTypes.push(trainType);
let trainStatus;
switch (item.trainStatus) {
case "R":
trainStatus = "Running";
break;
case "T":
trainStatus = "Terminated";
break;
case "N":
trainStatus = "Not yet running";
break;
default:
trainStatus = "Unknown";
}
trainStatuses.push(trainStatus);
break;
}
}
setTransientTypes(transientTypes);
setTrainStatuses(trainStatuses);
setTrainTypes(trainTypes);
} catch (err) {
setError("Failed to fetch data");
} finally {
@ -49,18 +98,27 @@ const Statistics = () => {
>
<div
className="mx-auto px-4 flex flex-wrap gap-4 pt-[4vh] justify-center">
{transientTypes.length > 0 ? (
transientTypes.slice(0, 6).map((type, index) => (
<div key={index} className="bg-white shadow-md rounded-lg p-4">
<div className="bg-white shadow-md rounded-lg p-4">
<ObjectTypeProportionPieChart
label={`Transport Type Proportion ${index + 1}`}
label={`Transport Types`}
dataList={transientTypes}
/>
</div>
))
) : (
<p className="col-span-full text-center text-gray-500">No data available</p>
)}
<div className="bg-white shadow-md rounded-lg p-4">
<ObjectTypeProportionPieChart
label={`Train Types`}
dataList={trainTypes}
/>
</div>
<div className="bg-white shadow-md rounded-lg p-4">
<ObjectTypeProportionPieChart
label={`Train Statuses`}
dataList={trainStatuses}
/>
</div>
</div>
</div>
);