From 1f8c28e1dbaab49d208823ce6f409e4a4c2e91d9 Mon Sep 17 00:00:00 2001 From: William Valentin Date: Mon, 2 Feb 2026 19:47:45 -0800 Subject: [PATCH] fix: handle viewer load errors --- apps/web/app/components/MediaPanel.tsx | 35 +++++++++++++++----------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/apps/web/app/components/MediaPanel.tsx b/apps/web/app/components/MediaPanel.tsx index b309b93..9a56e94 100644 --- a/apps/web/app/components/MediaPanel.tsx +++ b/apps/web/app/components/MediaPanel.tsx @@ -175,21 +175,28 @@ export function MediaPanel(props: { selectedDayIso: string | null }) { setViewerError(null); setVideoFallback(null); - if (asset.media_type === "video") { - const playback = await loadVideoPlaybackUrl(asset.id); - const variantLabel = - playback.variant.kind === "video_mp4" - ? "video_mp4" - : playback.variant.kind; - setViewer({ asset, url: playback.url, variant: variantLabel }); - void loadAdminLists(); - return; - } + try { + if (asset.media_type === "video") { + const playback = await loadVideoPlaybackUrl(asset.id); + const variantLabel = + playback.variant.kind === "video_mp4" + ? "video_mp4" + : playback.variant.kind; + setViewer({ asset, url: playback.url, variant: variantLabel }); + void loadAdminLists(); + return; + } - const variant: "original" | "thumb_med" | "poster" = "original"; - const url = await loadSignedUrl(asset.id, variant); - setViewer({ asset, url, variant }); - void loadAdminLists(); + const variant: "original" | "thumb_med" | "poster" = "original"; + const url = await loadSignedUrl(asset.id, variant); + setViewer({ asset, url, variant }); + void loadAdminLists(); + } catch (err) { + setViewer(null); + setViewerError( + err instanceof Error ? err.message : "viewer_open_failed", + ); + } } async function loadAdminLists() {