import type { Body, Meta } from '@uppy/core' import { Component, type ComponentChild, Fragment } from 'preact' import DiscardButton from './DiscardButton.js' import RecordButton from './RecordButton.js' import type ScreenCapture from './ScreenCapture.js' import type { ScreenCaptureState } from './ScreenCapture.js' import ScreenshotButton from './ScreenshotButton.js' import StopWatch from './StopWatch.js' import StreamStatus from './StreamStatus.js' import SubmitButton from './SubmitButton.js' type RecorderScreenProps = { onStartRecording: ScreenCapture['startRecording'] onStopRecording: ScreenCapture['stopRecording'] onStop: ScreenCapture['stop'] onSubmit: ScreenCapture['submit'] i18n: ScreenCapture['i18n'] stream: ScreenCapture['videoStream'] onScreenshot: ScreenCapture['captureScreenshot'] enableScreenshots: boolean capturedScreenshotUrl: ScreenCaptureState['capturedScreenshotUrl'] onDiscard: ScreenCapture['discardRecordedMedia'] } & ScreenCaptureState class RecorderScreen extends Component< RecorderScreenProps > { videoElement: HTMLVideoElement | null = null componentWillUnmount(): void { const { onStop } = this.props onStop() } render(): ComponentChild { const { recording, stream: videoStream, recordedVideo, enableScreenshots, capturedScreenshotUrl, } = this.props const videoProps: { muted?: boolean autoplay?: boolean playsinline?: boolean controls?: boolean src?: string srcObject?: MediaStream | null } = { playsinline: true, } // show stream if (recording || (!recordedVideo && !recording)) { videoProps.muted = true videoProps.autoplay = true videoProps.srcObject = videoStream } // show preview if (recordedVideo && !recording) { videoProps.muted = false videoProps.controls = true videoProps.src = recordedVideo // reset srcObject in dom. If not resetted, stream sticks in element if (this.videoElement) { this.videoElement.srcObject = null } } return (
{capturedScreenshotUrl && !recording && !recordedVideo ? (
screenshotPreview
) : (
{recordedVideo || capturedScreenshotUrl ? ( ) : ( {enableScreenshots && !recording && ( )} )}
) } } export default RecorderScreen