Grégoire Delattre bcadc48d5a Launch prettier with the --fix option
They've changed their default settings, this changes a lot of stuff in
our code base.
2020-04-01 17:55:34 +02:00

103 lines
2.5 KiB
JavaScript

import React, { useState } from "react";
import PropTypes from "prop-types";
import { List } from "immutable";
import Modal from "react-bootstrap/Modal";
export const DownloadAndStream = ({ url, name, subtitles }) => {
if (!url || url === "") {
return null;
}
return (
<span>
<DownloadButton url={url} />
<StreamButton url={url} name={name} subtitles={subtitles} />
</span>
);
};
DownloadAndStream.propTypes = {
url: PropTypes.string,
name: PropTypes.string,
subtitles: PropTypes.instanceOf(List),
};
const DownloadButton = ({ url }) => (
<h5 className="d-inline">
<a href={url} className="btn btn-sm btn-primary m-1">
<i className="fa fa-download mr-1" />
Download
</a>
</h5>
);
DownloadButton.propTypes = { url: PropTypes.string.isRequired };
const StreamButton = ({ name, url, subtitles }) => {
const [showModal, setShowModal] = useState(false);
return (
<React.Fragment>
<h5 className="d-inline">
<a
href="#"
className="btn btn-sm btn-primary m-1 clickable"
onClick={(e) => {
e.preventDefault();
setShowModal(true);
}}
>
<i className="fa fa-play-circle mr-1" />
Play
</a>
</h5>
<Modal
show={showModal}
onHide={() => setShowModal(false)}
size="lg"
centered
>
<Modal.Header closeButton>{name}</Modal.Header>
<Modal.Body>
<Player url={url} subtitles={subtitles} />
</Modal.Body>
</Modal>
</React.Fragment>
);
};
StreamButton.propTypes = {
name: PropTypes.string.isRequired,
url: PropTypes.string.isRequired,
subtitles: PropTypes.instanceOf(List),
};
const Player = ({ url, subtitles }) => {
const hasSubtitles = !(subtitles === null || subtitles.size === 0);
return (
<div className="embed-responsive embed-responsive-16by9">
<video className="embed-responsive-item" controls>
<source src={url} type="video/mp4" />
{hasSubtitles &&
subtitles
.toIndexedSeq()
.map((el, index) => (
<track
key={index}
kind="subtitles"
label={el.get("language")}
src={el.get("vvt_file")}
srcLang={el.get("language")}
/>
))}
</video>
</div>
);
};
Player.propTypes = {
subtitles: PropTypes.instanceOf(List),
url: PropTypes.string.isRequired,
};
Player.defaultProps = {
subtitles: List(),
};