docs: Zusatzfunktionen (Kai, 25.06.2025) in TODO.md ergänzt

This commit is contained in:
ISA
2025-06-25 11:42:42 +02:00
parent ca2a0cb00d
commit 2fcd0755a4
29 changed files with 369 additions and 122 deletions

View File

@@ -38,7 +38,11 @@ export default function AnalogInputsChart({
const dispatch = useDispatch<AppDispatch>();
const { data, isLoading, error } = useSelector(
(state: RootState) => state.analogInputsHistory
);
) as {
data: { [key: string]: any[] };
isLoading: boolean;
error: any;
};
useEffect(() => {
dispatch(getAnalogInputsHistoryThunk());
@@ -95,7 +99,7 @@ export default function AnalogInputsChart({
x: {
type: "time" as const,
time: {
unit: "hour",
unit: "hour" as const,
tooltipFormat: "HH:mm 'Uhr' dd.MM.",
displayFormats: {
hour: "HH:mm",

View File

@@ -1,4 +1,16 @@
"use client"; // /components/main/analogInputs/AnalogInputsTable.tsx
export type AnalogInput = {
id: number;
value: number;
label: string;
unit?: string; // Make unit optional if it may not exist
offset: number;
factor: number;
loggerInterval: number;
weighting: number;
};
import React, { useEffect } from "react";
import { useDispatch, useSelector } from "react-redux";
import { RootState, AppDispatch } from "@/redux/store";

View File

@@ -9,7 +9,13 @@ import outputIcon from "@iconify/icons-mdi/output";
import switchIcon from "@iconify/icons-ion/switch";
import { setDigitalOutputs } from "@/redux/slices/digitalOutputsSlice";
export default function DigitalOutputsWidget({ openOutputModal }) {
interface DigitalOutputsWidgetProps {
openOutputModal: (output: any) => void;
}
export default function DigitalOutputsWidget({
openOutputModal,
}: DigitalOutputsWidgetProps) {
const dispatch = useDispatch<AppDispatch>();
const digitalOutputs = useSelector(
(state: RootState) => state.digitalOutputsSlice.outputs

View File

@@ -3,7 +3,7 @@ import { useState, useEffect } from "react";
import { useSelector } from "react-redux";
import { RootState } from "../../../../redux/store";
export function useSystemSettings(showModal: boolean) {
const settings = useSelector((state: RootState) => state.systemSettings);
const settings = useSelector((state: RootState) => state.systemSettingsSlice);
const [formValues, setFormValues] = useState(settings);
const [originalValues, setOriginalValues] = useState({});

View File

@@ -16,13 +16,22 @@ export function generateKeyAndIV() {
}
// Generiert einen verschlüsselten Token
export function generateToken(user) {
const payload = {
interface UserPayload {
username: string;
role: string;
}
interface TokenPayload extends UserPayload {
exp: number;
}
export function generateToken(user: UserPayload): string {
const payload: TokenPayload = {
username: user.username,
role: user.role,
exp: Date.now() + 5 * 60 * 1000, // Ablaufzeit: 5 Minuten
};
const token = JSON.stringify(payload);
const token: string = JSON.stringify(payload);
const { key, iv } = generateKeyAndIV();
return CryptoJS.AES.encrypt(token, key, { iv }).toString();
}

View File

@@ -4,16 +4,22 @@ import { Icon } from "@iconify/react";
import { useSelector } from "react-redux";
import { RootState } from "../../../redux/store";
const VersionInfo: React.FC = () => {
type VersionInfoProps = {
className?: string;
};
const VersionInfo: React.FC<VersionInfoProps> = ({ className = "" }) => {
const appVersion =
useSelector((state: RootState) => state.systemSettingsSlice.appVersion) ||
"Unbekannt";
const webVersion = useSelector(
(state: RootState) => state.webVersionSlice.appVersion
); // Webversion aus Redux holen
);
return (
<div className="bg-gray-50 p-4 rounded-lg shadow-sm border border-gray-200 w-full laptop:p-2">
<div
className={`bg-gray-50 rounded-lg shadow-sm border border-gray-200 w-full laptop:p-2 ${className}`}
>
<h2 className="text-lg font-semibold text-gray-700 mb-2">
Versionsinformationen
</h2>