import React, { } from "react"; import { useNavigate } from "react-router-dom"; import { useOrganization } from "@/contexts/OrganizationContext"; import { PostRendererProps } from '../types'; import { useMediaQuery } from "@/hooks/use-media-query"; import { cn } from "@/lib/utils"; import { isVideoType, normalizeMediaType, detectMediaType } from "@/lib/mediaRegistry"; // Extracted Components import { MobileGroupedFeed } from "./components/MobileGroupedFeed"; import { CompactPostHeader } from "./components/CompactPostHeader"; import { CompactMediaDetails } from "./components/CompactMediaDetails"; import { Gallery } from "./components/Gallery"; // Lazy load ImageEditor const ImageEditor = React.lazy(() => import("@/components/ImageEditor").then(module => ({ default: module.ImageEditor }))); export const CompactRenderer: React.FC = (props) => { const { post, authorProfile, mediaItems, mediaItem, isOwner, isLiked, likesCount, onEditPost, onViewModeChange, onExportMarkdown, onDeletePost, onDeletePicture, onLike, onEditPicture, onMediaSelect, onExpand, onDownload, onCategoryManagerOpen, currentImageIndex, videoPlaybackUrl, videoPosterUrl, versionImages, handlePrevImage, handleNavigate, navigationData, isEditMode, localPost, setLocalPost, localMediaItems, setLocalMediaItems, onMoveItem, onEditModeToggle, onSaveChanges, onGalleryPickerOpen } = props; const [expandedComments, setExpandedComments] = React.useState>({}); const [expandedDescriptions, setExpandedDescriptions] = React.useState>({}); const [showImageEditor, setShowImageEditor] = React.useState(false); const [cacheBustKeys, setCacheBustKeys] = React.useState>({}); const navigate = useNavigate(); const { orgSlug } = useOrganization(); const isDesktop = useMediaQuery("(min-width: 1024px)"); const showDesktopLayout = isDesktop; const effectiveType = mediaItem.type || detectMediaType(mediaItem.image_url); const isVideo = isVideoType(normalizeMediaType(effectiveType)); return (
{/* Mobile Header - Controls and Info at Top */}
{/* Desktop layout: Media on left, content on right — grid row must not grow with markdown (min-h-0 grid items) */}
{/* Left Column - Media */}
{/* Desktop Gallery - Combines Media Viewer + Filmstrip */}
{/* Mobile View - Grouped Feed - Hidden on Desktop */}
{/* Right Column - Content (scrolls; post description lives in header) */}
onGalleryPickerOpen!(currentImageIndex + 1)} onEditPicture={onEditPicture!} onDownload={onDownload!} isVideo={isVideo} post={post} orgSlug={orgSlug} embedded={!!props.embedded} />
{showImageEditor && (
}> setShowImageEditor(false)} onSave={() => { setCacheBustKeys(prev => ({ ...prev, [mediaItem.id]: Date.now() })); setShowImageEditor(false); onLike(); }} />
)} ); }