From 340a04f23a46e8618292f906ed88f8f6eea8c1a4 Mon Sep 17 00:00:00 2001 From: Marc Brooks Date: Tue, 14 Oct 2025 00:03:18 -0500 Subject: [PATCH] Settings General pages --- ui/localization/messages/en.json | 48 ++++++++++- .../devices.$id.settings.general._index.tsx | 58 ++++++------- .../devices.$id.settings.general.reboot.tsx | 9 +- .../devices.$id.settings.general.update.tsx | 85 +++++++++---------- 4 files changed, 118 insertions(+), 82 deletions(-) diff --git a/ui/localization/messages/en.json b/ui/localization/messages/en.json index 70d7fc11..1c5d85e3 100644 --- a/ui/localization/messages/en.json +++ b/ui/localization/messages/en.json @@ -337,6 +337,7 @@ "rename_device_new_name_placeholder": "Plex Media Server", "rename_device_no_name": "Please specify a name", "rename": "Rename", + "retry": "Retry", "saving": "Saving…", "search_placeholder": "Search…", "serial_console_baud_rate": "Baud Rate", @@ -599,5 +600,50 @@ "appearance_theme_light": "Light", "appearance_theme_system": "System", "appearance_theme": "Theme", - "appearance_title": "Appearance" + "appearance_title": "Appearance", + + "general_app_version": "App: {version}", + "general_auto_update_description": "Automatically update the device to the latest version", + "general_auto_update_error": "Failed to set auto-update: {error}", + "general_auto_update_title": "Auto Update", + "general_check_for_updates": "Check for Updates", + "general_page_description": "Configure device settings and update preferences", + "general_reboot_device": "Reboot Device", + "general_reboot_device_description": "Power cycle the JetKVM", + "general_system_version": "System: {version}", + "general_title": "General", + + "general_update_app_update_title": "App Update", + "general_update_application_type": "App", + "general_update_available_description": "A new update is available to enhance system performance and improve compatibility. We recommend updating to ensure everything runs smoothly.", + "general_update_available_title": "Update available", + "general_update_background_button": "Update in Background", + "general_update_check_again_button": "Check Again", + "general_update_checking_description": "We're ensuring your device has the latest features and improvements.", + "general_update_checking_title": "Checking for updates...", + "general_update_completed_description": "Your device has been successfully updated to the latest version. Enjoy the new features and improvements!", + "general_update_completed_title": "Update Completed Successfully", + "general_update_error_description": "An error occurred while updating your device. Please try again later.", + "general_update_error_details": "Error details: {errorMessage}", + "general_update_error_title": "Update Error", + "general_update_later_button": "Do it later", + "general_update_now_button": "Update Now", + "general_update_rebooting": "Rebooting to complete the update...", + "general_update_system_type": "System", + + "general_update_status_awaiting_reboot": "Awaiting reboot", + "general_update_status_downloading": "Downloading {update_type} update...", + "general_update_status_fetching": "Fetching update information...", + "general_update_status_installing": "Installing {update_type} update...", + "general_update_status_verifying": "Verifying {update_type} update...", + "general_update_system_update_title": "Linux System Update", + "general_update_up_to_date_description": "Your system is running the latest version. No updates are currently available.", + "general_update_up_to_date_title": "System is up to date", + "general_update_updating_description": "Please don't turn off your device. This process may take a few minutes.", + "general_update_updating_title": "Updating your device", + + "general_reboot_description": "Do you want to proceed with rebooting the system?", + "general_reboot_no_button": "No", + "general_reboot_title": "Reboot JetKVM", + "general_reboot_yes_button": "Yes" } \ No newline at end of file diff --git a/ui/src/routes/devices.$id.settings.general._index.tsx b/ui/src/routes/devices.$id.settings.general._index.tsx index c71e858b..cca18c03 100644 --- a/ui/src/routes/devices.$id.settings.general._index.tsx +++ b/ui/src/routes/devices.$id.settings.general._index.tsx @@ -1,16 +1,14 @@ +import { useState, useEffect } from "react"; -import { useState , useEffect } from "react"; - +import { JsonRpcResponse, useJsonRpc } from "@hooks/useJsonRpc"; +import { useDeviceUiNavigation } from "@hooks/useAppNavigation"; +import { useDeviceStore } from "@hooks/stores"; +import { Button } from "@components/Button"; +import Checkbox from "@components/Checkbox"; import { SettingsItem } from "@components/SettingsItem"; -import { JsonRpcResponse, useJsonRpc } from "@/hooks/useJsonRpc"; - -import { SettingsPageHeader } from "../components/SettingsPageheader"; -import { Button } from "../components/Button"; -import notifications from "../notifications"; -import Checkbox from "../components/Checkbox"; -import { useDeviceUiNavigation } from "../hooks/useAppNavigation"; -import { useDeviceStore } from "../hooks/stores"; - +import { SettingsPageHeader } from "@components/SettingsPageheader"; +import notifications from "@/notifications"; +import { m } from "@localizations/messages.js"; export default function SettingsGeneralRoute() { const { send } = useJsonRpc(); @@ -34,7 +32,7 @@ export default function SettingsGeneralRoute() { send("setAutoUpdateState", { enabled }, (resp: JsonRpcResponse) => { if ("error" in resp) { notifications.error( - `Failed to set auto-update: ${resp.error.data || "Unknown error"}`, + m.general_auto_update_error({ error: resp.error.data || m.unknown_error() }), ); return; } @@ -45,44 +43,36 @@ export default function SettingsGeneralRoute() { return (
- App: {currentVersions.appVersion} -
- System: {currentVersions.systemVersion} - - ) : ( - <> - App: Loading... -
- System: Loading... - - ) + <> + {m.general_app_version({ version: currentVersions ? currentVersions.appVersion : m.loading() })} +
+ {m.general_system_version({ version: currentVersions ? currentVersions.systemVersion : m.loading() })} + } />
diff --git a/ui/src/routes/devices.$id.settings.general.reboot.tsx b/ui/src/routes/devices.$id.settings.general.reboot.tsx index 4a4b8fe8..89c8eee9 100644 --- a/ui/src/routes/devices.$id.settings.general.reboot.tsx +++ b/ui/src/routes/devices.$id.settings.general.reboot.tsx @@ -3,6 +3,7 @@ import { useNavigate } from "react-router"; import { useJsonRpc } from "@hooks/useJsonRpc"; import { Button } from "@components/Button"; +import { m } from "@localizations/messages.js"; export default function SettingsGeneralRebootRoute() { const navigate = useNavigate(); @@ -50,15 +51,15 @@ function ConfirmationBox({

- Reboot JetKVM + {m.general_reboot_title()}

- Do you want to proceed with rebooting the system? + {m.general_reboot_description()}

-
diff --git a/ui/src/routes/devices.$id.settings.general.update.tsx b/ui/src/routes/devices.$id.settings.general.update.tsx index 48c87f3d..b01c1b93 100644 --- a/ui/src/routes/devices.$id.settings.general.update.tsx +++ b/ui/src/routes/devices.$id.settings.general.update.tsx @@ -1,14 +1,15 @@ -import { useLocation, useNavigate } from "react-router"; import { useCallback, useEffect, useRef, useState } from "react"; +import { useLocation, useNavigate } from "react-router"; import { CheckCircleIcon } from "@heroicons/react/20/solid"; -import Card from "@/components/Card"; -import { useJsonRpc } from "@/hooks/useJsonRpc"; +import { useJsonRpc } from "@hooks/useJsonRpc"; +import { UpdateState, useUpdateStore } from "@hooks/stores"; +import { useDeviceUiNavigation } from "@hooks/useAppNavigation"; +import { SystemVersionInfo, useVersion } from "@hooks/useVersion"; import { Button } from "@components/Button"; -import { UpdateState, useUpdateStore } from "@/hooks/stores"; -import LoadingSpinner from "@/components/LoadingSpinner"; -import { useDeviceUiNavigation } from "@/hooks/useAppNavigation"; -import { SystemVersionInfo, useVersion } from "@/hooks/useVersion"; +import Card from "@components/Card"; +import LoadingSpinner from "@components/LoadingSpinner"; +import { m } from "@localizations/messages.js"; export default function SettingsGeneralUpdateRoute() { const navigate = useNavigate(); @@ -160,10 +161,10 @@ function LoadingState({

- Checking for updates... + {m.general_update_checking_title()}

- We{"'"}re ensuring your device has the latest features and improvements. + {m.general_update_checking_description()}

@@ -174,7 +175,7 @@ function LoadingState({ >
-
@@ -228,16 +229,18 @@ function UpdatingDeviceState({ const verfiedAt = otaState[`${type}VerifiedAt`]; const updatedAt = otaState[`${type}UpdatedAt`]; + const update_type = () => (type === "system" ? m.general_update_system_type() : m.general_update_app_type()); + if (!otaState.metadataFetchedAt) { - return "Fetching update information..."; + return m.general_update_status_fetching(); } else if (!downloadFinishedAt) { - return `Downloading ${type} update...`; + return m.general_update_status_downloading({ update_type }); } else if (!verfiedAt) { - return `Verifying ${type} update...`; + return m.general_update_status_verifying({ update_type }); } else if (!updatedAt) { - return `Installing ${type} update...`; + return m.general_update_status_installing({ update_type }); } else { - return `Awaiting reboot`; + return m.general_update_status_awaiting_reboot(); } }; @@ -260,10 +263,10 @@ function UpdatingDeviceState({

- Updating your device + {m.general_update_updating_title()}

- Please don{"'"}t turn off your device. This process may take a few minutes. + {m.general_update_updating_description()}

@@ -272,7 +275,7 @@ function UpdatingDeviceState({
- Rebooting to complete the update... + {m.general_update_rebooting()}
@@ -288,7 +291,7 @@ function UpdatingDeviceState({

- Linux System Update + {m.general_update_system_update_title()}

{calculateOverallProgress("system") < 100 ? ( @@ -320,7 +323,7 @@ function UpdatingDeviceState({

- App Update + {m.general_update_app_update_title()}

{calculateOverallProgress("app") < 100 ? ( @@ -352,7 +355,7 @@ function UpdatingDeviceState({
@@ -372,15 +375,15 @@ function SystemUpToDateState({

- System is up to date + {m.general_update_up_to_date_title()}

- Your system is running the latest version. No updates are currently available. + {m.general_update_up_to_date_description()}

-
@@ -400,30 +403,27 @@ function UpdateAvailableState({

- Update available + {m.general_update_available_title()}

- A new update is available to enhance system performance and improve - compatibility. We recommend updating to ensure everything runs smoothly. + {m.general_update_available_description()}

{versionInfo?.systemUpdateAvailable ? ( <> - System:{" "} - {versionInfo?.remote?.systemVersion} + {m.general_update_system_type()}: {versionInfo?.remote?.systemVersion}
) : null} {versionInfo?.appUpdateAvailable ? ( <> - App:{" "} - {versionInfo?.remote?.appVersion} + {m.general_update_application_type()}: {versionInfo?.remote?.appVersion} ) : null}

-
@@ -435,14 +435,13 @@ function UpdateCompletedState({ onClose }: { onClose: () => void }) {

- Update Completed Successfully + {m.general_update_completed_title()}

- Your device has been successfully updated to the latest version. Enjoy the new - features and improvements! + {m.general_update_completed_description()}

-
@@ -461,18 +460,18 @@ function UpdateErrorState({ return (
-

Update Error

+

{m.general_update_error_title()}

- An error occurred while updating your device. Please try again later. + {m.general_update_error_description()}

{errorMessage && (

- Error details: {errorMessage} + {m.general_update_error_details({ errorMessage })}

)}
-