import { useState, useEffect } from 'react'; import { Button, Tooltip, Spin } from 'antd'; import { ScissorOutlined } from '@ant-design/icons'; import { getEnv } from '../utils/env'; import { getAccessToken } from '../auth/oidc'; interface PdfSplitViewerProps { attachmentId: number; pageCount: number; startPage?: number; endPage?: number; onSplit: (pageIndex: number) => void; disabled: boolean; } export default function PdfSplitViewer({ attachmentId, pageCount, startPage, endPage, onSplit, disabled }: PdfSplitViewerProps) { const [token, setToken] = useState(null); useEffect(() => { getAccessToken().then(t => setToken(t)); }, []); if (!token) return ; if (pageCount === 0) { return (

Vorschau nicht verfügbar (Dokument wurde vor dem Update geladen).

); } const actualStart = startPage || 1; const actualEnd = endPage || pageCount; const pagesToRender = []; for (let i = actualStart; i <= actualEnd; i++) { pagesToRender.push(i); } const getImageUrl = (page: number) => { // We add the token as a query parameter because tags don't support Authorization headers easily. // However, it's more secure to fetch the blob and create an object URL, or rely on cookie auth. // Let's fetch the blob and use object URLs to pass the bearer token securely. return `${getEnv('VITE_API_URL')}/api/email-import/attachments/${attachmentId}/pages/${page}/thumb`; }; return (
{pagesToRender.map((pageNum) => (
{!disabled && pageNum < actualEnd && (
)}
))}
); } function ImageWithAuth({ url, token }: { url: string; token: string }) { const [imgSrc, setImgSrc] = useState(null); useEffect(() => { let cancelled = false; let objectUrl: string | undefined; fetch(url, { headers: { Authorization: `Bearer ${token}` } }) .then(res => { if (!res.ok) throw new Error('Network response was not ok'); return res.blob(); }) .then(blob => { if (cancelled) return; objectUrl = URL.createObjectURL(blob); setImgSrc(objectUrl); }) .catch(() => {}); return () => { cancelled = true; if (objectUrl) URL.revokeObjectURL(objectUrl); }; }, [url, token]); if (!imgSrc) return ; return PDF Page; }