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:
parent
473fc3acab
commit
572327a651
@ -1,13 +1,18 @@
|
||||
'use client'
|
||||
|
||||
import dynamic from 'next/dynamic'
|
||||
import Image from 'next/image'
|
||||
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
|
||||
const IMAGES = new Set([0, 2, 'Image', 'ImageUrl'])
|
||||
const VIDEOS = new Set([1, 3, 'Video', 'VideoUrl'])
|
||||
const AUDIOS = new Set([4, 'Audio'])
|
||||
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. */
|
||||
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)
|
||||
return (
|
||||
<Image
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user