import { ContentElement, ContentImageProps } from "./types"; import { ImageComponent, useContentImageUrl } from "./ImageMediaComponent"; import { Link } from "react-router-dom"; import { ReactElement } from "react"; import { TextMediaComponent } from "./TextMediaComponent"; import { VideoComponent, useContentVideoUrl } from "./VideoMediaComponent"; import { useVisibilityOnce } from "../../hooks/useVisibility"; const withLink = (element: ReactElement, to?: string) => (to ? {element} : element); const contentTypeElements: Record = { default: ImageComponent, "video/mp4": VideoComponent, "text/plain": TextMediaComponent, }; const mediaComponentUrlResolvers: Record string> = { default: useContentImageUrl, "video/mp4": useContentVideoUrl, // "text/html": content }; export const useMediaComponentUrl = (props: ContentImageProps) => (mediaComponentUrlResolvers[props.contentType || ""] || mediaComponentUrlResolvers.default)(props); export const MediaComponent: ContentElement = (props) => { const { contentType, thumbnail } = props; const cte = contentTypeElements[contentType || ""]; const ContentTypeElement = cte || contentTypeElements.default; const [isVisible, currentElement] = useVisibilityOnce(150); const isThumbnail = thumbnail ?? true; if (!isThumbnail) return ; return (
); };