import { ImageIcon } from "lucide-react"; import { ZoomableImage } from "@/modules/admin/components/courses/LessonsPreview"; import { useAssetPreviewSrc } from "@/hooks/useAssetPreviewSrc"; import { MediaFallback } from "@/components/generic/MediaFallback"; // content shape: { asset_id?, url?, storage_provider?, alt? } // // url is redacted (null) server-side for S3 assets — see redactS3Url() in // controllers/admin/assets.controller.js. Resolve through useAssetPreviewSrc // (media.util.js) instead of reading content.url directly, so S3-backed // images re-mint a fresh stream token/thumbnail at render time. export function ImageBlock({ content }) { const { src, loading } = useAssetPreviewSrc( { asset_id: content?.asset_id, storage_provider: content?.storage_provider, file_url: content?.url, thumbnail_url: content?.url }, { scope: "client" }, ); if (loading) { return ; } if (!src) { return (
No image
); } return ; }