From 2688ed00841b30dba7412b6b320ba78b0a24f3b5 Mon Sep 17 00:00:00 2001 From: proddy Date: Mon, 1 Jul 2024 13:43:37 +0200 Subject: [PATCH] rename Device --- interface/package.json | 2 +- interface/src/i18n/de/index.ts | 3 +- interface/src/i18n/en/index.ts | 3 +- interface/src/i18n/fr/index.ts | 3 +- interface/src/i18n/it/index.ts | 3 +- interface/src/i18n/nl/index.ts | 3 +- interface/src/i18n/no/index.ts | 3 +- interface/src/i18n/pl/index.ts | 3 +- interface/src/i18n/sk/index.ts | 4 +- interface/src/i18n/sv/index.ts | 3 +- interface/src/i18n/tr/index.ts | 3 +- interface/src/project/Customization.tsx | 117 +++++++++++++++++++----- interface/src/project/api.ts | 2 + interface/yarn.lock | 10 +- mock-api/rest_server.ts | 7 ++ 15 files changed, 127 insertions(+), 42 deletions(-) diff --git a/interface/package.json b/interface/package.json index 62c205e82..92cae1662 100644 --- a/interface/package.json +++ b/interface/package.json @@ -59,7 +59,7 @@ "concurrently": "^8.2.2", "eslint": "^9.6.0", "eslint-config-prettier": "^9.1.0", - "preact": "^10.22.0", + "preact": "^10.22.1", "prettier": "^3.3.2", "rollup-plugin-visualizer": "^5.12.0", "terser": "^5.31.1", diff --git a/interface/src/i18n/de/index.ts b/interface/src/i18n/de/index.ts index b04338932..9627a017d 100644 --- a/interface/src/i18n/de/index.ts +++ b/interface/src/i18n/de/index.ts @@ -331,7 +331,8 @@ const de: Translation = { MODULES: 'Module', // TODO translate MODULES_UPDATED: 'Modules updated', // TODO translate MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate - MODULES_NONE: 'No external modules detected' // TODO translate + MODULES_NONE: 'No external modules detected', // TODO translate + RENAME: 'Rename' // TODO translate }; export default de; diff --git a/interface/src/i18n/en/index.ts b/interface/src/i18n/en/index.ts index d996e5c06..3846441bf 100644 --- a/interface/src/i18n/en/index.ts +++ b/interface/src/i18n/en/index.ts @@ -331,7 +331,8 @@ const en: Translation = { MODULES: 'Modules', MODULES_UPDATED: 'Modules updated', MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', - MODULES_NONE: 'No external modules detected' + MODULES_NONE: 'No external modules detected', + RENAME: 'Rename' }; export default en; diff --git a/interface/src/i18n/fr/index.ts b/interface/src/i18n/fr/index.ts index 0e1d46f37..fb4e0de39 100644 --- a/interface/src/i18n/fr/index.ts +++ b/interface/src/i18n/fr/index.ts @@ -331,7 +331,8 @@ const fr: Translation = { MODULES: 'Module', // TODO translate MODULES_UPDATED: 'Modules updated', // TODO translate MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate - MODULES_NONE: 'No external modules detected' // TODO translate + MODULES_NONE: 'No external modules detected', // TODO translate + RENAME: 'Rename' // TODO translate }; export default fr; diff --git a/interface/src/i18n/it/index.ts b/interface/src/i18n/it/index.ts index eae77f1a2..124e76a04 100644 --- a/interface/src/i18n/it/index.ts +++ b/interface/src/i18n/it/index.ts @@ -331,7 +331,8 @@ const it: Translation = { MODULES: 'Module', // TODO translate MODULES_UPDATED: 'Modules updated', // TODO translate MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate - MODULES_NONE: 'No external modules detected' // TODO translate + MODULES_NONE: 'No external modules detected', // TODO translate + RENAME: 'Rename' // TODO translate }; export default it; diff --git a/interface/src/i18n/nl/index.ts b/interface/src/i18n/nl/index.ts index 6b2c1a00d..02d2e5ea5 100644 --- a/interface/src/i18n/nl/index.ts +++ b/interface/src/i18n/nl/index.ts @@ -331,7 +331,8 @@ const nl: Translation = { MODULES: 'Module', MODULES_UPDATED: 'Modules geüpdatet', MODULES_DESCRIPTION: 'Klik op de module om EMS-ESP library modules te activeren of te deactiveren', - MODULES_NONE: 'Geen externe modules gedetecteerd' + MODULES_NONE: 'Geen externe modules gedetecteerd', + RENAME: 'Hernoemen' }; export default nl; diff --git a/interface/src/i18n/no/index.ts b/interface/src/i18n/no/index.ts index 025cb91a8..2d053ebe7 100644 --- a/interface/src/i18n/no/index.ts +++ b/interface/src/i18n/no/index.ts @@ -331,7 +331,8 @@ const no: Translation = { MODULES: 'Module', // TODO translate MODULES_UPDATED: 'Modules updated', // TODO translate MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate - MODULES_NONE: 'No external modules detected' // TODO translate + MODULES_NONE: 'No external modules detected', // TODO translate + RENAME: 'Rename' // TODO translate }; export default no; diff --git a/interface/src/i18n/pl/index.ts b/interface/src/i18n/pl/index.ts index 6896051fe..b367ebce9 100644 --- a/interface/src/i18n/pl/index.ts +++ b/interface/src/i18n/pl/index.ts @@ -331,7 +331,8 @@ const pl: BaseTranslation = { MODULES: 'Module', // TODO translate MODULES_UPDATED: 'Modules updated', // TODO translate MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate - MODULES_NONE: 'No external modules detected' // TODO translate + MODULES_NONE: 'No external modules detected', // TODO translate + RENAME: 'Rename' // TODO translate }; export default pl; diff --git a/interface/src/i18n/sk/index.ts b/interface/src/i18n/sk/index.ts index 43ae4ac38..cd83f5893 100644 --- a/interface/src/i18n/sk/index.ts +++ b/interface/src/i18n/sk/index.ts @@ -331,7 +331,7 @@ const sk: Translation = { MODULES: 'Module', // TODO translate MODULES_UPDATED: 'Modules updated', // TODO translate MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate - MODULES_NONE: 'No external modules detected' // TODO translate + MODULES_NONE: 'No external modules detected', // TODO translate + RENAME: 'Rename' // TODO translate }; - export default sk; diff --git a/interface/src/i18n/sv/index.ts b/interface/src/i18n/sv/index.ts index ca9952708..6977ee6c7 100644 --- a/interface/src/i18n/sv/index.ts +++ b/interface/src/i18n/sv/index.ts @@ -331,7 +331,8 @@ const sv: Translation = { MODULES: 'Module', // TODO translate MODULES_UPDATED: 'Modules updated', // TODO translate MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate - MODULES_NONE: 'No external modules detected' // TODO translate + MODULES_NONE: 'No external modules detected', // TODO translate + RENAME: 'Rename' // TODO translate }; export default sv; diff --git a/interface/src/i18n/tr/index.ts b/interface/src/i18n/tr/index.ts index 44ab06c5d..9b95cf8d8 100644 --- a/interface/src/i18n/tr/index.ts +++ b/interface/src/i18n/tr/index.ts @@ -331,7 +331,8 @@ const tr: Translation = { MODULES: 'Module', // TODO translate MODULES_UPDATED: 'Modules updated', // TODO translate MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate - MODULES_NONE: 'No external modules detected' // TODO translate + MODULES_NONE: 'No external modules detected', // TODO translate + RENAME: 'Rename' // TODO translate }; export default tr; diff --git a/interface/src/project/Customization.tsx b/interface/src/project/Customization.tsx index 9293cad7c..22f28bec6 100644 --- a/interface/src/project/Customization.tsx +++ b/interface/src/project/Customization.tsx @@ -4,7 +4,9 @@ import { useBlocker, useLocation } from 'react-router-dom'; import { toast } from 'react-toastify'; import CancelIcon from '@mui/icons-material/Cancel'; +import EditIcon from '@mui/icons-material/Edit'; import PowerSettingsNewIcon from '@mui/icons-material/PowerSettingsNew'; +import SaveIcon from '@mui/icons-material/Save'; import SearchIcon from '@mui/icons-material/Search'; import SettingsBackupRestoreIcon from '@mui/icons-material/SettingsBackupRestore'; import WarningIcon from '@mui/icons-material/Warning'; @@ -71,21 +73,30 @@ const Customization: FC = () => { const [search, setSearch] = useState(''); const [selectedDeviceEntity, setSelectedDeviceEntity] = useState(); const [dialogOpen, setDialogOpen] = useState(false); + const [rename, setRename] = useState(false); useLayoutTitle(LL.CUSTOMIZATIONS()); // fetch devices first - const { data: devices } = useRequest(EMSESP.readDevices); + const { data: devices, send: fetchDevices } = useRequest(EMSESP.readDevices); const [selectedDevice, setSelectedDevice] = useState( Number(useLocation().state) || -1 ); + const [selectedDeviceTypeName, setSelectedDeviceTypeName] = useState(''); const [selectedDeviceName, setSelectedDeviceName] = useState(''); const { send: resetCustomizations } = useRequest(EMSESP.resetCustomizations(), { immediate: false }); + const { send: writeDeviceName } = useRequest( + (data: { id: number; name: string }) => EMSESP.writeDeviceName(data), + { + immediate: false + } + ); + const { send: writeCustomizationEntities } = useRequest( (data: { id: number; entity_ids: string[] }) => EMSESP.writeCustomizationEntities(data), @@ -223,9 +234,10 @@ const Customization: FC = () => { const id = devices.devices.findIndex((d) => d.i === selectedDevice); if (id === -1) { setSelectedDevice(-1); - setSelectedDeviceName(''); + setSelectedDeviceTypeName(''); } else { - setSelectedDeviceName(devices.devices[id].tn || ''); + setSelectedDeviceTypeName(devices.devices[id].tn || ''); + setSelectedDeviceName(devices.devices[id].s); setNumChanges(0); setRestartNeeded(false); } @@ -388,31 +400,86 @@ const Customization: FC = () => { } }; + const renameDevice = async () => { + await writeDeviceName({ id: selectedDevice, name: selectedDeviceName }) + .then(() => { + toast.success(LL.UPDATED_OF(LL.NAME(1))); + }) + .catch(() => { + toast.error(LL.UPDATE_OF(LL.NAME(1)) + ' ' + LL.FAILED(1)); + }) + .finally(async () => { + setRename(false); + await fetchDevices(); + }); + }; + const renderDeviceList = () => ( <> {LL.CUSTOMIZATIONS_HELP_1()}. - setSelectedDevice(parseInt(e.target.value))} - margin="normal" - select - > - - {LL.SELECT_DEVICE()}... - - {devices.devices.map((device: DeviceShort) => ( - - {device.s} - - ))} - + + {rename ? ( + setSelectedDeviceName(e.target.value)} + margin="normal" + /> + ) : ( + setSelectedDevice(parseInt(e.target.value))} + margin="normal" + select + > + + {LL.SELECT_DEVICE()}... + + {devices.devices.map((device: DeviceShort) => ( + + {device.s} + + ))} + + )} + {selectedDevice !== -1 && + (rename ? ( + + + + + ) : ( + + ))} + ); @@ -545,7 +612,7 @@ const Customization: FC = () => { {formatName(de, false)} ( {de.id} @@ -600,7 +667,7 @@ const Customization: FC = () => { const renderContent = () => ( <> {devices && renderDeviceList()} - {selectedDevice !== -1 && renderDeviceData()} + {selectedDevice !== -1 && !rename && renderDeviceData()} {restartNeeded && (