Files
CPLv4.0/components/main/kabelueberwachung/kue705FO/Charts/TDRChart/TDRChartActionBar.tsx
Ismail Ali c0101b35ab refactor: Umbenennung von 'chartData' in Redux kabelueberwachung Slice zu 'loopMeasurementCurveChartData' für bessere Klarheit
Die Variable 'chartData' wurde in 'loopMeasurementCurveChartData' umbenannt, um den Inhalt und Zweck der Daten klarer zu definieren. Diese Änderung verbessert die Lesbarkeit und Wartbarkeit des Codes, indem sie die Bedeutung der Variablen präziser beschreibt.
2025-02-22 16:32:40 +01:00

231 lines
7.5 KiB
TypeScript

// /components/modules/kue705FO/charts/TDRChart/TDRChartActionBar.tsx
import React, { useState, useEffect, useRef } from "react";
import DateRangePicker from "../DateRangePicker";
import TDRChart from "../../../../kabelueberwachung/kue705FO/Charts/TDRChart/TDRChart";
import { setLoopMeasurementCurveChartData } from "../../../../../../redux/slices/chartDataSlice";
import { parseISO } from "date-fns";
import { useDispatch } from "react-redux";
import { setTDRChartData } from "../../../../../../redux/slices/tdrChartDataSlice";
const TDRChartActionBar: React.FC = () => {
const dispatch = useDispatch();
const [jahr, setJahr] = useState(new Date().getFullYear());
const [monat, setMonat] = useState(new Date().getMonth() + 1);
const [dateiListe, setDateiListe] = useState<string[]>([]); // Liste der Dateien
const [ausgewählteDatei, setAusgewählteDatei] = useState<string>(""); // Ausgewählte Datei
const getYearFolderName = (year: number): string => {
return `Year_${String(year).slice(-2)}`;
};
const [sortAscending, setSortAscending] = useState(true);
// Fetch directory.json basierend auf Jahr und Monat
useEffect(() => {
const loadDirectory = async () => {
const yearFolder = getYearFolderName(jahr);
const monthFolder = `Month_${monat.toString().padStart(2, "0")}`;
const path = `/CPLmockData/LastTDR/kue_01/${yearFolder}/${monthFolder}/directory.json`;
console.log("Verwendeter Pfad:", path);
try {
const response = await fetch(path);
if (!response.ok) {
console.error(
`Fehler beim Laden der Datei directory.json. HTTP-Status: ${response.status}`
);
setDateiListe([]); // Setze eine leere Liste
return;
}
const data = await response.json();
const files = data.files.map(
(file: { filename: string }) => file.filename
);
setDateiListe(files);
} catch (error) {
console.error("Fehler beim Laden der Datei directory.json:", error);
}
};
loadDirectory();
}, [jahr, monat]);
const handleSortToggle = () => {
setSortAscending(!sortAscending);
setDateiListe((prevListe) =>
[...prevListe].sort((a, b) =>
sortAscending ? a.localeCompare(b) : b.localeCompare(a)
)
);
};
const handleAktualisieren = () => {
console.log("Daten werden aktualisiert für:", jahr, monat);
};
//----------------------------------
const loadAndStoreChartData = async (url: string) => {
try {
const response = await fetch(url);
if (!response.ok) {
console.error(
`Fehler beim Laden der Daten. HTTP-Status: ${response.status}`
);
return;
}
const data = await response.json();
// Daten im Redux Store speichern
dispatch(setTDRChartData(data));
console.log("Daten erfolgreich in Redux gespeichert:", data);
} catch (error) {
console.error("Fehler beim Laden der JSON-Daten:", error);
}
};
const handleLoadData = (filename: string) => {
const yearFolder = `Year_${jahr.toString().slice(-2)}`;
const monthFolder = `Month_${monat.toString().padStart(2, "0")}`;
const filePath = `/CPLmockData/LastTDR/kue_01/${yearFolder}/${monthFolder}/${filename}`;
loadAndStoreChartData(filePath);
};
const handleDateiAuswahl = (event: React.ChangeEvent<HTMLSelectElement>) => {
const selectedFile = event.target.value;
setAusgewählteDatei(selectedFile);
console.log("Ausgewählte Datei:", selectedFile);
// Lade die Datei und speichere sie in Redux
handleLoadData(selectedFile);
};
const chartRef = useRef<HTMLCanvasElement>(null);
// Zustand für die Chart-Daten
const [loopMeasurementCurveChartData, setLoopMeasurementCurveChartData] =
useState<{ timestamp: string; tdr: number }[]>([]);
useEffect(() => {
// Aktuelles Jahr und Monat ermitteln
const currentYear = new Date().getFullYear();
const currentMonth = new Date().getMonth() + 1; // Monate sind 0-basiert
// Pfad zur directory.json-Datei erstellen
const yearFolder = `Year_${String(currentYear).slice(-2)}`;
const monthFolder = `Month_${String(currentMonth).padStart(2, "0")}`;
const path = `/CPLmockData/LastTDR/kue_01/${yearFolder}/${monthFolder}/directory.json`;
// Daten abrufen
fetch(path)
.then((response) => {
if (!response.ok) {
throw new Error(
`Fehler beim Laden der Datei: ${response.statusText}`
);
}
return response.json();
})
.then((data) => {
// Annahme: data ist ein Array von Objekten mit den Eigenschaften 'timestamp' und 'tdr'
setLoopMeasurementCurveChartData(data);
})
.catch((error) => {
console.error("Fehler beim Abrufen der Daten:", error);
});
}, []);
const BASE_URL = "http://localhost:3002";
const [showChart, setShowChart] = useState(false);
const handleFetchData = async () => {
try {
const response = await fetch(`${BASE_URL}/tdr`);
if (!response.ok) throw new Error("Fehler beim Abrufen der Daten");
const data = await response.json();
setShowChart(true);
} catch (error) {
console.error("Fehler beim Laden der Daten:", error);
}
};
return (
<div className="flex flex-wrap justify-end items-center p-2 bg-gray-100 rounded-lg space-x-2 mr-4">
<div className="flex items-center space-x-2">
<label htmlFor="jahrSelect" className="text-sm font-semibold">
Jahr
</label>
<select
id="jahrSelect"
className="border rounded px-2 py-1"
value={jahr}
onChange={(e) => setJahr(Number(e.target.value))}
>
{Array.from({ length: 11 }, (_, i) => 2020 + i).map((year) => (
<option key={year} value={year}>
{year}
</option>
))}
</select>
</div>
<div className="flex items-center space-x-2">
<label htmlFor="monatSelect" className="text-sm font-semibold">
Monat
</label>
<select
id="monatSelect"
className="border rounded px-2 py-1"
value={monat}
onChange={(e) => setMonat(Number(e.target.value))}
>
{Array.from({ length: 12 }, (_, i) => i + 1).map((month) => (
<option key={month} value={month}>
{month.toString().padStart(2, "0")}
</option>
))}
</select>
</div>
<div className="flex items-center space-x-2">
<label htmlFor="dateiSelect" className="text-sm font-semibold">
Auswahl
</label>
<select
id="dateiSelect"
className="border rounded px-2 py-1"
value={ausgewählteDatei}
onChange={handleDateiAuswahl}
>
<option value="" disabled>
Bitte wählen...
</option>
{dateiListe.map((file, index) => (
<option key={index} value={file}>
{file}
</option>
))}
</select>
</div>
<button
onClick={handleSortToggle}
className="flex items-center justify-center px-3 py-1 bg-blue-500 text-white rounded text-sm"
>
<i className={`bi bi-arrow-${sortAscending ? "down" : "up"}-short`} />
<span className="ml-1">Sortieren</span>
</button>
<button
onClick={handleAktualisieren}
className="px-3 py-1 bg-green-500 text-white rounded text-sm"
>
Aktualisieren
</button>
</div>
);
};
export default TDRChartActionBar;