Aderbruch in dashboard anzeigen bei Status

This commit is contained in:
ISA
2024-09-30 11:41:02 +02:00
parent 47070f63aa
commit 8f94d70b92
3 changed files with 65 additions and 33 deletions

View File

@@ -1,4 +1,4 @@
#Next.js Webserver #Next.js Webserver
#NEXT_PUBLIC_API_BASE_URL=http://localhost:3000 NEXT_PUBLIC_API_BASE_URL=http://localhost:3000
#CPL Webserver #CPL Webserver
NEXT_PUBLIC_API_BASE_URL=https://10.10.0.118:443 #NEXT_PUBLIC_API_BASE_URL=https://10.10.0.118:443

View File

@@ -21,6 +21,7 @@ function Dashboard() {
const [gateway, setGateway] = useState(""); const [gateway, setGateway] = useState("");
const [loading, setLoading] = useState(true); const [loading, setLoading] = useState(true);
const [error, setError] = useState(null); const [error, setError] = useState(null);
const [kueCableBreak, setKueCableBreak] = useState([]);
useEffect(() => { useEffect(() => {
loadWindowVariables(apiUrl) loadWindowVariables(apiUrl)
@@ -43,6 +44,33 @@ function Dashboard() {
setLoading(false); setLoading(false);
}); });
}, [apiUrl]); }, [apiUrl]);
useEffect(() => {
loadWindowVariables(apiUrl)
.then(() => {
if (window.kueCableBreak && Array.isArray(window.kueCableBreak)) {
// Prüfe, ob window.kueCableBreak ein Array ist
const cableBreakArray = window.kueCableBreak.map(Number);
setKueCableBreak(cableBreakArray); // Array für kueCableBreak
} else if (typeof window.kueCableBreak === "string") {
// Falls es ein String ist, splitte den String und mappe ihn in ein Array
const cableBreakArray = window.kueCableBreak.split(",").map(Number);
setKueCableBreak(cableBreakArray);
} else {
console.error(
"Konnte kueCableBreak nicht finden oder es ist kein gültiges Array/String."
);
setError(
"Konnte kueCableBreak nicht finden oder es ist kein gültiges Array/String."
);
}
setLoading(false);
})
.catch((error) => {
console.error("Fehler beim Laden des Skripts:", error);
setError(error);
setLoading(false);
});
}, [apiUrl]);
const parseMessages = (messages) => { const parseMessages = (messages) => {
messages = messages messages = messages
@@ -93,38 +121,30 @@ function Dashboard() {
const renderBaugruppentraeger = () => { const renderBaugruppentraeger = () => {
const baugruppen = []; const baugruppen = [];
// Dynamisch berechnen, wie viele Baugruppenträger benötigt werden, basierend auf der Länge von kueOnline // Adjust based on actual length of kueOnline
const numBaugruppen = Math.ceil(kueOnline.length / 8); const numBaugruppen = Math.ceil(kueOnline.length / 8);
for (let i = 0; i < numBaugruppen; i++) { for (let i = 0; i < numBaugruppen; i++) {
const slots = kueOnline.slice(i * 8, (i + 1) * 8); const slots = kueOnline.slice(i * 8, (i + 1) * 8);
// Prüfen, ob der Baugruppenträger überhaupt Zahlen oder "0" enthält baugruppen.push(
const containsNumbersOrZero = slots.some( <div key={i} className="flex bg-white shadow-md rounded-lg">
(version) => version !== "" && version !== null && version !== undefined <div className="flex gap-1">
); {slots.map((version, index) => {
const slotNumber = i * 8 + index + 1;
if (containsNumbersOrZero) { return (
baugruppen.push( <Kue705_FO
<div key={i} className="flex bg-white shadow-md rounded-lg "> key={slotNumber}
<div className="flex gap-1"> slot={slotNumber}
{slots.map((version, index) => { isOnline={version === 1} // Only pass isOnline true if the slot is connected
const slotNumber = i * 8 + index + 1; kueCableBreak={kueCableBreak}
return version !== 0 ? ( />
<Kue705_FO key={slotNumber} slot={slotNumber} /> );
) : ( })}
<div
key={slotNumber}
className="w-10 h-20 flex items-center justify-center border border-gray-300"
>
<span className="text-xs text-gray-500">Leer</span>
</div>
);
})}
</div>
</div> </div>
); </div>
} );
} }
return baugruppen; return baugruppen;
@@ -237,7 +257,7 @@ function Dashboard() {
{loading ? ( {loading ? (
<p>Lädt...</p> <p>Lädt...</p>
) : error ? ( ) : error ? (
<p className="text-red-500">{error}</p> <p className="text-red-500">{error.toString()}</p>
) : ( ) : (
renderBaugruppentraeger() renderBaugruppentraeger()
)} )}

View File

@@ -1,19 +1,31 @@
// components/Kue705_FO.jsx // components/Kue705_FO.jsx
import React from "react"; import React from "react";
const Kue705_FO = ({ slot }) => { const Kue705_FO = ({ slot, kueCableBreak, isOnline }) => {
if (!isOnline) {
return (
<div className="border border-gray-400 w-10 h-20 flex items-center justify-center bg-gray-200">
<div className="text-xs text-gray-500">Leer</div>
</div>
);
}
const isCableBreak = kueCableBreak[slot - 1] === 1;
return ( return (
<div className="border border-gray-400 w-10 h-20 flex flex-col"> <div className="border border-gray-400 w-10 h-20 flex flex-col">
{/* Erstes Kind, nimmt den restlichen Platz ein */} {/* Erstes Kind, nimmt den restlichen Platz ein */}
<div className="bg-blue-500 flex-grow flex flex-col items-center justify-center text-white text-[10px]"> <div className="bg-blue-500 flex-grow flex flex-col items-center justify-center text-white text-[10px]">
<div className="flex w-full mb-1 items-start justify-start"> <div className="flex w-full mb-1 items-start justify-start">{slot}</div>
{slot}
</div>
<div className="text-[10px]">KÜ705</div> <div className="text-[10px]">KÜ705</div>
<div className="text-[10px]">FO</div> <div className="text-[10px]">FO</div>
</div> </div>
{/* Die unteren Abschnitte behalten ihre festen Höhen */} {/* Die unteren Abschnitte behalten ihre festen Höhen */}
<div className="bg-green-500 w-full h-2/6"></div> <div
className={`w-full h-2/6 ${
isCableBreak ? "bg-red-500" : "bg-green-500"
}`}
></div>
<div className="bg-blue-500 w-full h-1/6"></div> <div className="bg-blue-500 w-full h-1/6"></div>
</div> </div>
); );