import { useEffect, useState } from 'react'; import { Film, ImageIcon } from 'lucide-react'; import { resolveImageWorkspaceAssetUrl } from '@/lib/image-workspace'; import { cn } from '@/lib/utils'; import type { DesignAsset } from '../../../shared/image-workspace'; export function DesignAssetThumbnail({ asset, className, alt, controls = false, }: { asset: DesignAsset | null; className?: string; alt?: string; controls?: boolean; }) { const [resolution, setResolution] = useState<{ contentPath: string | null; source: string | null; failed: boolean; }>({ contentPath: asset?.contentPath ?? null, source: null, failed: false }); const currentResolution = resolution.contentPath === (asset?.contentPath ?? null) ? resolution : { contentPath: asset?.contentPath ?? null, source: null, failed: false }; useEffect(() => { if (!asset) return; let active = true; void resolveImageWorkspaceAssetUrl(asset.contentPath) .then((url) => { if (active) setResolution({ contentPath: asset.contentPath, source: url, failed: false }); }) .catch(() => { if (active) setResolution({ contentPath: asset.contentPath, source: null, failed: true }); }); return () => { active = false; }; }, [asset]); if (!asset || !currentResolution.source || currentResolution.failed) { return ( ); } if (asset.mediaType === 'video') { return (