feat(frontend): add thumbnailUrl helper with cache-bust param
Pure function returning /api/documents/{id}/thumbnail?v=<timestamp>
or null when thumbnailKey is missing. The encoded timestamp changes
whenever the backend regenerates a thumbnail (file replace),
invalidating browser caches despite the immutable Cache-Control.
Refs #307
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
18
frontend/src/lib/thumbnails.ts
Normal file
18
frontend/src/lib/thumbnails.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
type ThumbnailDoc = {
|
||||
id: string;
|
||||
thumbnailKey?: string;
|
||||
thumbnailGeneratedAt?: string;
|
||||
};
|
||||
|
||||
/**
|
||||
* Builds the URL for a document thumbnail image, or returns null when the document
|
||||
* has no thumbnail yet. When `thumbnailGeneratedAt` is present it is appended as a
|
||||
* `?v=…` query param so the browser / proxy cache is invalidated whenever the file
|
||||
* is replaced (the backend regenerates thumbnails at the same S3 key on replace).
|
||||
*/
|
||||
export function thumbnailUrl(doc: ThumbnailDoc): string | null {
|
||||
if (!doc.thumbnailKey) return null;
|
||||
const base = `/api/documents/${doc.id}/thumbnail`;
|
||||
if (!doc.thumbnailGeneratedAt) return base;
|
||||
return `${base}?v=${encodeURIComponent(doc.thumbnailGeneratedAt)}`;
|
||||
}
|
||||
Reference in New Issue
Block a user