import React, { useEffect } from 'react'; import { ArrowLeftIcon, ArrowRightIcon } from '../ui/icons'; import { useAssetNavigator } from '../hooks/useAssetNavigator'; import { preventAll } from './events'; const DesktopPreviewCard = ({ doc, title, ensureAssetUrl, getDocumentAsset, prefetch = 3, onNavigatorSnapshot, shouldLoad = true, }) => { const navigator = useAssetNavigator({ document: doc, assetType: 'preview', ensureAssetUrl: shouldLoad ? ensureAssetUrl : null, getAsset: getDocumentAsset, prefetch, }); const { currentUrl, cardinality, canGoPrev, canGoNext, currentMetadata, ordinal } = navigator; const docId = doc?.id ?? null; const metadataWidth = Number(currentMetadata?.width); const metadataHeight = Number(currentMetadata?.height); useEffect(() => { if (!onNavigatorSnapshot || !docId) { return undefined; } const snapshot = { url: currentUrl || null, alt: title, canGoPrev, canGoNext, goPrev: navigator.goPrev, goNext: navigator.goNext, ordinal, width: Number.isFinite(metadataWidth) && metadataWidth > 0 ? metadataWidth : null, height: Number.isFinite(metadataHeight) && metadataHeight > 0 ? metadataHeight : null, }; onNavigatorSnapshot(docId, snapshot); return () => onNavigatorSnapshot(docId, null); }, [ docId, currentUrl, title, canGoPrev, canGoNext, ordinal, metadataWidth, metadataHeight, navigator.goPrev, navigator.goNext, onNavigatorSnapshot, ]); const hasPreview = Boolean(currentUrl); const cardClasses = ['desk-item__card']; if (!hasPreview) cardClasses.push('desk-item__card--empty'); const showNav = hasPreview && (cardinality > 1 || canGoPrev || canGoNext); return (
{ if (event instanceof DragEvent) { event.preventDefault(); } }} > {hasPreview ? ( {title} event.preventDefault()} /> ) : (
DOC
{title}
)} {showNav ? (
) : null}
); }; export default DesktopPreviewCard;