From 8d87d4a079f89ed3f4230f4d921f7250828fa295 Mon Sep 17 00:00:00 2001 From: ISA Date: Thu, 13 Feb 2025 13:54:39 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20Separate=20Darstellung=20f=C3=BCr=20Loo?= =?UTF-8?q?p-=20und=20TDR-Charts=20implementiert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `LoopMeasurementChart.tsx` und `TDRChart.tsx` mit Mock-Daten für Tests ergänzt. - `LoopChartActionBar.tsx` und `TDRChartActionBar.tsx` korrekt in `ChartSwitcher.tsx` integriert. - `ChartModal.tsx` umbenannt zu `ChartSwitcher.tsx` für klarere Struktur. - Redux `activeMode` sorgt jetzt für den richtigen Wechsel zwischen Loop- und TDR-Charts. - Verbesserte Verzeichnisstruktur für bessere Wartbarkeit und Skalierbarkeit. --- .../kueModal/LoopTDRChartActionBar.tsx | 103 ----------- components/modules/kue705FO/Kue705FO.tsx | 25 ++- .../kue705FO}/KueModal.tsx | 0 .../modules/kue705FO/charts/ChartModal.tsx | 171 ------------------ .../modules/kue705FO/charts/ChartSwitcher.tsx | 76 ++++++++ .../kue705FO/charts}/DateRangePicker.tsx | 1 + .../kue705FO/charts/LoopMeasurementChart.tsx | 110 ----------- .../LoopChartActionBar.tsx | 41 +++++ .../LoopMeasurementChart.tsx} | 31 ++-- .../kue705FO/charts/TDRChart/TDRChart.tsx | 72 ++++++++ .../charts/TDRChart/TDRChartActionBar.tsx | 41 +++++ config/webVersion.ts | 2 +- 12 files changed, 264 insertions(+), 409 deletions(-) delete mode 100644 components/modales/kueModal/LoopTDRChartActionBar.tsx rename components/{modales/kueModal => modules/kue705FO}/KueModal.tsx (100%) delete mode 100644 components/modules/kue705FO/charts/ChartModal.tsx create mode 100644 components/modules/kue705FO/charts/ChartSwitcher.tsx rename components/{modales/kueModal => modules/kue705FO/charts}/DateRangePicker.tsx (96%) delete mode 100644 components/modules/kue705FO/charts/LoopMeasurementChart.tsx create mode 100644 components/modules/kue705FO/charts/LoopMeasurementChart/LoopChartActionBar.tsx rename components/modules/kue705FO/charts/{TDRChart.tsx => LoopMeasurementChart/LoopMeasurementChart.tsx} (69%) create mode 100644 components/modules/kue705FO/charts/TDRChart/TDRChart.tsx create mode 100644 components/modules/kue705FO/charts/TDRChart/TDRChartActionBar.tsx diff --git a/components/modales/kueModal/LoopTDRChartActionBar.tsx b/components/modales/kueModal/LoopTDRChartActionBar.tsx deleted file mode 100644 index 9395fb8..0000000 --- a/components/modales/kueModal/LoopTDRChartActionBar.tsx +++ /dev/null @@ -1,103 +0,0 @@ -import React, { useState } from "react"; -import DateRangePicker from "./DateRangePicker"; -import ChartModal from "../../modules/kue705FO/charts/ChartModal"; // Importiere das Chart-Modal -import { useDispatch, useSelector } from "react-redux"; -import { setChartData } from "../../../redux/slices/chartDataSlice"; -import { RootState } from "../../../redux/store"; - -const LoopTDRChartActionBar: React.FC = () => { - const dispatch = useDispatch(); - const BASE_URL = "http://localhost:3002"; - - const [vonDatum, setVonDatum] = useState(new Date()); - const [bisDatum, setBisDatum] = useState(new Date()); - const [errorMessage, setErrorMessage] = useState(null); - const [showChartModal, setShowChartModal] = useState(false); - - // Redux-Daten holen (damit sich das ChartModal darauf bezieht) - const chartData = useSelector((state: RootState) => state.chartData.data); - - const fetchAllData = async () => { - let index = 0; - let allData: any[] = []; - - while (true) { - const url = `${BASE_URL}/${index}`; - try { - const response = await fetch(url); - - if (!response.ok) { - if (response.status === 404) { - console.log( - `📡 Kein weiteres Objekt gefunden bei Index ${index}, Stoppe Abruf.` - ); - break; - } - throw new Error(`Fehler beim Abrufen von ${url}: ${response.status}`); - } - - const jsonData = await response.json(); - allData.push(jsonData); - index++; - } catch (error) { - console.error(`❌ Fehler bei ${url}:`, error); - break; - } - } - console.log("📥 Alle abgerufenen JSON-Daten:", allData); - dispatch(setChartData(allData)); // 🔥 Daten in Redux speichern - return allData; - }; - - const handleAktualisieren = async () => { - try { - setErrorMessage(null); - - console.log("📡 API Haupt-URL:", BASE_URL); - - const allData = await fetchAllData(); - - if (allData.length === 0) { - console.error("❌ Keine Daten gefunden!"); - setErrorMessage("❌ Keine Daten gefunden."); - return; - } - - console.log("📥 Alle abgerufenen JSON-Daten:"); - console.table(allData); - } catch (error) { - console.error("❌ Fehler beim Abrufen der Daten:", error); - setErrorMessage("❌ Fehler beim Laden der Daten."); - } - }; - - return ( -
- - - - - - - {showChartModal && ( - setShowChartModal(false)} - chartRef={React.createRef()} - /> - )} -
- ); -}; - -export default LoopTDRChartActionBar; diff --git a/components/modules/kue705FO/Kue705FO.tsx b/components/modules/kue705FO/Kue705FO.tsx index 2b73302..86789b0 100644 --- a/components/modules/kue705FO/Kue705FO.tsx +++ b/components/modules/kue705FO/Kue705FO.tsx @@ -1,9 +1,9 @@ -"use client"; // components/modules/Kue705FO.tsx +"use client"; // components/modules/kue705FO/Kue705FO.tsx import React, { useState, useEffect, useRef } from "react"; import ReactModal from "react-modal"; import Chart from "chart.js/auto"; import { useSelector } from "react-redux"; -import KueModal from "../../modales/kueModal/KueModal"; +import KueModal from "./KueModal"; import "bootstrap-icons/font/bootstrap-icons.css"; // Import Bootstrap Icons import { RootState } from "../../../redux/store"; import { DataTDR } from "../../../redux/types/chartDataTypesTDR"; @@ -12,7 +12,6 @@ import { setSelectedChartData, setSelectedFileName, } from "../../../redux/slices/variablesSlice"; -import TDRPopup from "../../modales/kueModal/LoopTDRChartActionBar"; import { createLoopChart, createTDRChart } from "../../../utils/chartUtils"; import { getAlarmDisplayText } from "../../../utils/alarmUtils"; import { goLoop } from "../../../utils/goLoop"; @@ -20,8 +19,10 @@ import { goTDR } from "../../../utils/goTDR"; import { loadTDRChartData } from "../../../utils/loadTDRChartData"; import { loadLoopChartData } from "../../../utils/loadLoopChartData"; import { Kue705FOProps } from "../../../types/components/Kue705FOProps"; -import ChartModal from "./charts/ChartModal"; +import ChartSwitcher from "./charts/ChartSwitcher"; import { setActiveMode } from "../../../redux/slices/chartDataSlice"; +import LoopMeasurementChart from "./charts/LoopMeasurementChart/LoopMeasurementChart"; +import TDRChart from "./charts/TDRChart/TDRChart"; const Kue705FO: React.FC = ({ isolationswert, @@ -91,10 +92,11 @@ const Kue705FO: React.FC = ({ const handleOpenChartModal = () => { setShowChartModal(true); + if (activeButton === "TDR") { - loadTDRChartData(selectedFileName, setChartData); + dispatch(setActiveMode("TDR")); } else { - loadLoopChartData(slotIndex, setChartData); + dispatch(setActiveMode("Schleife")); } }; @@ -430,11 +432,16 @@ const Kue705FO: React.FC = ({ {/* Modal für Messkurve */} {showChartModal && ( - + > + {activeButton === "Schleife" ? ( + + ) : ( + + )} + )} ) : ( diff --git a/components/modales/kueModal/KueModal.tsx b/components/modules/kue705FO/KueModal.tsx similarity index 100% rename from components/modales/kueModal/KueModal.tsx rename to components/modules/kue705FO/KueModal.tsx diff --git a/components/modules/kue705FO/charts/ChartModal.tsx b/components/modules/kue705FO/charts/ChartModal.tsx deleted file mode 100644 index 371364d..0000000 --- a/components/modules/kue705FO/charts/ChartModal.tsx +++ /dev/null @@ -1,171 +0,0 @@ -import React, { useEffect, useRef } from "react"; -import ReactModal from "react-modal"; -import { useSelector } from "react-redux"; -import { RootState } from "../../../../redux/store"; -import Chart from "chart.js/auto"; -import "chartjs-adapter-date-fns"; -import { parseISO } from "date-fns"; -import LoopTDRPopup from "../../../modales/kueModal/LoopTDRChartActionBar"; - -interface ChartModalProps { - isOpen: boolean; - onClose: () => void; -} - -const ChartModal: React.FC = ({ isOpen, onClose }) => { - const chartRef = useRef(null); - const chartInstance = useRef(null); - - // Redux State abrufen - const chartData = useSelector((state: RootState) => state.chartData.data); - const activeMode = useSelector( - (state: RootState) => state.chartData.activeMode - ); - - useEffect(() => { - if (chartRef.current && chartData.length > 0) { - if (chartInstance.current) { - chartInstance.current.destroy(); - } - - const ctx = chartRef.current.getContext("2d"); - if (ctx) { - const labels = chartData.map((entry) => - entry.timestamp ? parseISO(entry.timestamp) : new Date() - ); - - chartInstance.current = new Chart(ctx, { - type: "line", - data: { - labels, - datasets: [ - { - label: "Isolationswiderstand (MOhm)", - data: chartData.map((entry) => entry.isolation ?? 0), - borderColor: "rgba(0, 123, 255, 1)", - backgroundColor: "rgba(0, 123, 255, 0.2)", - tension: 0.1, - yAxisID: "y-left", - }, - { - label: "Schleifenwiderstand (kOhm)", - data: chartData.map((entry) => entry.loop ?? 0), - borderColor: "rgba(108, 117, 125, 1)", - backgroundColor: "rgba(108, 117, 125, 0.2)", - tension: 0.1, - yAxisID: "y-right", - }, - ], - }, - options: { - responsive: true, - maintainAspectRatio: false, - scales: { - x: { - type: "time", - time: { - unit: "hour", - tooltipFormat: "dd.MM.yyyy HH:mm", - }, - title: { - display: true, - text: "Zeit", - }, - grid: { - drawBorder: true, // 🔥 Stellt sicher, dass die X-Achse sichtbar ist - }, - }, - y: { - id: "y-left", - position: "left", - title: { - display: true, - text: "MOhm", - }, - min: 0, - max: - Math.max(...chartData.map((entry) => entry.isolation ?? 1)) + - 10, - grid: { - drawOnChartArea: true, // 🔥 Korrektur, damit es sich nicht überlagert - }, - }, - "y-right": { - id: "y-right", - position: "right", - title: { - display: true, - text: "kOhm", - }, - min: 0, - max: Math.max(...chartData.map((entry) => entry.loop ?? 1)) + 1, - grid: { - drawOnChartArea: false, // 🔥 Verhindert doppelte Linien - }, - }, - }, - }, - }); - } - } - - return () => { - if (chartInstance.current) { - chartInstance.current.destroy(); - chartInstance.current = null; - } - }; - }, [chartData, activeMode]); - - return ( - - - - {/* Beibehaltung der UI mit Kalender und Buttons */} -
- -
- - {/* Canvas für das Chart */} - -
- ); -}; - -export default ChartModal; diff --git a/components/modules/kue705FO/charts/ChartSwitcher.tsx b/components/modules/kue705FO/charts/ChartSwitcher.tsx new file mode 100644 index 0000000..3838790 --- /dev/null +++ b/components/modules/kue705FO/charts/ChartSwitcher.tsx @@ -0,0 +1,76 @@ +// /components/modules/kue705FO/charts/ChartSwitcher.tsx +import React from "react"; +import ReactModal from "react-modal"; +import LoopChartActionBar from "./LoopMeasurementChart/LoopChartActionBar"; +import TDRChartActionBar from "./TDRChart/TDRChartActionBar"; +import LoopMeasurementChart from "./LoopMeasurementChart/LoopMeasurementChart"; +import TDRChart from "./TDRChart/TDRChart"; +import { useSelector } from "react-redux"; +import { RootState } from "../../../../redux/store"; + +interface ChartSwitcherProps { + isOpen: boolean; + onClose: () => void; +} + +const ChartSwitcher: React.FC = ({ isOpen, onClose }) => { + const activeMode = useSelector( + (state: RootState) => state.chartData.activeMode + ); + + return ( + + + + {/* Nur die richtige ActionBar und das richtige Chart basierend auf dem Modus anzeigen */} + {activeMode === "Schleife" ? ( + <> +

Schleifenmessung

+ + {/* 🎯 Hier wird das Chart gerendert */} + + ) : ( + <> +

TDR-Messung

+ + {/* 🎯 Hier wird das Chart gerendert */} + + )} +
+ ); +}; + +export default ChartSwitcher; diff --git a/components/modales/kueModal/DateRangePicker.tsx b/components/modules/kue705FO/charts/DateRangePicker.tsx similarity index 96% rename from components/modales/kueModal/DateRangePicker.tsx rename to components/modules/kue705FO/charts/DateRangePicker.tsx index e83fcb3..6603e05 100644 --- a/components/modales/kueModal/DateRangePicker.tsx +++ b/components/modules/kue705FO/charts/DateRangePicker.tsx @@ -1,3 +1,4 @@ +// /components/modules/kue705FO/charts/DateRangePicker.tsx import React, { useState, useEffect } from "react"; import DatePicker from "react-datepicker"; import "react-datepicker/dist/react-datepicker.css"; diff --git a/components/modules/kue705FO/charts/LoopMeasurementChart.tsx b/components/modules/kue705FO/charts/LoopMeasurementChart.tsx deleted file mode 100644 index d447746..0000000 --- a/components/modules/kue705FO/charts/LoopMeasurementChart.tsx +++ /dev/null @@ -1,110 +0,0 @@ -import React, { useEffect, useRef } from "react"; -import { useSelector } from "react-redux"; -import { RootState } from "../../../redux/store"; -import Chart from "chart.js/auto"; -import "chartjs-adapter-date-fns"; -import { parseISO } from "date-fns"; - -const LoopMeasurementChart: React.FC = () => { - const chartRef = useRef(null); - const chartInstance = useRef(null); - - // Redux-Daten abrufen - const chartData = useSelector((state: RootState) => state.chartData.data); - - useEffect(() => { - if (chartRef.current && chartData.length > 0) { - if (chartInstance.current) { - chartInstance.current.destroy(); // Bestehendes Chart zerstören - } - - const ctx = chartRef.current.getContext("2d"); - if (ctx) { - const labels = chartData.map((entry) => - entry.timestamp ? parseISO(entry.timestamp) : new Date() - ); - - chartInstance.current = new Chart(ctx, { - type: "line", - data: { - labels, - datasets: [ - { - label: "Schleifenwiderstand (kOhm)", - data: chartData.map((entry) => entry.loop ?? 0), - borderColor: "rgba(75, 192, 192, 1)", // Türkis - backgroundColor: "rgba(75, 192, 192, 0.2)", - tension: 0.1, - yAxisID: "y-left", - }, - { - label: "Zusätzliche Schleifenmesswerte", - data: chartData.map((entry) => entry.additional ?? 0), - borderColor: "rgba(255, 159, 64, 1)", // Orange - backgroundColor: "rgba(255, 159, 64, 0.2)", - tension: 0.1, - yAxisID: "y-right", - }, - ], - }, - options: { - responsive: true, - maintainAspectRatio: false, - scales: { - x: { - type: "time", - time: { - unit: "hour", - tooltipFormat: "dd.MM.yyyy HH:mm", - }, - title: { - display: true, - text: "Zeit", - }, - grid: { - drawBorder: true, - }, - }, - y: { - id: "y-left", - position: "left", - title: { - display: true, - text: "kOhm", - }, - min: 0, - max: Math.max(...chartData.map((entry) => entry.loop ?? 1)) + 1, - }, - "y-right": { - id: "y-right", - position: "right", - title: { - display: true, - text: "Zusätzliche Werte", - }, - min: 0, - max: - Math.max(...chartData.map((entry) => entry.additional ?? 1)) + - 1, - grid: { - drawOnChartArea: false, - }, - }, - }, - }, - }); - } - } - - return () => { - if (chartInstance.current) { - chartInstance.current.destroy(); - chartInstance.current = null; - } - }; - }, [chartData]); - - return ; -}; - -export default LoopMeasurementChart; diff --git a/components/modules/kue705FO/charts/LoopMeasurementChart/LoopChartActionBar.tsx b/components/modules/kue705FO/charts/LoopMeasurementChart/LoopChartActionBar.tsx new file mode 100644 index 0000000..177ec5c --- /dev/null +++ b/components/modules/kue705FO/charts/LoopMeasurementChart/LoopChartActionBar.tsx @@ -0,0 +1,41 @@ +// /components/modules/kue705FO/charts/LoopMeasurementChart/LoopChartActionBar.tsx +import React, { useState } from "react"; +import DateRangePicker from "../DateRangePicker"; +import LoopMeasurementChart from "./LoopMeasurementChart"; +import { useDispatch } from "react-redux"; +import { setChartData } from "../../../../../redux/slices/chartDataSlice"; + +const LoopChartActionBar: React.FC = () => { + const dispatch = useDispatch(); + const BASE_URL = "http://localhost:3002"; + + const [showChart, setShowChart] = useState(false); + + const handleFetchData = async () => { + try { + const response = await fetch(`${BASE_URL}/loop`); + if (!response.ok) throw new Error("Fehler beim Abrufen der Daten"); + + const data = await response.json(); + dispatch(setChartData(data)); + setShowChart(true); + } catch (error) { + console.error("Fehler beim Laden der Daten:", error); + } + }; + + return ( +
+ {}} setBisDatum={() => {}} /> + + {showChart && } +
+ ); +}; + +export default LoopChartActionBar; diff --git a/components/modules/kue705FO/charts/TDRChart.tsx b/components/modules/kue705FO/charts/LoopMeasurementChart/LoopMeasurementChart.tsx similarity index 69% rename from components/modules/kue705FO/charts/TDRChart.tsx rename to components/modules/kue705FO/charts/LoopMeasurementChart/LoopMeasurementChart.tsx index fd31e62..1da0812 100644 --- a/components/modules/kue705FO/charts/TDRChart.tsx +++ b/components/modules/kue705FO/charts/LoopMeasurementChart/LoopMeasurementChart.tsx @@ -1,17 +1,23 @@ import React, { useEffect, useRef } from "react"; import { useSelector } from "react-redux"; -import { RootState } from "../../../redux/store"; +import { RootState } from "../../../../redux/store"; import Chart from "chart.js/auto"; import "chartjs-adapter-date-fns"; import { parseISO } from "date-fns"; -const TDRChart: React.FC = () => { +const LoopMeasurementChart: React.FC = () => { const chartRef = useRef(null); const chartInstance = useRef(null); - const chartData = useSelector((state: RootState) => state.chartData.data); + + // Nutze entweder Redux-Daten oder Mock-Daten + const chartData = useSelector((state: RootState) => state.chartData.data) || [ + { timestamp: "2025-02-13T12:00:00", loop: 0.8 }, + { timestamp: "2025-02-13T12:10:00", loop: 1.2 }, + { timestamp: "2025-02-13T12:20:00", loop: 1.5 }, + ]; useEffect(() => { - if (chartRef.current && chartData.length > 0) { + if (chartRef.current) { if (chartInstance.current) { chartInstance.current.destroy(); } @@ -24,8 +30,8 @@ const TDRChart: React.FC = () => { labels: chartData.map((entry) => parseISO(entry.timestamp)), datasets: [ { - label: "Isolationswiderstand (MOhm)", - data: chartData.map((entry) => entry.isolation ?? 0), + label: "Schleifenwiderstand (kOhm)", + data: chartData.map((entry) => entry.loop ?? 0), borderColor: "rgba(0, 123, 255, 1)", backgroundColor: "rgba(0, 123, 255, 0.2)", tension: 0.1, @@ -38,18 +44,13 @@ const TDRChart: React.FC = () => { scales: { x: { type: "time", - time: { - unit: "hour", - tooltipFormat: "dd.MM.yyyy HH:mm", - }, + time: { unit: "minute", tooltipFormat: "dd.MM.yyyy HH:mm" }, title: { display: true, text: "Zeit" }, }, y: { - title: { display: true, text: "MOhm" }, + title: { display: true, text: "kOhm" }, min: 0, - max: - Math.max(...chartData.map((entry) => entry.isolation ?? 1)) + - 10, + max: 2, }, }, }, @@ -68,4 +69,4 @@ const TDRChart: React.FC = () => { return ; }; -export default TDRChart; +export default LoopMeasurementChart; diff --git a/components/modules/kue705FO/charts/TDRChart/TDRChart.tsx b/components/modules/kue705FO/charts/TDRChart/TDRChart.tsx new file mode 100644 index 0000000..9bd87e2 --- /dev/null +++ b/components/modules/kue705FO/charts/TDRChart/TDRChart.tsx @@ -0,0 +1,72 @@ +import React, { useEffect, useRef } from "react"; +import { useSelector } from "react-redux"; +import { RootState } from "../../../../redux/store"; +import Chart from "chart.js/auto"; +import "chartjs-adapter-date-fns"; +import { parseISO } from "date-fns"; + +const TDRChart: React.FC = () => { + const chartRef = useRef(null); + const chartInstance = useRef(null); + + // Nutze entweder Redux-Daten oder Mock-Daten + const chartData = useSelector((state: RootState) => state.chartData.data) || [ + { timestamp: "2025-02-13T12:00:00", tdr: 2.1 }, + { timestamp: "2025-02-13T12:10:00", tdr: 2.3 }, + { timestamp: "2025-02-13T12:20:00", tdr: 2.6 }, + ]; + + useEffect(() => { + if (chartRef.current) { + if (chartInstance.current) { + chartInstance.current.destroy(); + } + + const ctx = chartRef.current.getContext("2d"); + if (ctx) { + chartInstance.current = new Chart(ctx, { + type: "line", + data: { + labels: chartData.map((entry) => parseISO(entry.timestamp)), + datasets: [ + { + label: "TDR Entfernung (km)", + data: chartData.map((entry) => entry.tdr ?? 0), + borderColor: "rgba(255, 99, 132, 1)", + backgroundColor: "rgba(255, 99, 132, 0.2)", + tension: 0.1, + }, + ], + }, + options: { + responsive: true, + maintainAspectRatio: false, + scales: { + x: { + type: "time", + time: { unit: "minute", tooltipFormat: "dd.MM.yyyy HH:mm" }, + title: { display: true, text: "Zeit" }, + }, + y: { + title: { display: true, text: "km" }, + min: 0, + max: 3, + }, + }, + }, + }); + } + } + + return () => { + if (chartInstance.current) { + chartInstance.current.destroy(); + chartInstance.current = null; + } + }; + }, [chartData]); + + return ; +}; + +export default TDRChart; diff --git a/components/modules/kue705FO/charts/TDRChart/TDRChartActionBar.tsx b/components/modules/kue705FO/charts/TDRChart/TDRChartActionBar.tsx new file mode 100644 index 0000000..a42241e --- /dev/null +++ b/components/modules/kue705FO/charts/TDRChart/TDRChartActionBar.tsx @@ -0,0 +1,41 @@ +// /components/modules/kue705FO/charts/TDRChart/TDRChartActionBar.tsx +import React, { useState } from "react"; +import DateRangePicker from "../DateRangePicker"; +import TDRChart from "./TDRChart"; +import { useDispatch } from "react-redux"; +import { setChartData } from "../../../../../redux/slices/chartDataSlice"; + +const TDRChartActionBar: React.FC = () => { + const dispatch = useDispatch(); + 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(); + dispatch(setChartData(data)); + setShowChart(true); + } catch (error) { + console.error("Fehler beim Laden der Daten:", error); + } + }; + + return ( +
+ {}} setBisDatum={() => {}} /> + + {showChart && } +
+ ); +}; + +export default TDRChartActionBar; diff --git a/config/webVersion.ts b/config/webVersion.ts index 37f877f..5ff97bd 100644 --- a/config/webVersion.ts +++ b/config/webVersion.ts @@ -5,5 +5,5 @@ 2: Patch oder Hotfix (Bugfixes oder kleine Änderungen). */ -const webVersion = "1.0.6.10"; +const webVersion = "1.0.6.11"; export default webVersion;