From ffba6fb29034d7b3419d7693157db26589026413 Mon Sep 17 00:00:00 2001 From: William Valentin Date: Wed, 4 Feb 2026 11:02:06 -0800 Subject: [PATCH] fix: sync capture override response --- .../[id]/override-capture-ts/handlers.ts | 20 ++++++++++++++++++- apps/web/app/components/MediaPanel.tsx | 17 +++++++++++++--- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/apps/web/app/api/assets/[id]/override-capture-ts/handlers.ts b/apps/web/app/api/assets/[id]/override-capture-ts/handlers.ts index faca7e1..a4420e0 100644 --- a/apps/web/app/api/assets/[id]/override-capture-ts/handlers.ts +++ b/apps/web/app/api/assets/[id]/override-capture-ts/handlers.ts @@ -102,6 +102,18 @@ export async function handleSetCaptureOverride(input: { return { status: 500, body: { error: "insert_failed" } }; } + const assetRows = await db< + { + capture_ts_utc: string | null; + }[] + >` + select capture_ts_utc + from assets + where id = ${created.asset_id} + limit 1 + `; + const baseCaptureTs = assetRows[0]?.capture_ts_utc ?? null; + const payload = JSON.stringify({ capture_ts_utc_override: created.capture_ts_utc_override, capture_offset_minutes_override: created.capture_offset_minutes_override, @@ -111,5 +123,11 @@ export async function handleSetCaptureOverride(input: { values ('admin', 'override_capture_ts', 'asset', ${created.asset_id}, ${payload}::jsonb) `; - return { status: 200, body: created }; + return { + status: 200, + body: { + ...created, + base_capture_ts_utc: baseCaptureTs, + }, + }; } diff --git a/apps/web/app/components/MediaPanel.tsx b/apps/web/app/components/MediaPanel.tsx index a708af9..842cf55 100644 --- a/apps/web/app/components/MediaPanel.tsx +++ b/apps/web/app/components/MediaPanel.tsx @@ -25,6 +25,11 @@ type SignedUrlResponse = { expiresSeconds: number; }; +type OverrideResponse = { + capture_ts_utc_override: string | null; + base_capture_ts_utc: string | null; +}; + type PreviewUrlState = Record; type VideoPlaybackVariant = { kind: "original" } | { kind: "video_mp4"; size: number }; type VariantsResponse = Array<{ kind: string; size: number; key: string }>; @@ -232,17 +237,20 @@ export function MediaPanel(props: { selectedDayIso: string | null }) { }, ); if (!res.ok) throw new Error(`override_failed:${res.status}`); + const json = (await res.json()) as OverrideResponse; setViewer((prev) => prev ? { ...prev, asset: { ...prev.asset, - capture_ts_utc: trimmed, + capture_ts_utc: + json.capture_ts_utc_override ?? json.base_capture_ts_utc, }, } : prev, ); + setBaseCaptureTs(json.base_capture_ts_utc ?? null); setOverrideError("Override saved."); } catch (err) { setOverrideError(err instanceof Error ? err.message : String(err)); @@ -270,18 +278,21 @@ export function MediaPanel(props: { selectedDayIso: string | null }) { }, ); if (!res.ok) throw new Error(`override_clear_failed:${res.status}`); + const json = (await res.json()) as OverrideResponse; setViewer((prev) => prev ? { ...prev, asset: { ...prev.asset, - capture_ts_utc: baseCaptureTs, + capture_ts_utc: + json.capture_ts_utc_override ?? json.base_capture_ts_utc, }, } : prev, ); - setOverrideInput(baseCaptureTs ?? ""); + setBaseCaptureTs(json.base_capture_ts_utc ?? null); + setOverrideInput(json.base_capture_ts_utc ?? ""); setOverrideError("Override cleared."); } catch (err) { setOverrideError(err instanceof Error ? err.message : String(err));