fix: sync capture override response

This commit is contained in:
William Valentin
2026-02-04 11:02:06 -08:00
parent 8eae0c7c97
commit ffba6fb290
2 changed files with 33 additions and 4 deletions

View File

@@ -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,
},
};
}

View File

@@ -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<string, string | undefined>;
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));