mirror of
https://github.com/jakejarvis/jarv.is.git
synced 2025-04-26 15:48:31 -04:00
67 lines
1.3 KiB
TypeScript
67 lines
1.3 KiB
TypeScript
import classNames from "classnames";
|
|
import ReactPlayer from "react-player/file";
|
|
import type { FilePlayerProps } from "react-player/file";
|
|
|
|
import styles from "./Video.module.css";
|
|
|
|
type VideoProps = Partial<FilePlayerProps> & {
|
|
webm?: string;
|
|
mp4?: string;
|
|
thumbnail?: string;
|
|
subs?: string;
|
|
autoplay?: boolean;
|
|
className?: string;
|
|
};
|
|
|
|
const Video = ({ webm, mp4, thumbnail, subs, autoplay, className, ...rest }: VideoProps) => {
|
|
const url = [
|
|
webm && {
|
|
src: webm,
|
|
type: "video/webm",
|
|
},
|
|
mp4 && {
|
|
src: mp4,
|
|
type: "video/mp4",
|
|
},
|
|
];
|
|
|
|
const config = {
|
|
file: {
|
|
attributes: {
|
|
controlsList: "nodownload",
|
|
preload: "metadata",
|
|
autoPlay: !!autoplay,
|
|
muted: !!autoplay,
|
|
loop: !!autoplay,
|
|
},
|
|
},
|
|
};
|
|
|
|
if (thumbnail) {
|
|
// @ts-ignore
|
|
config.file.attributes.poster = thumbnail;
|
|
}
|
|
|
|
if (subs) {
|
|
// @ts-ignore
|
|
config.file.tracks = [
|
|
{
|
|
kind: "subtitles",
|
|
src: subs,
|
|
srcLang: "en",
|
|
label: "English",
|
|
default: true,
|
|
},
|
|
];
|
|
}
|
|
|
|
return (
|
|
<div className={classNames(styles.wrapper, className)}>
|
|
{/* @ts-ignore */}
|
|
<ReactPlayer width="100%" height="100%" url={url} config={config} controls={!autoplay} {...rest} />
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default Video;
|