Lot E : cas PDF dans ResourceViewer

Sans ce cas, un PDF tombait dans le rendu image par défaut et s'affichait en
image cassée — le même défaut que celui corrigé pour la vidéo le 09/08.

Réutilise le PdfViewer existant et son proxy /api/pdf (le contournement CORS
était déjà écrit), importé en dynamic({ssr:false}) comme le fait PdfSection.

npm run build .

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Thomas Fransolet 2026-08-11 15:31:07 +02:00
parent 473fc3acab
commit 572327a651

View File

@ -1,13 +1,18 @@
'use client' 'use client'
import dynamic from 'next/dynamic'
import Image from 'next/image' import Image from 'next/image'
import type { ResourceDTO } from '@/lib/api/types' import type { ResourceDTO } from '@/lib/api/types'
// Même stratégie que PdfSection : react-pdf a besoin de `window`.
const PdfViewer = dynamic(() => import('@/components/sections/pdf/PdfViewer'), { ssr: false })
// Mirrors C# ResourceType enum — backend may serialize as int OR as string name // Mirrors C# ResourceType enum — backend may serialize as int OR as string name
const IMAGES = new Set([0, 2, 'Image', 'ImageUrl']) const IMAGES = new Set([0, 2, 'Image', 'ImageUrl'])
const VIDEOS = new Set([1, 3, 'Video', 'VideoUrl']) const VIDEOS = new Set([1, 3, 'Video', 'VideoUrl'])
const AUDIOS = new Set([4, 'Audio']) const AUDIOS = new Set([4, 'Audio'])
const VIDEO_URLS = new Set([3, 'VideoUrl']) const VIDEO_URLS = new Set([3, 'VideoUrl'])
const PDFS = new Set([5, 'PDF'])
/** An absent type falls back to image rendering below — treat it as an image here too. */ /** An absent type falls back to image rendering below — treat it as an image here too. */
export function isImageResource(type: unknown): boolean { export function isImageResource(type: unknown): boolean {
@ -81,6 +86,16 @@ export default function ResourceViewer({ resource, alt = '', objectFit = 'contai
) )
} }
// PDF — sans ce cas, un PDF tombait dans le rendu image ci-dessous et
// s'affichait en image cassée. Même défaut que celui corrigé pour la vidéo.
if (t !== undefined && PDFS.has(t as never)) {
return (
<div style={{ position: 'absolute', inset: 0 }}>
<PdfViewer url={url} />
</div>
)
}
// Image, ImageUrl, or unknown → render as image (safe default) // Image, ImageUrl, or unknown → render as image (safe default)
return ( return (
<Image <Image