ui changes to dialog boxes

This commit is contained in:
proddy
2026-08-07 13:44:47 +02:00
parent b47e7d1dd6
commit 4231192991
17 changed files with 69 additions and 86 deletions
+2 -30
View File
@@ -3,11 +3,9 @@ import { useBlocker } from 'react-router';
import AddIcon from '@mui/icons-material/Add';
import CancelIcon from '@mui/icons-material/Cancel';
import PlayArrowIcon from '@mui/icons-material/PlayArrow';
import WarningIcon from '@mui/icons-material/Warning';
import { Box, Button, IconButton, Typography } from '@mui/material';
import { Box, Button, Typography } from '@mui/material';
import { callAction } from '@/api/app';
import {
Body,
Cell,
@@ -48,7 +46,7 @@ const DEFAULT_COMMAND_ITEM: Omit<CommandItem, 'id'> = {
const commandsTheme = {
Table: `
--data-table-library_grid-template-columns: repeat(1, minmax(100px, 1fr)) repeat(1, minmax(100px, 1fr)) 160px 32px;
--data-table-library_grid-template-columns: repeat(1, minmax(100px, 1fr)) repeat(1, minmax(100px, 1fr)) 160px;
`,
BaseRow: `
font-size: 14px;
@@ -143,21 +141,6 @@ const Commands = () => {
}
};
const { send: executeCommand } = useRequest(
(id: string) => callAction({ action: 'executeCommand', param: id }),
{ immediate: false }
)
.onSuccess(() => {
toast.success(LL.EXECUTE_COMMAND_SENT());
})
.onError((error) => {
toast.error(String(error.error?.message || 'An error occurred'));
});
const execute = async (name: string) => {
await executeCommand(name);
};
const editItem = (ci: CommandItem) => {
setCreating(false);
setSelectedItem(ci);
@@ -222,7 +205,6 @@ const Commands = () => {
<HeaderCell stiff>{LL.COMMAND(0)}</HeaderCell>
<HeaderCell stiff>{LL.VALUE(0)}</HeaderCell>
<HeaderCell stiff>{LL.NAME(0)}</HeaderCell>
<HeaderCell></HeaderCell>
</HeaderRow>
</Header>
<Body>
@@ -231,16 +213,6 @@ const Commands = () => {
<Cell>{ci.cmd}</Cell>
<Cell>{ci.value}</Cell>
<Cell>{ci.name}</Cell>
<Cell>
{numChanges === 0 && (
<IconButton
onClick={() => execute(ci.name)}
style={{ backgroundColor: 'transparent' }}
>
<PlayArrowIcon color="primary" sx={{ fontSize: 16 }} />
</IconButton>
)}
</Cell>
</Row>
))}
</Body>
+4 -4
View File
@@ -95,7 +95,7 @@ const CommandsDialog = ({
{ immediate: false }
)
.onSuccess(() => {
toast.success(LL.EXECUTE_COMMAND_SENT());
toast.success(LL.COMMAND_SENT());
})
.onError((error) => {
toast.error(String(error.error?.message || 'An error occurred'));
@@ -121,8 +121,8 @@ const CommandsDialog = ({
return (
<Dialog sx={dialogStyle} open={open} onClose={handleClose}>
<DialogTitle>
{creating ? `${LL.ADD(1)} ${LL.NEW(0)}` : LL.EDIT()}&nbsp;
{LL.COMMAND(1)}
{creating ? `${LL.ADD(1)} ` : LL.UPDATE() + '/' + LL.RUN()}&nbsp;
{LL.COMMAND(0)}
</DialogTitle>
<DialogContent dividers>
<ValidatedTextField
@@ -195,7 +195,7 @@ const CommandsDialog = ({
onClick={execute}
color="success"
>
{LL.EXECUTE()}
{LL.RUN()}
</Button>
)}
</DialogActions>
+5 -2
View File
@@ -334,7 +334,7 @@ const Dashboard = memo(() => {
(di.dv.v === '' || di.dv.v === undefined ? (
<IconButton
size="small"
aria-label={LL.RUN_COMMAND()}
aria-label={LL.RUN()}
onClick={() => editDashboardValue(di)}
style={{ backgroundColor: 'transparent' }}
>
@@ -402,7 +402,10 @@ const Dashboard = memo(() => {
{selectedDashboardItem && selectedDashboardItem.dv && (
<DevicesDialog
open={deviceValueDialogOpen}
onClose={() => setDeviceValueDialogOpen(false)}
onClose={() => {
setDeviceValueDialogOpen(false);
setSelectedDashboardItem(undefined);
}}
onSave={deviceValueDialogSave}
selectedItem={selectedDashboardItem.dv}
writeable={true}
+1
View File
@@ -592,6 +592,7 @@ const Devices = memo(() => {
const deviceValueDialogClose = () => {
setDeviceValueDialogOpen(false);
setSelectedDeviceValue(undefined);
if (selectedDevice !== undefined) {
void sendDeviceData(selectedDevice);
}
+23 -17
View File
@@ -30,7 +30,7 @@ import { ValidationError, validate } from 'validators';
import type Schema from 'validators/schema';
import type { ValidateFieldsError } from 'validators/schema';
import { DeviceValueUOM, DeviceValueUOM_s } from './types';
import { DeviceValueUOM, DeviceValueUOM_s, getDeviceValueKind } from './types';
import type { DeviceValue } from './types';
interface DevicesDialogProps {
@@ -70,7 +70,7 @@ const DevicesDialog = ({
{ immediate: false }
)
.onSuccess(() => {
toast.success(LL.EXECUTE_COMMAND_SENT());
toast.success(LL.COMMAND_SENT());
})
.onError((error) => {
toast.error(String(error.error?.message || 'An error occurred'));
@@ -119,18 +119,20 @@ const DevicesDialog = ({
return undefined;
};
const isCommand =
(selectedItem.v === '' || selectedItem.v === undefined) &&
Boolean(selectedItem.c);
const isSchedulerImmediate = selectedItem.v === undefined;
const dialogTitle = isCommand
? isSchedulerImmediate
? LL.EXECUTE() + ' ' + LL.SCHEDULE(0)
: LL.RUN_COMMAND()
: writeable
? LL.CHANGE_VALUE()
: LL.VALUE(0);
const buttonLabel = isCommand ? LL.EXECUTE() : LL.UPDATE();
const kind = getDeviceValueKind(selectedItem);
const dialogTitle =
kind === 'command' || kind === 'deviceCommand'
? LL.RUN() + ' ' + LL.COMMAND(0)
: kind === 'scheduler'
? LL.UPDATE() + ' ' + LL.SCHEDULE(0)
: writeable
? LL.CHANGE_VALUE()
: LL.VALUE(0);
const buttonLabel =
kind === 'command' || kind === 'deviceCommand' ? LL.RUN() : LL.UPDATE();
const helperText = showHelperText(editItem);
const valueLabel = LL.VALUE(0);
@@ -142,7 +144,7 @@ const DevicesDialog = ({
<Typography sx={{ mb: 2 }} color="warning" variant="body2">
{editItem.id.slice(2)}
</Typography>
{!isSchedulerImmediate && (
{kind !== 'command' && (
<Grid container>
<Grid size={12}>
{editItem.l ? (
@@ -227,11 +229,15 @@ const DevicesDialog = ({
</Button>
<Button
startIcon={
isCommand ? <PlayArrowIcon /> : <WarningIcon color="warning" />
kind === 'command' ? (
<PlayArrowIcon />
) : kind === 'deviceEntity' || kind === 'deviceCommand' ? (
<WarningIcon color="warning" />
) : undefined
}
variant="outlined"
onClick={doAction}
color={isCommand ? 'success' : 'primary'}
color={kind !== 'value' ? 'success' : 'primary'}
>
{buttonLabel}
</Button>
+12
View File
@@ -210,6 +210,18 @@ export enum DeviceValueUOM {
HERTZ
}
export type DeviceValueKind =
'value' | 'scheduler' | 'command' | 'deviceCommand' | 'deviceEntity';
export function getDeviceValueKind(item: DeviceValue): DeviceValueKind {
if (!item.c) return 'value';
if (item.v !== undefined && item.l !== undefined && item.u === undefined)
return 'scheduler';
if (item.v === undefined && item.l === undefined) return 'command';
if (item.u === DeviceValueUOM.NONE) return 'deviceCommand';
return 'deviceEntity';
}
export const DeviceValueUOM_s = [
'',
'°C',
+2 -3
View File
@@ -37,13 +37,11 @@ const cs: Translation = {
VALUE: '{{value|Value}}',
DEVICES: 'Zařízení',
SENSORS: 'Senzory',
RUN_COMMAND: 'Zavolat příkaz',
CHANGE_VALUE: 'Změnit hodnotu',
CANCEL: 'Zrušit',
REMOVE_ALL: 'Odebrat vše',
APPLY_CHANGES: 'Použít změny ({0})',
UPDATE: 'Aktualizovat',
EXECUTE: 'Provést',
REMOVE: 'Odebrat',
PROBLEM_UPDATING: 'Problém s aktualizací',
PROBLEM_LOADING: 'Problém s načítáním',
@@ -368,7 +366,8 @@ const cs: Translation = {
COMMANDS: 'Příkazy',
COMMANDS_UPDATED: 'Příkazy byly aktualizovány',
COMMANDS_HELP_1: 'Definujte vlastní příkazy pro magistrali EMS',
EXECUTE_COMMAND_SENT: 'Příkaz odeslán',
COMMAND_SENT: 'Příkaz odeslán',
RUN: 'Spustit příkaz'
};
export default cs;
+2 -3
View File
@@ -37,13 +37,11 @@ const de: Translation = {
VALUE: '{{wert|Wert}}',
DEVICES: 'Geräte',
SENSORS: 'Sensoren',
RUN_COMMAND: 'Befehl ausführen',
CHANGE_VALUE: 'Wert ändern',
CANCEL: 'Abbrechen',
REMOVE_ALL: 'Alles entfernen',
APPLY_CHANGES: 'Änderungen anwenden ({0})',
UPDATE: 'Aktualisieren',
EXECUTE: 'Ausführen',
REMOVE: 'Entfernen',
PROBLEM_UPDATING: 'Problem beim Aktualisieren',
PROBLEM_LOADING: 'Problem beim Laden',
@@ -368,7 +366,8 @@ const de: Translation = {
COMMANDS: 'Befehle',
COMMANDS_UPDATED: 'Befehle wurden aktualisiert',
COMMANDS_HELP_1: 'Definieren Sie eigene Befehle für die EMS-Magistral',
EXECUTE_COMMAND_SENT: 'Befehl gesendet',
COMMAND_SENT: 'Befehl gesendet',
RUN: 'Befehl ausführen'
};
export default de;
+2 -3
View File
@@ -37,13 +37,11 @@ const en: Translation = {
VALUE: '{{value|Value}}',
DEVICES: 'Devices',
SENSORS: 'Sensors',
RUN_COMMAND: 'Call Command',
CHANGE_VALUE: 'Change Value',
CANCEL: 'Cancel',
REMOVE_ALL: 'Remove All',
APPLY_CHANGES: 'Apply Changes ({0})',
UPDATE: 'Update',
EXECUTE: 'Execute',
REMOVE: 'Remove',
PROBLEM_UPDATING: 'Problem updating',
PROBLEM_LOADING: 'Problem loading',
@@ -368,7 +366,8 @@ const en: Translation = {
COMMANDS: 'Commands',
COMMANDS_UPDATED: 'Commands updated',
COMMANDS_HELP_1: 'Define reusable named commands below. These can be executed from the console, API/MQTT, or referenced by the Scheduler',
EXECUTE_COMMAND_SENT: 'Command sent',
COMMAND_SENT: 'Command sent',
RUN: 'Run'
};
export default en;
+2 -3
View File
@@ -37,13 +37,11 @@ const fr: Translation = {
VALUE: 'Valeur',
DEVICES: 'Appareils',
SENSORS: 'Capteurs',
RUN_COMMAND: 'Lancer une commande',
CHANGE_VALUE: 'Changer la valeur',
CANCEL: 'Annuler',
REMOVE_ALL: 'Supprimer tout',
APPLY_CHANGES: 'Appliquer les changements ({0})',
UPDATE: 'Update',
EXECUTE: 'Execute',
REMOVE: 'Enlever',
PROBLEM_UPDATING: 'Problème lors de la mise à jour',
PROBLEM_LOADING: 'Problème lors du chargement',
@@ -368,7 +366,8 @@ const fr: Translation = {
COMMANDS: 'Commandes',
COMMANDS_UPDATED: 'Commandes mises à jour',
COMMANDS_HELP_1: 'Définir des commandes personnalisées pour la magistral EMS',
EXECUTE_COMMAND_SENT: 'Commande envoyée',
COMMAND_SENT: 'Commande envoyée',
RUN: 'Exécuter une commande'
};
export default fr;
+2 -3
View File
@@ -37,13 +37,11 @@ const it: Translation = {
VALUE: '{{valore|Valore}}',
DEVICES: 'Dispositivi',
SENSORS: 'Sensori',
RUN_COMMAND: 'Esegui',
CHANGE_VALUE: 'Cambia Valore',
CANCEL: 'Annulla',
REMOVE_ALL: 'Rimuovi tutto',
APPLY_CHANGES: 'Applica Cambiamenti ({0})',
UPDATE: 'Update',
EXECUTE: 'Execute',
REMOVE: 'Elimina',
PROBLEM_UPDATING: 'Problema aggiornamento',
PROBLEM_LOADING: 'Problema caricamento',
@@ -368,7 +366,8 @@ const it: Translation = {
COMMANDS: 'Comandi',
COMMANDS_UPDATED: 'Comandi aggiornati',
COMMANDS_HELP_1: 'Definisci comandi personalizzati per la magistrali EMS',
EXECUTE_COMMAND_SENT: 'Comando inviato',
COMMAND_SENT: 'Comando inviato',
RUN: 'Esegui comando'
};
export default it;
+2 -3
View File
@@ -37,13 +37,11 @@ const nl: Translation = {
VALUE: '{{waarde|Waarde}}',
DEVICES: 'Apparaten',
SENSORS: 'Sensoren',
RUN_COMMAND: 'Call commando',
CHANGE_VALUE: 'Wijzig waarde',
CANCEL: 'Annuleren',
REMOVE_ALL: 'Verwijderen alles',
APPLY_CHANGES: 'Aanpassen ({0})',
UPDATE: 'Update',
EXECUTE: 'Uitvoeren',
REMOVE: 'Verwijderen',
PROBLEM_UPDATING: 'Probleem met updaten',
PROBLEM_LOADING: 'Probleem met laden',
@@ -368,7 +366,8 @@ const nl: Translation = {
COMMANDS: 'Commando\'s',
COMMANDS_UPDATED: 'Commando\'s bijgewerkt',
COMMANDS_HELP_1: 'Definieer hergebruikbare benoemde commando\'s hieronder. Deze kunnen worden uitgevoerd vanuit de console, API/MQTT, of worden aangeroepen door de Scheduler',
EXECUTE_COMMAND_SENT: 'Commando verzonden',
COMMAND_SENT: 'Commando verzonden',
RUN: 'Commando uitvoeren'
};
export default nl;
+2 -3
View File
@@ -37,13 +37,11 @@ const no: Translation = {
VALUE: '{{verdi|Verdi}}',
DEVICES: 'Enheter',
SENSORS: 'Sensorer',
RUN_COMMAND: 'Kjør kommando',
CHANGE_VALUE: 'Endre Verdi',
CANCEL: 'Avbryt',
REMOVE_ALL: 'Fjern alles',
APPLY_CHANGES: 'Utfør endringer({0})',
UPDATE: 'Oppdater',
EXECUTE: 'Utfør',
REMOVE: 'Fjern',
PROBLEM_UPDATING: 'Problem med oppdatering',
PROBLEM_LOADING: 'Problem med opplasting',
@@ -368,7 +366,8 @@ const no: Translation = {
COMMANDS: 'Kommandoer',
COMMANDS_UPDATED: 'Kommandoer oppdatert',
COMMANDS_HELP_1: 'Definer egne kommandoer for EMS-Magistral',
EXECUTE_COMMAND_SENT: 'Kommando sendt',
COMMAND_SENT: 'Kommando sendt',
RUN: 'Kjør'
};
export default no;
+2 -3
View File
@@ -37,13 +37,11 @@ const pl: BaseTranslation = {
VALUE: '{{W|w|w}}artość',
DEVICES: 'Urządzenia',
SENSORS: 'Czujniki',
RUN_COMMAND: 'Wykonaj komendę',
CHANGE_VALUE: 'Zmiana wartości',
CANCEL: 'Anuluj',
REMOVE_ALL: 'Usuń wszystko',
APPLY_CHANGES: 'Zapisz zmiany ({0})',
UPDATE: 'Zmień',
EXECUTE: 'Wykonaj',
REMOVE: 'Usuń',
PROBLEM_UPDATING: 'Problem z uaktualnieniem!',
PROBLEM_LOADING: 'Problem z załadowaniem!',
@@ -368,7 +366,8 @@ const pl: BaseTranslation = {
COMMANDS: 'Komendy',
COMMANDS_UPDATED: 'Komendy zostały zaktualizowane',
COMMANDS_HELP_1: 'Zdefiniuj niestandardowe komendy dla magistrali EMS',
EXECUTE_COMMAND_SENT: 'Komenda wysłana',
COMMAND_SENT: 'Komenda wysłana',
RUN: 'Wykonaj'
};
export default pl;
+2 -3
View File
@@ -37,13 +37,11 @@ const sk: Translation = {
VALUE: '{{hodnota|Hodnota}}',
DEVICES: 'Zariadenia',
SENSORS: 'Snímače',
RUN_COMMAND: 'Volať príkaz',
CHANGE_VALUE: 'Zmena hodnoty',
CANCEL: 'Zrušiť',
REMOVE_ALL: 'Odstrániť všetko',
APPLY_CHANGES: 'Aplikovať zmeny ({0})',
UPDATE: 'Aktualizovať',
EXECUTE: 'Spustiť',
REMOVE: 'Odstrániť',
PROBLEM_UPDATING: 'Problém s aktualizáciou',
PROBLEM_LOADING: 'Problém s načítaním',
@@ -368,7 +366,8 @@ const sk: Translation = {
COMMANDS: 'Príkazy',
COMMANDS_UPDATED: 'Príkazy aktualizované',
COMMANDS_HELP_1: 'Definujte vlastné príkazy pre magistrali EMS',
EXECUTE_COMMAND_SENT: 'Príkaz odoslaný',
COMMAND_SENT: 'Príkaz odoslaný',
RUN: 'Volať príkaz'
};
export default sk;
+2 -3
View File
@@ -37,13 +37,11 @@ const sv: Translation = {
VALUE: '{{värde|Värde}}',
DEVICES: 'Enheter',
SENSORS: 'Sensorer',
RUN_COMMAND: 'Kör kommando',
CHANGE_VALUE: 'Ändra värde',
CANCEL: 'Avbryt',
REMOVE_ALL: 'Ta bort allt',
APPLY_CHANGES: 'Utför ändringar ({0})',
UPDATE: 'Uppdatera',
EXECUTE: 'Utför',
REMOVE: 'Ta bort',
PROBLEM_UPDATING: 'Problem vid uppdatering',
PROBLEM_LOADING: 'Problem vid hämtning',
@@ -368,7 +366,8 @@ const sv: Translation = {
COMMANDS: 'Kommandon',
COMMANDS_UPDATED: 'Kommandon uppdaterade',
COMMANDS_HELP_1: 'Definiera egna kommandon för EMS-Magistral',
EXECUTE_COMMAND_SENT: 'Kommando skickat',
COMMAND_SENT: 'Kommando skickat',
RUN: 'Kör kommando'
};
export default sv;
+2 -3
View File
@@ -37,13 +37,11 @@ const tr: Translation = {
VALUE: '{{değer|Değer}}',
DEVICES: 'Cihazlar',
SENSORS: 'Sensörler',
RUN_COMMAND: 'Çalıştırma Komutu',
CHANGE_VALUE: 'Değeri Değiştir',
CANCEL: 'İptal',
REMOVE_ALL: 'Tümünü Kaldır',
APPLY_CHANGES: 'Değişiklikleri Uygula ({0})',
UPDATE: 'Update',
EXECUTE: 'Uygulamak',
REMOVE: 'Kaldır',
PROBLEM_UPDATING: 'Güncelleme Sorunu',
PROBLEM_LOADING: 'Yükleme Sorunu',
@@ -368,7 +366,8 @@ const tr: Translation = {
COMMANDS: 'Komutlar',
COMMANDS_UPDATED: 'Komutlar güncellendi',
COMMANDS_HELP_1: 'Özel komutları EMS hattına tanımlayın',
EXECUTE_COMMAND_SENT: 'Komut gönderildi',
COMMAND_SENT: 'Komut gönderildi',
RUN: 'Komutu çalıştır'
};
export default tr;