From 242f71628b885d7ee5a2c274f7083e75480e8fca Mon Sep 17 00:00:00 2001 From: suu <46421931+0suu@users.noreply.github.com> Date: Mon, 13 Apr 2026 20:44:37 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=E3=82=B9=E3=83=86=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E3=82=B9=E3=83=90=E3=83=BC=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/renderer/src/App.tsx | 16 +- .../src/components/DeviceListScreen.tsx | 11 +- .../src/components/EnvironmentStatusBar.tsx | 176 ++++++++++++++++++ src/renderer/src/i18n.ts | 4 + .../slices/__tests__/settingsSlice.test.ts | 1 + .../src/store/slices/settingsSlice.ts | 17 +- 6 files changed, 215 insertions(+), 10 deletions(-) create mode 100644 src/renderer/src/components/EnvironmentStatusBar.tsx diff --git a/src/renderer/src/App.tsx b/src/renderer/src/App.tsx index a79bcd0..021d21a 100644 --- a/src/renderer/src/App.tsx +++ b/src/renderer/src/App.tsx @@ -18,6 +18,7 @@ import { DeviceDetailScreen } from "./components/DeviceDetailScreen"; import { SettingsScreen } from "./components/SettingsScreen"; import { ScenesScreen } from "./components/ScenesScreen"; import { HideOnScroll } from "./components/HideOnScroll"; +import { EnvironmentStatusBar } from "./components/EnvironmentStatusBar"; import { AppDispatch } from "./store/store"; import { createAppTheme } from "./theme"; import { @@ -29,7 +30,7 @@ import { testApiCredentials, selectTheme, } from "./store/slices/settingsSlice"; -import { loadDeviceOrder, pollAllDeviceStatuses, selectAllDevices } from "./store/slices/deviceSlice"; // Added pollAllDeviceStatuses +import { fetchDevices, loadDeviceOrder, pollAllDeviceStatuses, selectAllDevices } from "./store/slices/deviceSlice"; import { loadNightLightSceneAssignments, loadSceneOrder } from "./store/slices/sceneSlice"; import { useTranslation } from "./useTranslation"; @@ -106,6 +107,14 @@ function App() { dispatch(testApiCredentials()); }, [dispatch, storedToken, storedSecret]); + // Fetch device list at the App level so the environment status bar (and + // polling) work regardless of which view is active on startup. + useEffect(() => { + if (isTokenValid && storedToken) { + dispatch(fetchDevices()); + } + }, [dispatch, isTokenValid, storedToken]); + // Effect for polling logic useEffect(() => { // Clear any existing timer @@ -204,9 +213,12 @@ function App() { - + {t("App Title")} + + +