2020-04-19 20:06:17 +00:00
|
|
|
import React from "react";
|
|
|
|
import PropTypes from "prop-types";
|
2020-04-22 17:44:09 +00:00
|
|
|
import styled from "styled-components";
|
|
|
|
import { Icons } from "asc-web-components";
|
2020-04-19 20:06:17 +00:00
|
|
|
|
|
|
|
import ImageViewer from "./sub-components/image-viewer"
|
|
|
|
import VideoViewer from "./sub-components/video-viewer"
|
2020-04-24 18:53:30 +00:00
|
|
|
import MediaScrollButton from "./sub-components/scroll-button"
|
|
|
|
import ControlBtn from "./sub-components/control-btn"
|
2020-05-20 10:40:41 +00:00
|
|
|
import StyledMediaViewer from "./StyledMediaViewer"
|
2020-05-13 13:20:23 +00:00
|
|
|
import isEqual from "lodash/isEqual";
|
2020-06-25 07:50:24 +00:00
|
|
|
import Hammer from "hammerjs"
|
2020-04-19 20:06:17 +00:00
|
|
|
|
2020-04-22 17:44:09 +00:00
|
|
|
const StyledVideoViewer = styled(VideoViewer)`
|
|
|
|
z-index: 4001;
|
|
|
|
`
|
2020-05-20 10:40:41 +00:00
|
|
|
const mediaTypes = Object.freeze({
|
|
|
|
audio: 1,
|
|
|
|
video: 2
|
|
|
|
});
|
2020-08-12 13:11:30 +00:00
|
|
|
|
|
|
|
const ButtonKeys = Object.freeze({
|
|
|
|
leftArrow: 37,
|
|
|
|
rightArrow: 39,
|
|
|
|
upArrow: 38,
|
|
|
|
downArrow: 40,
|
|
|
|
esc: 27,
|
|
|
|
ctr: 17,
|
|
|
|
one: 49
|
|
|
|
});
|
|
|
|
|
|
|
|
let ctrIsPressed = false;
|
2020-04-19 20:06:17 +00:00
|
|
|
class MediaViewer extends React.Component {
|
|
|
|
constructor(props) {
|
|
|
|
super(props);
|
|
|
|
|
|
|
|
this.state = {
|
2020-04-29 14:11:01 +00:00
|
|
|
visible: this.props.visible,
|
2020-04-23 21:44:47 +00:00
|
|
|
allowConvert: true,
|
|
|
|
playlist: this.props.playlist,
|
2020-05-26 12:06:59 +00:00
|
|
|
playlistPos: this.props.playlist.length > 0 ? this.props.playlist.find(file => file.fileId === this.props.currentFileId).id : 0
|
2020-04-23 21:44:47 +00:00
|
|
|
};
|
2020-05-05 13:15:33 +00:00
|
|
|
|
|
|
|
this.detailsContainer = React.createRef();
|
|
|
|
this.viewerToolbox = React.createRef();
|
2020-04-19 20:06:17 +00:00
|
|
|
}
|
2020-04-29 14:11:01 +00:00
|
|
|
|
2020-06-25 07:50:24 +00:00
|
|
|
updateHammer() {
|
|
|
|
let currentPlaylistPos = this.state.playlistPos;
|
|
|
|
|
|
|
|
let currentFile = this.state.playlist[currentPlaylistPos];
|
|
|
|
let fileTitle = currentFile.title;
|
|
|
|
let url = currentFile.src;
|
|
|
|
var ext = this.getFileExtension(fileTitle) ? this.getFileExtension(fileTitle) : this.getFileExtension(url);
|
|
|
|
var _this = this;
|
|
|
|
|
2020-07-02 08:02:50 +00:00
|
|
|
if(this.hammer){
|
|
|
|
this.hammer.off('swipeleft', this.nextMedia);
|
|
|
|
this.hammer.off('swiperight', this.prevMedia);
|
|
|
|
this.hammer.off('pinchout', this.prevMedia);
|
|
|
|
this.hammer.off('pinchin', this.prevMedia);
|
|
|
|
this.hammer.off('pinchend', this.prevMedia);
|
2020-07-02 14:17:23 +00:00
|
|
|
this.hammer.off('doubletap', this.prevMedia);
|
2020-07-02 08:02:50 +00:00
|
|
|
}
|
2020-06-25 07:50:24 +00:00
|
|
|
this.hammer = null;
|
|
|
|
setTimeout(function () {
|
|
|
|
if (_this.canImageView(ext)) {
|
2020-07-02 08:02:50 +00:00
|
|
|
var pinch = new Hammer.Pinch();
|
2020-06-25 07:50:24 +00:00
|
|
|
_this.hammer = Hammer(document.getElementsByClassName('react-viewer-canvas')[0]);
|
2020-07-02 08:02:50 +00:00
|
|
|
_this.hammer.add([pinch]);
|
|
|
|
_this.hammer.on('pinchout', _this.handleZoomOut);
|
|
|
|
_this.hammer.on('pinchin', _this.handleZoomIn);
|
|
|
|
_this.hammer.on('pinchend', _this.handleZoomEnd);
|
2020-07-02 14:17:23 +00:00
|
|
|
_this.hammer.on('doubletap', _this.doubleTap);
|
|
|
|
|
2020-07-02 08:02:50 +00:00
|
|
|
} else if (_this.mapSupplied[ext] && (_this.mapSupplied[ext].type == mediaTypes.video || _this.mapSupplied[ext].type == mediaTypes.audio)) {
|
|
|
|
_this.hammer = Hammer(document.getElementsByClassName('videoViewerOverlay')[0]);
|
2020-06-25 07:50:24 +00:00
|
|
|
}
|
|
|
|
if (_this.hammer) {
|
|
|
|
_this.hammer.on('swipeleft', _this.nextMedia);
|
|
|
|
_this.hammer.on('swiperight', _this.prevMedia);
|
|
|
|
}
|
|
|
|
}, 500)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2020-04-29 14:11:01 +00:00
|
|
|
componentDidUpdate(prevProps) {
|
2020-06-25 07:50:24 +00:00
|
|
|
this.updateHammer()
|
2020-04-29 14:11:01 +00:00
|
|
|
if (this.props.visible !== prevProps.visible) {
|
2020-04-30 08:37:16 +00:00
|
|
|
this.setState(
|
|
|
|
{
|
2020-05-10 10:43:54 +00:00
|
|
|
visible: this.props.visible,
|
|
|
|
playlistPos: this.props.playlist.length > 0 ? this.props.playlist.find(file => file.fileId === this.props.currentFileId).id : 0
|
2020-04-30 08:37:16 +00:00
|
|
|
}
|
|
|
|
);
|
2020-04-29 14:11:01 +00:00
|
|
|
}
|
2020-05-20 10:40:41 +00:00
|
|
|
if (this.props.visible && this.props.visible === prevProps.visible && !isEqual(this.props.playlist, prevProps.playlist)) {
|
2020-05-13 13:20:23 +00:00
|
|
|
let playlistPos = 0;
|
2020-05-18 21:12:48 +00:00
|
|
|
if (this.props.playlist.length > 0) {
|
|
|
|
if (this.props.playlist.length - 1 < this.state.playlistPos) {
|
2020-05-13 13:20:23 +00:00
|
|
|
playlistPos = this.props.playlist.length - 1;
|
|
|
|
}
|
|
|
|
this.setState(
|
|
|
|
{
|
|
|
|
playlist: this.props.playlist,
|
|
|
|
playlistPos: playlistPos
|
|
|
|
}
|
|
|
|
);
|
2020-05-18 21:12:48 +00:00
|
|
|
} else {
|
2020-05-14 08:47:57 +00:00
|
|
|
this.props.onEmptyPlaylistError();
|
|
|
|
this.setState(
|
|
|
|
{
|
|
|
|
visible: false
|
|
|
|
}
|
|
|
|
);
|
2020-05-13 13:20:23 +00:00
|
|
|
}
|
2020-05-28 21:05:37 +00:00
|
|
|
} else if (!isEqual(this.props.playlist, prevProps.playlist)) {
|
2020-05-25 13:21:14 +00:00
|
|
|
this.setState(
|
|
|
|
{
|
|
|
|
playlist: this.props.playlist
|
|
|
|
}
|
|
|
|
);
|
2020-05-13 13:20:23 +00:00
|
|
|
}
|
2020-05-05 13:15:33 +00:00
|
|
|
|
2020-04-30 08:37:16 +00:00
|
|
|
}
|
2020-06-25 07:50:24 +00:00
|
|
|
|
|
|
|
componentDidMount() {
|
|
|
|
var _this = this;
|
|
|
|
setTimeout(function () {
|
|
|
|
if (document.getElementsByClassName('react-viewer-canvas').length > 0) {
|
2020-07-02 14:17:23 +00:00
|
|
|
_this.hammer = Hammer(document.getElementsByClassName('react-viewer-canvas')[0]);
|
2020-07-02 08:02:50 +00:00
|
|
|
var pinch = new Hammer.Pinch();
|
|
|
|
_this.hammer.add([pinch]);
|
|
|
|
_this.hammer.on('pinchout', _this.handleZoomOut);
|
|
|
|
_this.hammer.on('pinchin', _this.handleZoomIn);
|
|
|
|
_this.hammer.on('pinchend', _this.handleZoomEnd);
|
2020-07-02 14:17:23 +00:00
|
|
|
_this.hammer.on('doubletap', _this.doubleTap);
|
2020-06-25 07:50:24 +00:00
|
|
|
} else {
|
2020-07-02 14:17:23 +00:00
|
|
|
_this.hammer = Hammer(document.getElementsByClassName('videoViewerOverlay')[0]);
|
2020-06-25 07:50:24 +00:00
|
|
|
}
|
|
|
|
if (_this.hammer) {
|
|
|
|
_this.hammer.on('swipeleft', _this.nextMedia);
|
|
|
|
_this.hammer.on('swiperight', _this.prevMedia);
|
|
|
|
}
|
|
|
|
}, 500);
|
2020-08-12 13:11:30 +00:00
|
|
|
document.addEventListener("keydown", this.onKeydown, false);
|
|
|
|
document.addEventListener("keyup", this.onKeyup, false);
|
2020-06-25 07:50:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
componentWillUnmount() {
|
2020-07-02 14:17:23 +00:00
|
|
|
this.hammer.off('swipeleft', this.nextMedia);
|
|
|
|
this.hammer.off('swiperight', this.prevMedia);
|
|
|
|
this.hammer.off('pinchout', this.prevMedia);
|
|
|
|
this.hammer.off('pinchin', this.prevMedia);
|
|
|
|
this.hammer.off('pinchend', this.prevMedia);
|
|
|
|
this.hammer.off('doubletap', this.prevMedia);
|
2020-08-12 13:11:30 +00:00
|
|
|
document.removeEventListener("keydown", this.onKeydown, false);
|
|
|
|
document.removeEventListener("keyup", this.onKeyup, false);
|
2020-06-25 07:50:24 +00:00
|
|
|
}
|
|
|
|
|
2020-04-23 21:44:47 +00:00
|
|
|
mapSupplied = {
|
2020-05-20 10:40:41 +00:00
|
|
|
".aac": { supply: "m4a", type: mediaTypes.audio },
|
|
|
|
".flac": { supply: "mp3", type: mediaTypes.audio },
|
|
|
|
".m4a": { supply: "m4a", type: mediaTypes.audio },
|
|
|
|
".mp3": { supply: "mp3", type: mediaTypes.audio },
|
|
|
|
".oga": { supply: "oga", type: mediaTypes.audio },
|
|
|
|
".ogg": { supply: "oga", type: mediaTypes.audio },
|
|
|
|
".wav": { supply: "wav", type: mediaTypes.audio },
|
|
|
|
|
|
|
|
".f4v": { supply: "m4v", type: mediaTypes.video },
|
|
|
|
".m4v": { supply: "m4v", type: mediaTypes.video },
|
|
|
|
".mov": { supply: "m4v", type: mediaTypes.video },
|
|
|
|
".mp4": { supply: "m4v", type: mediaTypes.video },
|
|
|
|
".ogv": { supply: "ogv", type: mediaTypes.video },
|
|
|
|
".webm": { supply: "webmv", type: mediaTypes.video },
|
|
|
|
".wmv": { supply: "m4v", type: mediaTypes.video, convertable: true },
|
|
|
|
".avi": { supply: "m4v", type: mediaTypes.video, convertable: true },
|
|
|
|
".mpeg": { supply: "m4v", type: mediaTypes.video, convertable: true },
|
|
|
|
".mpg": { supply: "m4v", type: mediaTypes.video, convertable: true }
|
2020-04-23 21:44:47 +00:00
|
|
|
};
|
2020-04-24 18:53:30 +00:00
|
|
|
|
2020-04-23 21:44:47 +00:00
|
|
|
canImageView = function (ext) {
|
|
|
|
return this.props.extsImagePreviewed.indexOf(ext) != -1;
|
|
|
|
};
|
|
|
|
canPlay = (fileTitle, allowConvert) => {
|
|
|
|
|
|
|
|
var ext = fileTitle[0] === "." ? fileTitle : this.getFileExtension(fileTitle);
|
|
|
|
|
|
|
|
var supply = this.mapSupplied[ext];
|
|
|
|
|
|
|
|
var canConv = allowConvert || this.props.allowConvert;
|
|
|
|
|
2020-04-29 14:11:01 +00:00
|
|
|
return !!supply && this.props.extsMediaPreviewed.indexOf(ext) != -1
|
2020-04-23 21:44:47 +00:00
|
|
|
&& (!supply.convertable || canConv);
|
|
|
|
};
|
2020-04-24 18:53:30 +00:00
|
|
|
|
2020-04-23 21:44:47 +00:00
|
|
|
getFileExtension = (fileTitle) => {
|
2020-05-20 10:40:41 +00:00
|
|
|
if (!fileTitle) {
|
2020-04-23 21:44:47 +00:00
|
|
|
return "";
|
|
|
|
}
|
|
|
|
fileTitle = fileTitle.trim();
|
|
|
|
var posExt = fileTitle.lastIndexOf(".");
|
|
|
|
return 0 <= posExt ? fileTitle.substring(posExt).trim().toLowerCase() : "";
|
|
|
|
};
|
|
|
|
|
2020-07-02 08:02:50 +00:00
|
|
|
zoom = 1;
|
|
|
|
handleZoomEnd = () =>{
|
|
|
|
this.zoom = 1;
|
|
|
|
}
|
|
|
|
handleZoomIn = (e) =>{
|
|
|
|
if(this.zoom - e.scale > 0.1){
|
|
|
|
this.zoom = e.scale;
|
|
|
|
document.querySelector('li[data-key="zoomOut"]').click()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
handleZoomOut = (e) =>{
|
|
|
|
if(e.scale - this.zoom > 0.3){
|
|
|
|
this.zoom = e.scale;
|
|
|
|
document.querySelector('li[data-key="zoomIn"]').click()
|
|
|
|
}
|
|
|
|
}
|
2020-07-02 14:17:23 +00:00
|
|
|
doubleTap = () =>{
|
|
|
|
document.querySelector('li[data-key="zoomIn"]').click()
|
|
|
|
}
|
2020-04-23 21:44:47 +00:00
|
|
|
prevMedia = () => {
|
2020-04-29 14:11:01 +00:00
|
|
|
|
2020-04-23 21:44:47 +00:00
|
|
|
let currentPlaylistPos = this.state.playlistPos;
|
|
|
|
currentPlaylistPos--;
|
|
|
|
if (currentPlaylistPos < 0)
|
2020-04-29 14:11:01 +00:00
|
|
|
currentPlaylistPos = this.state.playlist.length - 1;
|
2020-04-23 21:44:47 +00:00
|
|
|
|
|
|
|
this.setState({
|
|
|
|
playlistPos: currentPlaylistPos
|
|
|
|
});
|
|
|
|
|
|
|
|
};
|
2020-04-24 18:53:30 +00:00
|
|
|
|
2020-04-23 21:44:47 +00:00
|
|
|
nextMedia = () => {
|
|
|
|
|
|
|
|
let currentPlaylistPos = this.state.playlistPos;
|
|
|
|
currentPlaylistPos = (currentPlaylistPos + 1) % this.state.playlist.length;
|
|
|
|
|
|
|
|
this.setState({
|
|
|
|
playlistPos: currentPlaylistPos
|
|
|
|
});
|
|
|
|
};
|
2020-05-05 13:15:33 +00:00
|
|
|
getOffset = () => {
|
|
|
|
if (this.detailsContainer.current && this.viewerToolbox.current) {
|
|
|
|
return this.detailsContainer.current.offsetHeight + this.viewerToolbox.current.offsetHeight;
|
|
|
|
} else {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
2020-05-20 10:40:41 +00:00
|
|
|
onDelete = () => {
|
|
|
|
let currentFileId = this.state.playlist.length > 0 ? this.state.playlist.find(file => file.id === this.state.playlistPos).fileId : 0;
|
|
|
|
this.props.onDelete && this.props.onDelete(currentFileId);
|
|
|
|
}
|
|
|
|
onDownload = () => {
|
|
|
|
let currentFileId = this.state.playlist.length > 0 ? this.state.playlist.find(file => file.id === this.state.playlistPos).fileId : 0;
|
|
|
|
this.props.onDownload && this.props.onDownload(currentFileId);
|
|
|
|
}
|
2020-08-12 13:11:30 +00:00
|
|
|
onKeyup = (e) => {
|
|
|
|
if(ButtonKeys.ctr === e.keyCode){
|
|
|
|
ctrIsPressed = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
onKeydown = (e) => {
|
|
|
|
let isActionKey = false;
|
|
|
|
|
|
|
|
for(let key in ButtonKeys) {
|
|
|
|
if(ButtonKeys[key] === e.keyCode){
|
|
|
|
e.preventDefault();
|
|
|
|
isActionKey=true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if(isActionKey){
|
|
|
|
switch (e.keyCode){
|
|
|
|
case ButtonKeys.leftArrow:
|
|
|
|
ctrIsPressed
|
|
|
|
? document.getElementsByClassName("iconContainer rotateLeft").length > 0 && document.getElementsByClassName("iconContainer rotateLeft")[0].click()
|
|
|
|
: this.prevMedia()
|
|
|
|
break
|
|
|
|
case ButtonKeys.rightArrow:
|
|
|
|
ctrIsPressed
|
|
|
|
? document.getElementsByClassName("iconContainer rotateRight").length > 0 && document.getElementsByClassName("iconContainer rotateRight")[0].click()
|
|
|
|
: this.nextMedia()
|
|
|
|
break
|
|
|
|
case ButtonKeys.esc:
|
|
|
|
this.props.onClose()
|
|
|
|
break
|
|
|
|
case ButtonKeys.upArrow:
|
|
|
|
document.getElementsByClassName("iconContainer zoomIn").length > 0 && document.getElementsByClassName("iconContainer zoomIn")[0].click();
|
|
|
|
break
|
|
|
|
case ButtonKeys.downArrow:
|
|
|
|
document.getElementsByClassName("iconContainer zoomOut").length > 0 && document.getElementsByClassName("iconContainer zoomOut")[0].click();
|
|
|
|
break
|
|
|
|
case ButtonKeys.ctr:
|
|
|
|
ctrIsPressed = true;
|
|
|
|
break
|
|
|
|
case ButtonKeys.one:
|
|
|
|
ctrIsPressed && document.getElementsByClassName("iconContainer reset").length > 0 && document.getElementsByClassName("iconContainer reset")[0].click();
|
|
|
|
break
|
|
|
|
default:
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2020-04-29 14:11:01 +00:00
|
|
|
render() {
|
2020-04-24 18:53:30 +00:00
|
|
|
|
2020-04-23 21:44:47 +00:00
|
|
|
let currentPlaylistPos = this.state.playlistPos;
|
2020-05-10 10:43:54 +00:00
|
|
|
let currentFileId = this.state.playlist.length > 0 ? this.state.playlist.find(file => file.id === currentPlaylistPos).fileId : 0;
|
|
|
|
|
2020-05-20 10:40:41 +00:00
|
|
|
let currentFile = this.state.playlist[currentPlaylistPos];
|
|
|
|
let fileTitle = currentFile.title;
|
|
|
|
let url = currentFile.src;
|
|
|
|
|
2020-04-23 21:44:47 +00:00
|
|
|
let isImage = false;
|
2020-04-29 14:11:01 +00:00
|
|
|
let isVideo = false;
|
|
|
|
let canOpen = true;
|
2020-04-24 12:28:17 +00:00
|
|
|
|
2020-04-23 21:44:47 +00:00
|
|
|
var ext = this.getFileExtension(fileTitle) ? this.getFileExtension(fileTitle) : this.getFileExtension(url);
|
|
|
|
|
|
|
|
if (!this.canPlay(ext) && !this.canImageView(ext)) {
|
2020-04-29 14:11:01 +00:00
|
|
|
canOpen = false;
|
|
|
|
this.props.onError && this.props.onError();
|
2020-04-23 21:44:47 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if (this.canImageView(ext)) {
|
|
|
|
isImage = true;
|
|
|
|
} else {
|
2020-04-29 14:11:01 +00:00
|
|
|
isImage = false;
|
2020-05-20 10:40:41 +00:00
|
|
|
isVideo = this.mapSupplied[ext] ? this.mapSupplied[ext].type == mediaTypes.video : false;
|
2020-04-23 21:44:47 +00:00
|
|
|
}
|
2020-04-30 08:37:16 +00:00
|
|
|
|
2020-05-18 21:12:48 +00:00
|
|
|
if (this.mapSupplied[ext])
|
2020-05-12 14:05:22 +00:00
|
|
|
if (!isImage && this.mapSupplied[ext].convertable && !url.includes("#")) {
|
|
|
|
url += (url.includes("?") ? "&" : "?") + "convpreview=true";
|
|
|
|
}
|
2020-05-09 18:11:54 +00:00
|
|
|
|
2020-04-29 14:11:01 +00:00
|
|
|
return (
|
|
|
|
<StyledMediaViewer visible={this.state.visible}>
|
2020-04-23 21:44:47 +00:00
|
|
|
|
2020-04-29 14:11:01 +00:00
|
|
|
<div className="videoViewerOverlay"></div>
|
2020-05-28 21:05:37 +00:00
|
|
|
{
|
|
|
|
!isImage &&
|
|
|
|
<>
|
2020-06-25 07:50:24 +00:00
|
|
|
<MediaScrollButton orientation="right" onClick={this.prevMedia} inactive={this.state.playlist.length <= 1} />
|
|
|
|
<MediaScrollButton orientation="left" onClick={this.nextMedia} inactive={this.state.playlist.length <= 1} />
|
2020-05-28 21:05:37 +00:00
|
|
|
</>
|
|
|
|
}
|
|
|
|
|
2020-04-22 17:44:09 +00:00
|
|
|
<div>
|
2020-05-05 13:15:33 +00:00
|
|
|
<div className="details" ref={this.detailsContainer}>
|
2020-04-29 14:11:01 +00:00
|
|
|
<div className="title">{fileTitle}</div>
|
2020-05-20 10:40:41 +00:00
|
|
|
<ControlBtn onClick={this.props.onClose && (this.props.onClose)} className="mediaPlayerClose">
|
2020-04-22 17:44:09 +00:00
|
|
|
<Icons.CrossIcon size="medium" isfill={true} color="#fff" />
|
2020-04-24 18:53:30 +00:00
|
|
|
</ControlBtn>
|
2020-04-22 17:44:09 +00:00
|
|
|
</div>
|
|
|
|
</div>
|
2020-04-29 14:11:01 +00:00
|
|
|
{canOpen &&
|
|
|
|
(
|
|
|
|
isImage ?
|
|
|
|
<ImageViewer
|
|
|
|
visible={this.state.visible}
|
|
|
|
onClose={() => { this.setState({ visible: false }); }}
|
|
|
|
images={[
|
|
|
|
{ src: url, alt: '' }
|
|
|
|
]}
|
2020-06-01 09:17:00 +00:00
|
|
|
inactive={this.state.playlist.length <= 1}
|
2020-05-28 21:05:37 +00:00
|
|
|
onNextClick={this.nextMedia}
|
|
|
|
onPrevClick={this.prevMedia}
|
|
|
|
onDeleteClick={this.onDelete}
|
|
|
|
onDownloadClick={this.onDownload}
|
2020-04-29 14:11:01 +00:00
|
|
|
/>
|
|
|
|
:
|
2020-05-05 13:15:33 +00:00
|
|
|
<StyledVideoViewer url={url} playing={this.state.visible} isVideo={isVideo} getOffset={this.getOffset} />
|
2020-04-29 14:11:01 +00:00
|
|
|
)
|
2020-04-23 21:44:47 +00:00
|
|
|
}
|
2020-05-06 15:02:44 +00:00
|
|
|
<div className="mediaViewerToolbox" ref={this.viewerToolbox}>
|
2020-05-28 21:05:37 +00:00
|
|
|
{
|
|
|
|
!isImage &&
|
|
|
|
<span>
|
|
|
|
{
|
|
|
|
this.props.canDelete(currentFileId) &&
|
|
|
|
<ControlBtn onClick={this.onDelete}>
|
|
|
|
<div className="deleteBtnContainer">
|
|
|
|
<Icons.MediaDeleteIcon size="scale" />
|
|
|
|
</div>
|
|
|
|
</ControlBtn>
|
|
|
|
}
|
|
|
|
{
|
|
|
|
this.props.canDownload(currentFileId) &&
|
|
|
|
<ControlBtn onClick={this.onDownload}>
|
|
|
|
<div className="downloadBtnContainer">
|
|
|
|
<Icons.MediaDownloadIcon size="scale" />
|
|
|
|
</div>
|
|
|
|
</ControlBtn>
|
|
|
|
}
|
|
|
|
</span>
|
|
|
|
}
|
2020-05-06 15:02:44 +00:00
|
|
|
</div>
|
2020-05-18 21:12:48 +00:00
|
|
|
|
2020-04-22 17:44:09 +00:00
|
|
|
</StyledMediaViewer>
|
2020-04-19 20:06:17 +00:00
|
|
|
)
|
2020-04-29 14:11:01 +00:00
|
|
|
}
|
2020-04-19 20:06:17 +00:00
|
|
|
}
|
|
|
|
|
2020-04-29 14:11:01 +00:00
|
|
|
MediaViewer.propTypes = {
|
|
|
|
allowConvert: PropTypes.bool,
|
|
|
|
visible: PropTypes.bool,
|
2020-05-06 13:36:17 +00:00
|
|
|
currentFileId: PropTypes.number,
|
2020-04-29 14:11:01 +00:00
|
|
|
playlist: PropTypes.arrayOf(PropTypes.object),
|
|
|
|
extsImagePreviewed: PropTypes.arrayOf(PropTypes.string),
|
|
|
|
extsMediaPreviewed: PropTypes.arrayOf(PropTypes.string),
|
|
|
|
onError: PropTypes.func,
|
|
|
|
canDelete: PropTypes.func,
|
2020-05-18 21:12:48 +00:00
|
|
|
canDownload: PropTypes.func,
|
2020-04-29 14:11:01 +00:00
|
|
|
onDelete: PropTypes.func,
|
|
|
|
onDownload: PropTypes.func,
|
2020-05-14 08:47:57 +00:00
|
|
|
onClose: PropTypes.func,
|
2020-05-18 21:12:48 +00:00
|
|
|
onEmptyPlaylistError: PropTypes.func
|
2020-04-29 14:11:01 +00:00
|
|
|
}
|
2020-04-19 20:06:17 +00:00
|
|
|
|
2020-04-29 14:11:01 +00:00
|
|
|
MediaViewer.defaultProps = {
|
2020-05-06 13:36:17 +00:00
|
|
|
currentFileId: 0,
|
2020-05-20 10:40:41 +00:00
|
|
|
visible: false,
|
2020-04-29 14:11:01 +00:00
|
|
|
allowConvert: true,
|
2020-05-18 21:12:48 +00:00
|
|
|
canDelete: () => { return true },
|
|
|
|
canDownload: () => { return true }
|
2020-04-29 14:11:01 +00:00
|
|
|
}
|
2020-04-19 20:06:17 +00:00
|
|
|
|
|
|
|
export default MediaViewer;
|