import React from 'react'; import Layout from '../../../layout'; import PointerListeners from '../../../pointerlisteners'; import { Noodl } from '../../../types'; export interface VideoProps extends Noodl.ReactProps { objectPositionX: string; objectPositionY: string; dom: Exclude; onCanPlay?: () => void; videoWidth?: (value: number) => void; videoHeight?: (value: number) => void; onVideoElementCreated?: (video) => void; } export interface CachedVideoProps { className?: string; style?: React.CSSProperties; muted?: boolean; loop?: boolean; volume?: number; autoplay?: boolean; controls?: boolean; src: string; innerRef: (video: HTMLVideoElement) => void; onCanPlay: () => void; } class CachedVideo extends React.PureComponent { video: HTMLVideoElement; componentDidUpdate() { if (this.video) { this.video.muted = this.props.muted; this.video.loop = this.props.loop; this.video.volume = this.props.volume; this.video.autoplay = this.props.autoplay; this.video.controls = this.props.controls; } } render() { let src = this.props.src ? this.props.src.toString() : undefined; if (src) { if (src.indexOf('#t=') === -1) { src += '#t=0.01'; //force Android to render the first frame } if (src.startsWith('/')) { // @ts-expect-error missing Noodl typings const baseUrl = Noodl.Env['BaseUrl']; if (baseUrl) { src = baseUrl + src.substring(1); } } } return (