From 6a0e8ebc488dc218a192d12a8645648ebad0b057 Mon Sep 17 00:00:00 2001 From: proddy Date: Tue, 13 Oct 2026 19:52:52 +0200 Subject: [PATCH] Show a warning when a customization reset clears min/max until restart --- interface/src/app/main/Customizations.tsx | 27 +++++++--- .../src/app/main/CustomizationsDialog.tsx | 51 ++++++++++++++----- interface/src/app/main/types.ts | 4 +- interface/src/i18n/cs/index.ts | 2 + interface/src/i18n/de/index.ts | 2 + interface/src/i18n/en/index.ts | 2 + interface/src/i18n/fr/index.ts | 2 + interface/src/i18n/it/index.ts | 2 + interface/src/i18n/nl/index.ts | 2 + interface/src/i18n/no/index.ts | 2 + interface/src/i18n/pl/index.ts | 2 + interface/src/i18n/sk/index.ts | 2 + interface/src/i18n/sv/index.ts | 2 + interface/src/i18n/tr/index.ts | 2 + mock-api/restServer.ts | 14 ++--- 15 files changed, 90 insertions(+), 28 deletions(-) diff --git a/interface/src/app/main/Customizations.tsx b/interface/src/app/main/Customizations.tsx index 013492275..a6caf8b06 100644 --- a/interface/src/app/main/Customizations.tsx +++ b/interface/src/app/main/Customizations.tsx @@ -23,6 +23,7 @@ import { TextField, ToggleButton, ToggleButtonGroup, + Tooltip, Typography } from '@mui/material'; @@ -292,6 +293,17 @@ const Customizations = () => { return value as string; } + function formatLimit(value: number | null | undefined) { + if (value === null) { + return ( + + + + ); + } + return formatValue(value); + } + const isCommand = (de: DeviceEntity) => { return de.n && de.n[0] === '!'; }; @@ -385,10 +397,13 @@ const Customizations = () => { if (!selectedIds.has(de.id)) { return de; } - const next: DeviceEntity = { ...de, m: 0, c: false }; - delete next.cn; - delete next.mi; - delete next.ma; + const next: DeviceEntity = { ...de, m: 0, cn: '', c: false }; + if (de.mi !== undefined) { + next.mi = null; + } + if (de.ma !== undefined) { + next.ma = null; + } return next; }) ); @@ -829,10 +844,10 @@ const Customizations = () => { - {!(de.m & DeviceEntityMask.DV_READONLY) && formatValue(de.mi)} + {!(de.m & DeviceEntityMask.DV_READONLY) && formatLimit(de.mi)} - {!(de.m & DeviceEntityMask.DV_READONLY) && formatValue(de.ma)} + {!(de.m & DeviceEntityMask.DV_READONLY) && formatLimit(de.ma)} {formatValue(de.v)} diff --git a/interface/src/app/main/CustomizationsDialog.tsx b/interface/src/app/main/CustomizationsDialog.tsx index d701487bb..bd2d78cc2 100644 --- a/interface/src/app/main/CustomizationsDialog.tsx +++ b/interface/src/app/main/CustomizationsDialog.tsx @@ -4,6 +4,7 @@ import CancelIcon from '@mui/icons-material/Cancel'; import CloseIcon from '@mui/icons-material/Close'; import DoneIcon from '@mui/icons-material/Done'; import SettingsBackupRestoreIcon from '@mui/icons-material/SettingsBackupRestore'; +import WarningIcon from '@mui/icons-material/Warning'; import { Box, Button, @@ -12,7 +13,9 @@ import { DialogContent, DialogTitle, Grid, + InputAdornment, TextField, + Tooltip, Typography } from '@mui/material'; @@ -103,13 +106,25 @@ const CustomizationsDialog = ({ }; const remove = () => { - const next: DeviceEntity = { ...editItem, m: 0, c: false }; - delete next.cn; - delete next.mi; - delete next.ma; + const next: DeviceEntity = { ...editItem, m: 0, cn: '', c: false }; + if (editItem.mi !== undefined) { + next.mi = null; + } + if (editItem.ma !== undefined) { + next.ma = null; + } onSave(next); }; + const limitAdornment = (cleared: boolean) => + cleared ? ( + + + + + + ) : undefined; + return ( {`${LL.EDIT()} ${LL.ENTITY()}`} @@ -150,20 +165,26 @@ const CustomizationsDialog = ({ @@ -178,14 +199,16 @@ const CustomizationsDialog = ({ - + {editItem.c && ( + + )}