diff --git a/interface/package.json b/interface/package.json index cf52db39b..427b75dfb 100644 --- a/interface/package.json +++ b/interface/package.json @@ -60,7 +60,7 @@ "rollup-plugin-visualizer": "^5.12.0", "terser": "^5.31.6", "typescript-eslint": "8.1.0", - "vite": "^5.4.0", + "vite": "^5.4.1", "vite-plugin-imagemin": "^0.6.1", "vite-tsconfig-paths": "^5.0.1" }, diff --git a/interface/src/AuthenticatedRouting.tsx b/interface/src/AuthenticatedRouting.tsx index 0a7c283b1..3942e428b 100644 --- a/interface/src/AuthenticatedRouting.tsx +++ b/interface/src/AuthenticatedRouting.tsx @@ -10,10 +10,10 @@ import Scheduler from 'app/main/Scheduler'; import Sensors from 'app/main/Sensors'; import APSettings from 'app/settings/APSettings'; import ApplicationSettings from 'app/settings/ApplicationSettings'; +import DownloadUpload from 'app/settings/DownloadUpload'; import MqttSettings from 'app/settings/MqttSettings'; import NTPSettings from 'app/settings/NTPSettings'; import Settings from 'app/settings/Settings'; -import UploadDownload from 'app/settings/UploadDownload'; import Network from 'app/settings/network/Network'; import Security from 'app/settings/security/Security'; import APStatus from 'app/status/APStatus'; @@ -54,7 +54,7 @@ const AuthenticatedRouting = () => { } /> } /> } /> - } /> + } /> } /> } /> diff --git a/interface/src/app/settings/UploadDownload.tsx b/interface/src/app/settings/DownloadUpload.tsx similarity index 92% rename from interface/src/app/settings/UploadDownload.tsx rename to interface/src/app/settings/DownloadUpload.tsx index 01370b61f..18360d6fa 100644 --- a/interface/src/app/settings/UploadDownload.tsx +++ b/interface/src/app/settings/DownloadUpload.tsx @@ -23,7 +23,7 @@ import { } from 'components'; import { useI18nContext } from 'i18n/i18n-react'; -const UploadDownload = () => { +const DownloadUpload = () => { const { LL } = useI18nContext(); const { send: sendSettings } = useRequest(getSettings(), { @@ -66,8 +66,13 @@ const UploadDownload = () => { } = useRequest(SystemApi.readHardwareStatus); // called immediately to get the latest version, on page load - const { data: latestVersion } = useRequest(getStableVersion); - const { data: latestDevVersion } = useRequest(getDevVersion); + // set immediate to false to avoid calling the API on page load and GH blocking while testing! + const { data: latestVersion } = useRequest(getStableVersion, { + immediate: true + }); + const { data: latestDevVersion } = useRequest(getDevVersion, { + immediate: true + }); const STABLE_URL = 'https://github.com/emsesp/EMS-ESP32/releases/download/'; const STABLE_RELNOTES_URL = @@ -138,7 +143,7 @@ const UploadDownload = () => { }); }; - useLayoutTitle(LL.UPLOAD_DOWNLOAD()); + useLayoutTitle(LL.DOWNLOAD_UPLOAD()); const content = () => { if (!data) { @@ -148,58 +153,6 @@ const UploadDownload = () => { return ( <> - {LL.EMS_ESP_VER()} - - - {LL.VERSION_ON() + ' '} - {data.emsesp_version} ({getPlatform()}) - - {latestVersion && ( - - {LL.THE_LATEST()} {LL.OFFICIAL()} {LL.RELEASE_IS()} -  {latestVersion} -  ( - - {LL.RELEASE_NOTES()} - - ) ( - - {LL.DOWNLOAD(1)} - - ) - - )} - {latestDevVersion && ( - - {LL.THE_LATEST()} {LL.DEVELOPMENT()} {LL.RELEASE_IS()} -   - {latestDevVersion} -  ( - - {LL.RELEASE_NOTES()} - - ) ( - - {LL.DOWNLOAD(1)} - - ) - - )} - - - - - {LL.DOWNLOAD(0)} @@ -215,6 +168,7 @@ const UploadDownload = () => { > {LL.SUPPORT_INFORMATION(0)} + {/* TODO translate All Values */} + + + + {LL.EMS_ESP_VER()} + + + + {LL.VERSION_ON() + ' '} + {data.emsesp_version} ({getPlatform()}) + + {latestVersion && ( + + {LL.THE_LATEST()} {LL.OFFICIAL()} {LL.RELEASE_IS()} +  {latestVersion} +  ( + + {LL.RELEASE_NOTES()} + + ) ( + + {LL.DOWNLOAD(1)} + + ) + + )} + {latestDevVersion && ( + + {LL.THE_LATEST()} {LL.DEVELOPMENT()} {LL.RELEASE_IS()} +   + {latestDevVersion} +  ( + + {LL.RELEASE_NOTES()} + + ) ( + + {LL.DOWNLOAD(1)} + + ) + + )} + + + ); }; @@ -285,4 +293,4 @@ const UploadDownload = () => { return {content()}; }; -export default UploadDownload; +export default DownloadUpload; diff --git a/interface/src/app/settings/Settings.tsx b/interface/src/app/settings/Settings.tsx index 2ccb1b4e6..fdebb3dc9 100644 --- a/interface/src/app/settings/Settings.tsx +++ b/interface/src/app/settings/Settings.tsx @@ -136,8 +136,8 @@ const Settings = () => { diff --git a/interface/src/components/upload/DragNdrop.tsx b/interface/src/components/upload/DragNdrop.tsx index e19bfd9ef..a7675ac0b 100644 --- a/interface/src/components/upload/DragNdrop.tsx +++ b/interface/src/components/upload/DragNdrop.tsx @@ -1,15 +1,17 @@ +// Code inspired by https://medium.com/@dprincecoder/creating-a-drag-and-drop-file-upload-component-in-react-a-step-by-step-guide-4d93b6cc21e0 +// (c) Prince Azubuike import { type ChangeEvent, useRef, useState } from 'react'; -import { AiOutlineCloudUpload } from 'react-icons/ai'; -import { MdClear } from 'react-icons/md'; +import CancelIcon from '@mui/icons-material/Cancel'; +import CloudUploadIcon from '@mui/icons-material/CloudUpload'; import UploadIcon from '@mui/icons-material/Upload'; -import { Button } from '@mui/material'; +import { Box, Button } from '@mui/material'; import { useI18nContext } from 'i18n/i18n-react'; import './drag-drop.css'; -const DragNdrop = ({ onFileSelected, width, height }) => { +const DragNdrop = ({ onFileSelected }) => { const [file, setFile] = useState(); const inputRef = useRef(null); const { LL } = useI18nContext(); @@ -19,6 +21,7 @@ const DragNdrop = ({ onFileSelected, width, height }) => { return; } setFile(e.target.files[0]); + e.target.value = ''; // this is to allow the same file to be selected again }; const handleDrop = (event) => { @@ -44,60 +47,55 @@ const DragNdrop = ({ onFileSelected, width, height }) => { }; return ( -
-
event.preventDefault()} - onClick={handleBrowseClick} - > +
event.preventDefault()} + onClick={handleBrowseClick} + > +
+ + {/* TODO translate */} +

drag and drop a file here or click to select one

+
+ + + + {file && ( <> -
- -
-

Drag and drop a file here or click to select one

-
+
+

{file.name}

- - - - - {file && ( - <> -
-
-
-

{file.name}

-
-
- handleRemoveFile(e)} - /> -
-
-
- + + - - )} -
-
+ + + )} + ); }; diff --git a/interface/src/components/upload/SingleUpload.tsx b/interface/src/components/upload/SingleUpload.tsx index 0bede54f4..902e72e5e 100644 --- a/interface/src/components/upload/SingleUpload.tsx +++ b/interface/src/components/upload/SingleUpload.tsx @@ -103,7 +103,7 @@ const SingleUpload = () => { )} ) : ( - + )} {md5 && ( diff --git a/interface/src/components/upload/drag-drop.css b/interface/src/components/upload/drag-drop.css index acf7dfdaf..f239b9831 100644 --- a/interface/src/components/upload/drag-drop.css +++ b/interface/src/components/upload/drag-drop.css @@ -1,12 +1,6 @@ -.drag-drop { - /* background: #fff; */ - border: 1px solid var(--border-color); - border-radius: 8px; -} - .document-uploader { border: 2px dashed #4282fe; - /* background-color: #f4fbff; */ + background-color: #2e3339; padding: 10px; display: flex; flex-direction: column; @@ -23,61 +17,17 @@ .upload-info { display: flex; align-items: center; - margin-bottom: 1rem; - - svg { - font-size: 36px; - margin-right: 1rem; - } - - div { - p { - margin: 0; - font-size: 14px; - } - } } - .file-list { + .file-info { display: flex; flex-direction: column; - gap: 0.5rem; width: 100%; - } - - .file-item { - display: flex; justify-content: space-between; align-items: center; - padding: 0.5rem; - border: 1px solid var(--border-color); - border-radius: 8px; - - .file-info { - display: flex; - flex-direction: column; - gap: 0.25rem; - flex: 1; - - p { - margin: 0; - font-size: 14px; - color: #6dc24b; - } + p { + font-size: 14px; + color: #6dc24b; } - - .file-actions { - cursor: pointer; - - &:hover { - svg { - color: #d44; - } - } - } - } - - input[type='file'] { - display: none; } } diff --git a/interface/src/i18n/de/index.ts b/interface/src/i18n/de/index.ts index 2c090a4af..98d2bf91b 100644 --- a/interface/src/i18n/de/index.ts +++ b/interface/src/i18n/de/index.ts @@ -169,7 +169,7 @@ const de: Translation = { SYSTEM: 'System', LOG_OF: '{0}protokoll', STATUS_OF: '{0} Status', - UPLOAD_DOWNLOAD: 'Hoch-/Herunterladen', + DOWNLOAD_UPLOAD: 'Herunterladen/Hochladen', VERSION_ON: 'Sie verwenden derzeit', CLOSE: 'Schließen', USE: 'Verwenden Sie', @@ -324,7 +324,7 @@ const de: Translation = { SYSTEM_MEMORY: 'Systemspeicher', APPLICATION_SETTINGS_1: 'Ändern Sie die EMS-ESP-Anwendungseinstellungen', SECURITY_1: 'Benutzer hinzufügen oder entfernen', - UPLOAD_DOWNLOAD_1: 'Einstellungen und Firmware hochladen/herunterladen', + DOWNLOAD_UPLOAD_1: 'Einstellungen und Firmware herunterladen/hochladen', MODULES: 'Module', MODULES_1: 'Externe Module aktivieren oder deaktivieren', MODULES_UPDATED: 'Module aktualisiert', diff --git a/interface/src/i18n/en/index.ts b/interface/src/i18n/en/index.ts index fafcf2b24..868b8e66a 100644 --- a/interface/src/i18n/en/index.ts +++ b/interface/src/i18n/en/index.ts @@ -169,7 +169,7 @@ const en: Translation = { SYSTEM: 'System', LOG_OF: '{0} Log', STATUS_OF: '{0} Status', - UPLOAD_DOWNLOAD: 'Upload/Download', + DOWNLOAD_UPLOAD: 'Download/Upload', VERSION_ON: 'You are currently on version', CLOSE: 'Close', USE: 'Use', @@ -324,7 +324,7 @@ const en: Translation = { SYSTEM_MEMORY: 'System Memory', APPLICATION_SETTINGS_1: 'Modify EMS-ESP Application Settings', SECURITY_1: 'Add or remove users', - UPLOAD_DOWNLOAD_1: 'Upload/Download Settings and Firmware', + DOWNLOAD_UPLOAD_1: 'Download and Upload Settings and Firmware', MODULES: 'Modules', MODULES_1: 'Activate or deactivate external modules', MODULES_UPDATED: 'Modules updated', diff --git a/interface/src/i18n/fr/index.ts b/interface/src/i18n/fr/index.ts index 78b2fb3ab..832bb6309 100644 --- a/interface/src/i18n/fr/index.ts +++ b/interface/src/i18n/fr/index.ts @@ -169,7 +169,7 @@ const fr: Translation = { SYSTEM: 'Système', LOG_OF: '{0} Log', STATUS_OF: 'Statut {0}', - UPLOAD_DOWNLOAD: 'Upload/Download', + DOWNLOAD_UPLOAD: 'Download/Upload', // TODO translate VERSION_ON: 'You are currently on', // TODO translate CLOSE: 'Fermer', USE: 'Utiliser', @@ -324,7 +324,7 @@ const fr: Translation = { SYSTEM_MEMORY: 'System Memory', // TODO translate APPLICATION_SETTINGS_1: 'Modify EMS-ESP Application Settings', // TODO translate SECURITY_1: 'Add or remove users', // TODO translate - UPLOAD_DOWNLOAD_1: 'Upload/Download Settings and Firmware', // TODO translate + DOWNLOAD_UPLOAD_1: 'Download and Upload Settings and Firmware', // TODO translate MODULES: 'Module', // TODO translate MODULES_1: 'Activer ou désactiver les modules externes', // TODO translate MODULES_UPDATED: 'Modules updated', // TODO translate diff --git a/interface/src/i18n/it/index.ts b/interface/src/i18n/it/index.ts index 487c2c0ab..b341590b7 100644 --- a/interface/src/i18n/it/index.ts +++ b/interface/src/i18n/it/index.ts @@ -169,7 +169,7 @@ const it: Translation = { SYSTEM: 'Sistema', LOG_OF: 'Registro {0}', STATUS_OF: 'Stato {0}', - UPLOAD_DOWNLOAD: 'Caricamento/Scaricamento', + DOWNLOAD_UPLOAD: 'Scaricamento/Caricamento', VERSION_ON: 'Attualmente stai eseguendo la versione', CLOSE: 'Chiudere', USE: 'Usa', @@ -324,7 +324,7 @@ const it: Translation = { SYSTEM_MEMORY: 'System Memory', // TODO translate APPLICATION_SETTINGS_1: 'Modify EMS-ESP Application Settings', // TODO translate SECURITY_1: 'Add or remove users', // TODO translate - UPLOAD_DOWNLOAD_1: 'Upload/Download Settings and Firmware', // TODO translate + DOWNLOAD_UPLOAD_1: 'Download and Upload Settings and Firmware', // TODO translate MODULES: 'Module', // TODO translate MODULES_1: 'Attiva o disattiva i moduli esterni', // TODO translate MODULES_UPDATED: 'Modules updated', // TODO translate diff --git a/interface/src/i18n/nl/index.ts b/interface/src/i18n/nl/index.ts index 073ecdc25..974df2673 100644 --- a/interface/src/i18n/nl/index.ts +++ b/interface/src/i18n/nl/index.ts @@ -169,7 +169,7 @@ const nl: Translation = { SYSTEM: 'Systeem', LOG_OF: '{0} Log', STATUS_OF: '{0} Status', - UPLOAD_DOWNLOAD: 'Upload/Download', + DOWNLOAD_UPLOAD: 'Download/Upload', VERSION_ON: 'U bevindt zich momenteel op versie', CLOSE: 'Sluiten', USE: 'Gebruik', @@ -324,7 +324,7 @@ const nl: Translation = { SYSTEM_MEMORY: 'System Geheugen', APPLICATION_SETTINGS_1: 'Applicatie-instellingen wijzigen', SECURITY_1: 'Gebruikers toevoegen of verwijderen', - UPLOAD_DOWNLOAD_1: 'Upload-/downloadinstellingen en firmware', + DOWNLOAD_UPLOAD_1: 'Download en upload instellingen en firmware', MODULES: 'Module', MODULES_1: 'Externe modules activeren of deactiveren', // TODO translate MODULES_UPDATED: 'Modules geüpdatet', diff --git a/interface/src/i18n/no/index.ts b/interface/src/i18n/no/index.ts index df70af4e7..fc3a80bdb 100644 --- a/interface/src/i18n/no/index.ts +++ b/interface/src/i18n/no/index.ts @@ -169,7 +169,7 @@ const no: Translation = { SYSTEM: 'System', LOG_OF: '{0} Logg', STATUS_OF: '{0} Status', - UPLOAD_DOWNLOAD: 'Opp/Nedlasting', + DOWNLOAD_UPLOAD: 'Nedlasting/Opp', VERSION_ON: 'You are currently on', // TODO translate CLOSE: 'Steng', USE: 'Bruk', @@ -324,7 +324,7 @@ const no: Translation = { SYSTEM_MEMORY: 'System Memory', // TODO translate APPLICATION_SETTINGS_1: 'Modify EMS-ESP Application Settings', // TODO translate SECURITY_1: 'Add or remove users', // TODO translate - UPLOAD_DOWNLOAD_1: 'Upload/Download Settings and Firmware', // TODO translate + DOWNLOAD_UPLOAD_1: 'Download and Upload Settings and Firmware', // TODO translate MODULES: 'Module', // TODO translate MODULES_1: 'Aktiver eller deaktiver eksterne moduler', // TODO translate MODULES_UPDATED: 'Modules updated', // TODO translate diff --git a/interface/src/i18n/pl/index.ts b/interface/src/i18n/pl/index.ts index 6d9e99d92..48f0a8efe 100644 --- a/interface/src/i18n/pl/index.ts +++ b/interface/src/i18n/pl/index.ts @@ -169,7 +169,7 @@ const pl: BaseTranslation = { SYSTEM: '{{S|s||s}}yste{{m|mu||mowy}}', LOG_OF: 'Log {0}', STATUS_OF: 'Status {0}', - UPLOAD_DOWNLOAD: 'Przesyłanie plików', + DOWNLOAD_UPLOAD: 'Plików przesyłanie', VERSION_ON: 'Aktualnie używasz', CLOSE: 'Zamknij', USE: 'Aby zaktualizować firmware skorzystaj z funkcji', @@ -324,7 +324,7 @@ const pl: BaseTranslation = { SYSTEM_MEMORY: 'Pamięć systemowa', APPLICATION_SETTINGS_1: 'Modyfikacja ustawień aplikacji EMS-ESP', SECURITY_1: 'Dodawanie i usuwanie użytkowników', - UPLOAD_DOWNLOAD_1: 'Wysyłanie/pobieranie ustawień i firmware', + DOWNLOAD_UPLOAD_1: 'Pobieranie/wysyłanie ustawień i firmware', MODULES: 'Module', // TODO translate MODULES_1: 'Aktywuj lub dezaktywuj moduły zewnętrzne', // TODO translate MODULES_UPDATED: 'Modules updated', // TODO translate diff --git a/interface/src/i18n/sk/index.ts b/interface/src/i18n/sk/index.ts index 28676f4a2..aa22acb91 100644 --- a/interface/src/i18n/sk/index.ts +++ b/interface/src/i18n/sk/index.ts @@ -169,7 +169,7 @@ const sk: Translation = { SYSTEM: 'Systém', LOG_OF: '{0} Log', STATUS_OF: '{0} Stav', - UPLOAD_DOWNLOAD: 'Nahrať/Stiahnuť', + DOWNLOAD_UPLOAD: 'Stiahnuť/Nahrať', VERSION_ON: 'Momentálne nainštalovaná verzia: ', CLOSE: 'Zatvoriť', USE: 'Použiť', @@ -324,7 +324,7 @@ const sk: Translation = { SYSTEM_MEMORY: 'System Memory', // TODO translate APPLICATION_SETTINGS_1: 'Modify EMS-ESP Application Settings', // TODO translate SECURITY_1: 'Add or remove users', // TODO translate - UPLOAD_DOWNLOAD_1: 'Upload/Download Settings and Firmware', // TODO translate + DOWNLOAD_UPLOAD_1: 'Download and Upload Settings and Firmware', // TODO translate MODULES: 'Module', // TODO translate MODULES_1: 'Aktivujte alebo deaktivujte externé moduly', // TODO translate MODULES_UPDATED: 'Modules updated', // TODO translate diff --git a/interface/src/i18n/sv/index.ts b/interface/src/i18n/sv/index.ts index 192267fa9..4e1dddf45 100644 --- a/interface/src/i18n/sv/index.ts +++ b/interface/src/i18n/sv/index.ts @@ -169,7 +169,7 @@ const sv: Translation = { SYSTEM: 'System', LOG_OF: '{0} Logg', STATUS_OF: '{0} Status', - UPLOAD_DOWNLOAD: 'Upp/Nedladdning', + DOWNLOAD_UPLOAD: 'Nedladdning/Upp', VERSION_ON: 'You are currently on', // TODO translate CLOSE: 'Stäng', USE: 'Använd', @@ -324,7 +324,7 @@ const sv: Translation = { SYSTEM_MEMORY: 'System Memory', // TODO translate APPLICATION_SETTINGS_1: 'Modify EMS-ESP Application Settings', // TODO translate SECURITY_1: 'Add or remove users', // TODO translate - UPLOAD_DOWNLOAD_1: 'Upload/Download Settings and Firmware', // TODO translate + DOWNLOAD_UPLOAD_1: 'Download and Upload Settings and Firmware', // TODO translate MODULES: 'Module', // TODO translate MODULES_1: 'Aktivera eller avaktivera externa moduler', // TODO translate MODULES_UPDATED: 'Modules updated', // TODO translate diff --git a/interface/src/i18n/tr/index.ts b/interface/src/i18n/tr/index.ts index 2d279ec31..7141d9395 100644 --- a/interface/src/i18n/tr/index.ts +++ b/interface/src/i18n/tr/index.ts @@ -169,7 +169,7 @@ const tr: Translation = { SYSTEM: 'Sistem', LOG_OF: '{0} Kaydı', STATUS_OF: '{0} Durumu', - UPLOAD_DOWNLOAD: 'Yükleme/İndirme', + DOWNLOAD_UPLOAD: 'İndirme/Yükleme', VERSION_ON: 'You are currently on', // TODO translate CLOSE: 'Kapat', USE: 'KUllan', @@ -324,7 +324,7 @@ const tr: Translation = { SYSTEM_MEMORY: 'System Memory', // TODO translate APPLICATION_SETTINGS_1: 'Modify EMS-ESP Application Settings', // TODO translate SECURITY_1: 'Add or remove users', // TODO translate - UPLOAD_DOWNLOAD_1: 'Upload/Download Settings and Firmware', // TODO translate + DOWNLOAD_UPLOAD_1: 'Download and Upload Settings and Firmware', // TODO translate MODULES: 'Module', // TODO translate MODULES_1: 'Harici modülleri etkinleştirin veya devre dışı bırakın', // TODO translate MODULES_UPDATED: 'Modules updated', // TODO translate diff --git a/interface/yarn.lock b/interface/yarn.lock index 4643f3487..f72df1585 100644 --- a/interface/yarn.lock +++ b/interface/yarn.lock @@ -1701,7 +1701,7 @@ __metadata: typesafe-i18n: "npm:^5.26.2" typescript: "npm:^5.5.4" typescript-eslint: "npm:8.1.0" - vite: "npm:^5.4.0" + vite: "npm:^5.4.1" vite-plugin-imagemin: "npm:^0.6.1" vite-tsconfig-paths: "npm:^5.0.1" languageName: unknown @@ -5620,7 +5620,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.4.40": +"postcss@npm:^8.4.41": version: 8.4.41 resolution: "postcss@npm:8.4.41" dependencies: @@ -7037,13 +7037,13 @@ __metadata: languageName: node linkType: hard -"vite@npm:^5.4.0": - version: 5.4.0 - resolution: "vite@npm:5.4.0" +"vite@npm:^5.4.1": + version: 5.4.1 + resolution: "vite@npm:5.4.1" dependencies: esbuild: "npm:^0.21.3" fsevents: "npm:~2.3.3" - postcss: "npm:^8.4.40" + postcss: "npm:^8.4.41" rollup: "npm:^4.13.0" peerDependencies: "@types/node": ^18.0.0 || >=20.0.0 @@ -7076,7 +7076,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 10c0/122de7795e1c3c08cd0acc7d77296f908398266b424492be7310400107f37a3cf4c9506f2b4b16619e57299ca2859b8ca187aac5e25f8e66d84f9204a1d72d18 + checksum: 10c0/b9ea824f1a946aa494f756e6d9dd88869baa62ae5ba3071b32b6a20958fd622cb624c860bdd7daee201c83ca029feaf8bbe2d2a6e172a5d49308772f8899d86d languageName: node linkType: hard