feat(kabelname): Anzeige des Kabelnamens statt Bezeichnung unter jedem Modul (Änderungswunsch)
This commit is contained in:
15
CHANGELOG.md
15
CHANGELOG.md
@@ -4,6 +4,21 @@ Alle Änderungen und Versionen des CPLv4.0 Frontends chronologisch dokumentiert.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## [1.6.407] – 2025-06-16
|
||||||
|
|
||||||
|
### Feature: Kabelname statt Bezeichnung
|
||||||
|
|
||||||
|
- In `Kue705FO.tsx` wird jetzt **der Kabelname (`kueName`)** unterhalb jedes Moduls angezeigt, statt der bisherigen Kabelbezeichnung (`kueID`)
|
||||||
|
- Im Einstellungsmodal (`KueEinstellung.tsx`) wurde:
|
||||||
|
- `kueID` als **readOnly** markiert (nicht mehr beschreibbar)
|
||||||
|
- Ein neues editierbares Feld für `kueName` hinzugefügt
|
||||||
|
- Hochkommas `'` werden automatisch entfernt
|
||||||
|
- Änderungen werden dauerhaft per `&KIA${slot}=${name}` an das CPL-Gerät gesendet
|
||||||
|
- State & `window.win_kueName` werden synchronisiert, damit Änderungen sofort und dauerhaft angezeigt werden
|
||||||
|
- Debug-Funktion für `fetch`-Monitoring entfernt
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## [1.6.403] – 2025-05-13
|
## [1.6.403] – 2025-05-13
|
||||||
|
|
||||||
### Sicherheit & UI
|
### Sicherheit & UI
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ const Kue705FO: React.FC<Kue705FOProps> = ({
|
|||||||
);
|
);
|
||||||
|
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
|
const { kueName } = useSelector((state: RootState) => state.kueDataSlice);
|
||||||
|
|
||||||
const chartRef = useRef(null);
|
const chartRef = useRef(null);
|
||||||
|
|
||||||
@@ -262,7 +263,7 @@ const Kue705FO: React.FC<Kue705FOProps> = ({
|
|||||||
<div className="absolute top-[2.5rem] left-[4.688rem] w-[2.5rem] h-[0.188rem] bg-white z-0"></div>
|
<div className="absolute top-[2.5rem] left-[4.688rem] w-[2.5rem] h-[0.188rem] bg-white z-0"></div>
|
||||||
|
|
||||||
<div className="absolute bottom-[1.25rem] left-0 right-0 text-black text-[0.625rem] bg-gray-300 p-[0.063rem] text-center">
|
<div className="absolute bottom-[1.25rem] left-0 right-0 text-black text-[0.625rem] bg-gray-300 p-[0.063rem] text-center">
|
||||||
{currentModulName || `Modul ${slotIndex + 1}`}
|
{kueName?.[slotIndex] || `Modul ${slotIndex + 1}`}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="absolute bottom-[0.063rem] right-[0.063rem] text-black text-[0.5rem]">
|
<div className="absolute bottom-[0.063rem] right-[0.063rem] text-black text-[0.5rem]">
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import { setKueData } from "../../../../../redux/slices/kueDataSlice";
|
|||||||
|
|
||||||
export interface OriginalValues {
|
export interface OriginalValues {
|
||||||
kueID: string[];
|
kueID: string[];
|
||||||
|
kueName: string[];
|
||||||
isolationsgrenzwerte: number[];
|
isolationsgrenzwerte: number[];
|
||||||
verzoegerung: number[];
|
verzoegerung: number[];
|
||||||
untereSchleifenGrenzwerte: number[];
|
untereSchleifenGrenzwerte: number[];
|
||||||
@@ -13,6 +14,7 @@ export interface OriginalValues {
|
|||||||
|
|
||||||
export interface HandleSaveParams {
|
export interface HandleSaveParams {
|
||||||
ids: string[];
|
ids: string[];
|
||||||
|
kueName: string[];
|
||||||
isolationsgrenzwerte: number[];
|
isolationsgrenzwerte: number[];
|
||||||
verzoegerung: number[];
|
verzoegerung: number[];
|
||||||
untereSchleifenGrenzwerte: number[];
|
untereSchleifenGrenzwerte: number[];
|
||||||
@@ -21,6 +23,7 @@ export interface HandleSaveParams {
|
|||||||
speicherintervall: number[];
|
speicherintervall: number[];
|
||||||
originalValues: {
|
originalValues: {
|
||||||
kueID: string[];
|
kueID: string[];
|
||||||
|
kueName: string[];
|
||||||
isolationsgrenzwerte: number[];
|
isolationsgrenzwerte: number[];
|
||||||
verzoegerung: number[];
|
verzoegerung: number[];
|
||||||
untereSchleifenGrenzwerte: number[];
|
untereSchleifenGrenzwerte: number[];
|
||||||
@@ -46,6 +49,7 @@ const isDifferent = (a: any, b: any): boolean => {
|
|||||||
|
|
||||||
const handleSave = async ({
|
const handleSave = async ({
|
||||||
ids,
|
ids,
|
||||||
|
kueName,
|
||||||
isolationsgrenzwerte,
|
isolationsgrenzwerte,
|
||||||
verzoegerung,
|
verzoegerung,
|
||||||
untereSchleifenGrenzwerte,
|
untereSchleifenGrenzwerte,
|
||||||
@@ -63,6 +67,11 @@ const handleSave = async ({
|
|||||||
if (isDifferent(ids[slot], originalValues.kueID[slot])) {
|
if (isDifferent(ids[slot], originalValues.kueID[slot])) {
|
||||||
changesForFile.KID = ids[slot];
|
changesForFile.KID = ids[slot];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isDifferent(kueName[slot], originalValues.kueName[slot])) {
|
||||||
|
changesForFile.KIA = kueName[slot];
|
||||||
|
}
|
||||||
|
|
||||||
if (
|
if (
|
||||||
isDifferent(
|
isDifferent(
|
||||||
isolationsgrenzwerte[slot],
|
isolationsgrenzwerte[slot],
|
||||||
@@ -111,6 +120,7 @@ const handleSave = async ({
|
|||||||
if (isDev) {
|
if (isDev) {
|
||||||
const keyMap: Record<string, string> = {
|
const keyMap: Record<string, string> = {
|
||||||
KID: "win_kueID",
|
KID: "win_kueID",
|
||||||
|
KIA: "win_kueName",
|
||||||
KL_: "win_kueLimit1",
|
KL_: "win_kueLimit1",
|
||||||
KD_: "win_kueDelay1",
|
KD_: "win_kueDelay1",
|
||||||
KR_: "win_kueLimit2Low",
|
KR_: "win_kueLimit2Low",
|
||||||
@@ -166,6 +176,7 @@ const handleSave = async ({
|
|||||||
dispatch(
|
dispatch(
|
||||||
setKueData({
|
setKueData({
|
||||||
kueID: [...ids],
|
kueID: [...ids],
|
||||||
|
kueName: [...kueName],
|
||||||
isolationsgrenzwerte: [...isolationsgrenzwerte],
|
isolationsgrenzwerte: [...isolationsgrenzwerte],
|
||||||
verzoegerung: [...verzoegerung],
|
verzoegerung: [...verzoegerung],
|
||||||
untereSchleifenGrenzwerte: [...untereSchleifenGrenzwerte],
|
untereSchleifenGrenzwerte: [...untereSchleifenGrenzwerte],
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
// KueEinstellung.tsx – final überarbeitet: formData wird direkt nach dem Speichern aktualisiert
|
|
||||||
|
|
||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import { useState } from "react";
|
import { useState, useEffect } from "react";
|
||||||
import { useDispatch, useSelector } from "react-redux";
|
import { useDispatch, useSelector } from "react-redux";
|
||||||
import type { RootState } from "../../../../../redux/store";
|
import type { RootState } from "../../../../../redux/store";
|
||||||
import handleSave from "../handlers/handleSave";
|
import handleSave from "../handlers/handleSave";
|
||||||
@@ -78,8 +76,11 @@ export default function KueEinstellung({
|
|||||||
|
|
||||||
const handleSaveWrapper = async () => {
|
const handleSaveWrapper = async () => {
|
||||||
const updatedKueID = [...kueID];
|
const updatedKueID = [...kueID];
|
||||||
updatedKueID[slot] = formData.kueID;
|
//updatedKueID[slot] = formData.kueID;
|
||||||
|
/* if (Object.isFrozen(kueID)) {
|
||||||
|
console.warn("kueID ist readonly!");
|
||||||
|
}
|
||||||
|
*/
|
||||||
const updatedKueName = [...kueName];
|
const updatedKueName = [...kueName];
|
||||||
updatedKueName[slot] = formData.kueName;
|
updatedKueName[slot] = formData.kueName;
|
||||||
|
|
||||||
@@ -116,7 +117,7 @@ export default function KueEinstellung({
|
|||||||
// 🔧 handleSave aufrufen mit allen Daten
|
// 🔧 handleSave aufrufen mit allen Daten
|
||||||
await handleSave({
|
await handleSave({
|
||||||
slot,
|
slot,
|
||||||
ids: updatedKueID,
|
ids: kueID,
|
||||||
kueName: updatedKueName,
|
kueName: updatedKueName,
|
||||||
isolationsgrenzwerte: updatedLimit1,
|
isolationsgrenzwerte: updatedLimit1,
|
||||||
verzoegerung: updatedDelay1,
|
verzoegerung: updatedDelay1,
|
||||||
@@ -135,7 +136,7 @@ export default function KueEinstellung({
|
|||||||
speicherintervall: memoryInterval,
|
speicherintervall: memoryInterval,
|
||||||
},
|
},
|
||||||
dispatch,
|
dispatch,
|
||||||
onModulNameChange,
|
onModulNameChange: onModulNameChange ?? (() => {}),
|
||||||
onClose,
|
onClose,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -6,5 +6,5 @@
|
|||||||
2: Patch oder Hotfix (Bugfixes oder kleine Änderungen).
|
2: Patch oder Hotfix (Bugfixes oder kleine Änderungen).
|
||||||
|
|
||||||
*/
|
*/
|
||||||
const webVersion = "1.6.406";
|
const webVersion = "1.6.407";
|
||||||
export default webVersion;
|
export default webVersion;
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ interface KueDataState {
|
|||||||
//-----------------------
|
//-----------------------
|
||||||
kueOnline: number[];
|
kueOnline: number[];
|
||||||
kueID: string[];
|
kueID: string[];
|
||||||
kueName?: string[];
|
kueName: string[];
|
||||||
kuePSTmMinus96V: number[];
|
kuePSTmMinus96V: number[];
|
||||||
kueAlarm1: number[];
|
kueAlarm1: number[];
|
||||||
kueAlarm2: number[];
|
kueAlarm2: number[];
|
||||||
|
|||||||
@@ -68,6 +68,7 @@ export async function loadWindowVariables(): Promise<{
|
|||||||
? {
|
? {
|
||||||
kueOnline: win.win_kueOnline || [],
|
kueOnline: win.win_kueOnline || [],
|
||||||
kueID: win.win_kueID || [],
|
kueID: win.win_kueID || [],
|
||||||
|
kueName: win.win_kueName || [],
|
||||||
kuePSTmMinus96V: win.win_kuePSTmMinus96V || [],
|
kuePSTmMinus96V: win.win_kuePSTmMinus96V || [],
|
||||||
kueAlarm1: win.win_kueAlarm1 || [],
|
kueAlarm1: win.win_kueAlarm1 || [],
|
||||||
kueAlarm2: win.win_kueAlarm2 || [],
|
kueAlarm2: win.win_kueAlarm2 || [],
|
||||||
|
|||||||
Reference in New Issue
Block a user