import React from 'react'; import PropTypes from 'prop-types'; import { gettext } from '../../utils/constants'; import Lightbox from '@seafile/react-image-lightbox'; import '@seafile/react-image-lightbox/style.css'; const propTypes = { imageItems: PropTypes.array.isRequired, imageIndex: PropTypes.number.isRequired, closeImagePopup: PropTypes.func.isRequired, moveToPrevImage: PropTypes.func.isRequired, moveToNextImage: PropTypes.func.isRequired, onDeleteImage: PropTypes.func, onRotateImage: PropTypes.func, enableRotate: PropTypes.bool, }; class ImageDialog extends React.Component { downloadImage = (url) => { location.href = url; }; onViewOriginal = () => { window.open(this.props.imageItems[this.props.imageIndex].url, '_blank'); }; render() { const { imageItems, imageIndex, closeImagePopup, moveToPrevImage, moveToNextImage, onDeleteImage, onRotateImage } = this.props; const imageItemsLength = imageItems.length; if (imageItemsLength === 0) return null; const name = imageItems[imageIndex].name; const mainImg = imageItems[imageIndex]; const nextImg = imageItems[(imageIndex + 1) % imageItemsLength]; const prevImg = imageItems[(imageIndex + imageItemsLength - 1) % imageItemsLength]; // The backend server does not support rotating HEIC images let enableRotate = this.props.enableRotate; const suffix = mainImg.src.slice(mainImg.src.lastIndexOf('.') + 1, mainImg.src.lastIndexOf('?')).toLowerCase(); if (suffix === 'heic') { enableRotate = false; } return ( this.downloadImage(imageItems[imageIndex].downloadURL)} onClickDelete={onDeleteImage ? () => onDeleteImage(name) : null} onViewOriginal={this.onViewOriginal} viewOriginalImageLabel={gettext('View original image')} onRotateImage={(onRotateImage && enableRotate) ? (angle) => onRotateImage(imageIndex, angle) : null} /> ); } } ImageDialog.propTypes = propTypes; ImageDialog.defaultProps = { enableRotate: true, }; export default ImageDialog;