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'
|
'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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user