diff --git a/frontend-modern/src/App.tsx b/frontend-modern/src/App.tsx index 2932ee6c3..ce7adff94 100644 --- a/frontend-modern/src/App.tsx +++ b/frontend-modern/src/App.tsx @@ -84,12 +84,27 @@ function App() { const [dataUpdated, setDataUpdated] = createSignal(false); let updateTimeout: number; + // Last update time formatting + const [lastUpdateText, setLastUpdateText] = createSignal(''); + + const formatLastUpdate = (timestamp: string) => { + if (!timestamp) return ''; + const date = new Date(timestamp); + return date.toLocaleTimeString('en-US', { + hour: 'numeric', + minute: '2-digit', + second: '2-digit', + hour12: true + }); + }; + // Flash indicator when data updates createEffect(() => { // Watch for state changes const updateTime = state().lastUpdate; if (updateTime && updateTime !== '') { setDataUpdated(true); + setLastUpdateText(formatLastUpdate(updateTime)); window.clearTimeout(updateTimeout); updateTimeout = window.setTimeout(() => setDataUpdated(false), POLLING_INTERVALS.DATA_FLASH); } @@ -478,6 +493,7 @@ function App() { connected={connected} reconnecting={reconnecting} dataUpdated={dataUpdated} + lastUpdateText={lastUpdateText} versionInfo={versionInfo} darkMode={darkMode} toggleDarkMode={toggleDarkMode} @@ -519,6 +535,7 @@ function AppLayout(props: { connected: () => boolean; reconnecting: () => boolean; dataUpdated: () => boolean; + lastUpdateText: () => string; versionInfo: () => VersionInfo | null; darkMode: () => boolean; toggleDarkMode: () => void; @@ -623,16 +640,16 @@ function AppLayout(props: {
- + - {props.connected() - ? 'Connected' - : props.reconnecting() - ? 'Reconnecting...' - : 'Disconnected'} + + + + + + + + {props.connected() + ? 'Connected' + : props.reconnecting() + ? 'Reconnecting...' + : 'Disconnected'} +
@@ -843,6 +868,10 @@ function AppLayout(props: { {props.versionInfo()?.isDevelopment && ' (Development)'} {props.versionInfo()?.isDocker && ' - Docker'} + + | + Last updated: {props.lastUpdateText()} + );