components/elements/TextMediaWidget/TextMediaWidget.jsxjavascript
import "./TextMediaWidget.scss";
import { CacheableVideo } from "../../CacheableVideo.jsx";
import { ImageCard } from "../ImageCard/ImageCard.jsx";
/**
* Media block with an accompanying text box ("textMediaWidget" element type).
* Shows an image or a (service-worker-cacheable) video, plus optional text.
*
* @param {Object} props
* @param {string|null} props.image - Image URL; mutually exclusive with video in practice.
* @param {string|null} props.video - Video URL, played via {@link CacheableVideo}.
* @param {string|null} props.text - Text shown below the media.
* @param {number|null} [props.level] - When `1`, wraps `image` in an {@link ImageCard} instead of a plain `<img>`.
*/
export const TextMediaWidget = ({ image, video, text, level }) => {
return (
<div
className={`textmediacontainer textmediacontainer--level${level} ${video ? "textmediacontainer--notop" : ""}`}>
{image ? (
level ? (
<ImageCard image={image} />
) : (
<img className="vidph" src={image} alt="" />
)
) : null}
{video ? (
<CacheableVideo
className="vidph"
src={video}
autoPlay
muted
playsInline
preload="metadata"
/>
) : null}
{/* {text && (image || video) ? <div className="textmediacontainer__space"></div> : null} */}
{text ? (
<div className="textmediawidget__textboxframe">
<div className="textmediawidget__textbox">{text}</div>
</div>
) : null}
</div>
);
};