feat: Messverlauf bei Systemwerten (Temperatur und Spannungen) mit Datumsauswahl

This commit is contained in:
ISA
2025-09-03 13:38:05 +02:00
parent f4f4c28cb7
commit a9ccdfc9ab
7 changed files with 156 additions and 88 deletions

View File

@@ -0,0 +1,96 @@
"use client";
// components/main/system/SystemChartActionBar.tsx
import React from "react";
import DateRangePicker from "@/components/common/DateRangePicker";
import { Listbox } from "@headlessui/react";
type Props = {
zeitraum: "DIA0" | "DIA1" | "DIA2";
setZeitraum: (typ: "DIA0" | "DIA1" | "DIA2") => void;
onFetchData: () => void;
isLoading?: boolean;
className?: string;
};
const SystemChartActionBar: React.FC<Props> = ({
zeitraum,
setZeitraum,
onFetchData,
isLoading = false,
className = "",
}) => {
return (
<div
className={`flex items-center justify-start gap-3 mb-4 flex-wrap ${className}`}
>
{/* DateRangePicker nutzt globalen Redux-Slice */}
<DateRangePicker compact />
{/* Zeitraum (DIA0/DIA1/DIA2) */}
<label className="font-medium text-sm">Zeitraum:</label>
<Listbox value={zeitraum} onChange={setZeitraum}>
<div className="relative w-48">
<Listbox.Button className="w-full border px-3 py-1 rounded text-left bg-white flex justify-between items-center text-sm">
<span>
{
{ DIA0: "Alle Messwerte", DIA1: "Stündlich", DIA2: "Täglich" }[
zeitraum
]
}
</span>
<svg
className="w-5 h-5 text-gray-400"
viewBox="0 0 20 20"
fill="currentColor"
>
<path
fillRule="evenodd"
d="M5.23 7.21a.75.75 0 011.06.02L10 10.585l3.71-3.355a.75.75 0 111.02 1.1l-4.25 3.85a.75.75 0 01-1.02 0l-4.25-3.85a.75.75 0 01.02-1.06z"
clipRule="evenodd"
/>
</svg>
</Listbox.Button>
<Listbox.Options className="absolute z-50 mt-1 w-full border rounded bg-white shadow max-h-60 overflow-auto text-sm">
{["DIA0", "DIA1", "DIA2"].map((option) => (
<Listbox.Option
key={option}
value={option}
className={({ selected, active }) =>
`px-4 py-1 cursor-pointer ${
selected
? "bg-littwin-blue text-white"
: active
? "bg-gray-200"
: ""
}`
}
>
{
{
DIA0: "Alle Messwerte",
DIA1: "Stündlich",
DIA2: "Täglich",
}[option as "DIA0" | "DIA1" | "DIA2"]
}
</Listbox.Option>
))}
</Listbox.Options>
</div>
</Listbox>
{/* Daten laden */}
<button
onClick={onFetchData}
className={`px-4 py-1 bg-littwin-blue text-white rounded text-sm ${
isLoading ? "cursor-wait opacity-70" : ""
}`}
disabled={isLoading}
aria-busy={isLoading}
>
{isLoading ? "Laden..." : "Daten laden"}
</button>
</div>
);
};
export default SystemChartActionBar;