"use client"; import { useEffect, useMemo, useRef, useState } from "react"; import { Button, Card, Typography } from "poyraz-ui/atoms"; import { Modal, ModalContent, ModalTitle } from "poyraz-ui/molecules"; import { YoutubeLiteEmbed } from "@/components/youtube-lite-embed"; type ContentContentProps = { youtubeLinks: readonly string[]; pdfFiles: string[]; }; function PdfFirstPagePreview({ src, title }: { src: string; title: string }) { const canvasRef = useRef(null); const [failed, setFailed] = useState(false); useEffect(() => { let cancelled = false; let loadingTask: { promise: Promise; destroy?: () => void; } | null = null; const render = async () => { try { const pdfjs = await import("pdfjs-dist"); const lib = pdfjs as unknown as { version: string; getDocument: (src: string) => { promise: Promise; destroy?: () => void; }; GlobalWorkerOptions: { workerSrc: string }; }; lib.GlobalWorkerOptions.workerSrc = `https://unpkg.com/pdfjs-dist@${lib.version}/build/pdf.worker.min.mjs`; loadingTask = lib.getDocument(src); const pdf = (await loadingTask.promise) as { getPage: (page: number) => Promise<{ getViewport: (opts: { scale: number }) => { width: number; height: number; }; render: (opts: { canvasContext: CanvasRenderingContext2D; viewport: { width: number; height: number }; }) => { promise: Promise }; }>; }; const page = await pdf.getPage(1); const viewport = page.getViewport({ scale: 1 }); const canvas = canvasRef.current; if (!canvas || cancelled) return; const context = canvas.getContext("2d"); if (!context) return; const ratio = window.devicePixelRatio || 1; canvas.width = Math.floor(viewport.width * ratio); canvas.height = Math.floor(viewport.height * ratio); canvas.style.width = "100%"; canvas.style.height = "auto"; context.setTransform(ratio, 0, 0, ratio, 0, 0); await page.render({ canvasContext: context, viewport }).promise; } catch { if (!cancelled) { setFailed(true); } } }; void render(); return () => { cancelled = true; if (loadingTask?.destroy) { loadingTask.destroy(); } }; }, [src]); if (failed) { return (
Önizleme yüklenemedi
); } return (
); } export function ContentContent({ youtubeLinks, pdfFiles, }: ContentContentProps) { const [pdfModalOpen, setPdfModalOpen] = useState(false); const [activePdfIndex, setActivePdfIndex] = useState(0); const activePdf = pdfFiles[activePdfIndex] ?? null; const canGoPrev = activePdfIndex > 0; const canGoNext = activePdfIndex < pdfFiles.length - 1; const embeddedVideos = useMemo( () => youtubeLinks.slice(0, 3), [youtubeLinks], ); const openPdfModal = (index: number) => { setActivePdfIndex(index); setPdfModalOpen(true); }; return (
Son YouTube Videoları
{embeddedVideos.map((link) => ( ))}
LinkedIn PDF Notları
{pdfFiles.map((pdf, index) => ( ))}
{activePdf ? activePdf.replace(/\.pdf$/i, "") : "PDF Notu"}
{pdfFiles.length === 0 ? "0 / 0" : `${activePdfIndex + 1} / ${pdfFiles.length}`}
{activePdf ? (