From c80c1d57750eb8e53aef7b1bdf4c1d26f6a84920 Mon Sep 17 00:00:00 2001 From: Adrian Bonpin Date: Mon, 13 Jul 2026 06:25:55 +0800 Subject: [PATCH] fix(plugin): centered stats, View Details button with fallback, separate rows --- .../src/components/LibraryAppPanel.tsx | 54 +++++++++++++------ 1 file changed, 39 insertions(+), 15 deletions(-) diff --git a/plugins/decky-vault/src/components/LibraryAppPanel.tsx b/plugins/decky-vault/src/components/LibraryAppPanel.tsx index 27403bd..3da1375 100644 --- a/plugins/decky-vault/src/components/LibraryAppPanel.tsx +++ b/plugins/decky-vault/src/components/LibraryAppPanel.tsx @@ -16,6 +16,22 @@ interface Props { baseUrl: string } +function openExternalUrl(url: string) { + try { + if (Router?.NavigateToExternalWeb) { + Router.NavigateToExternalWeb(url) + return + } + } catch (e) { + console.error("[DeckyVault] NavigateToExternalWeb failed:", e) + } + try { + window.open(url, "_blank") + } catch (e) { + console.error("[DeckyVault] window.open failed:", e) + } +} + export default function LibraryAppPanel({ appId, title, hardwareSlug, baseUrl }: Props) { const [data, setData] = useState(null) const [devices, setDevices] = useState([]) @@ -65,7 +81,7 @@ export default function LibraryAppPanel({ appId, title, hardwareSlug, baseUrl }: if (loading) { return ( -
+
DeckyVault loading…
@@ -75,7 +91,7 @@ export default function LibraryAppPanel({ appId, title, hardwareSlug, baseUrl }: if (fetchError) { return ( -
+
DeckyVault: {fetchError}
@@ -85,7 +101,7 @@ export default function LibraryAppPanel({ appId, title, hardwareSlug, baseUrl }: if (!data || !data.game) { return ( -
+
Not on DeckyVault — add it
@@ -94,14 +110,14 @@ export default function LibraryAppPanel({ appId, title, hardwareSlug, baseUrl }: return ( <> - {/* Quick stats + device dropdown — single row */} + {/* Centered stats row */} -
+
{data.estFps ? ( - + {data.estFps.avg} avg {data.estFps.onePct != null && {data.estFps.onePct} 1% low} - {data.estFps.low != null && {data.estFps.low} min + {data.estFps.low != null && {data.estFps.low} min} {data.estFps.high != null && {data.estFps.high} max} {data.estFps.tdpAvg != null && {data.estFps.tdpAvg}W TDP} ({data.estFps.count}) @@ -109,16 +125,24 @@ export default function LibraryAppPanel({ appId, title, hardwareSlug, baseUrl }: ) : ( No data yet )} - setDevice(opt.data as string)} - /> - Router.NavigateToExternalWeb(gameUrl)}> - ↗ -
+ + {/* Device dropdown */} + + setDevice(opt.data as string)} + /> + + + {/* View Details button */} + + openExternalUrl(gameUrl)}> + View Details + + ) } \ No newline at end of file