2018-02-16 17:19:57 +01:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
* Li
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
import React from 'react';
|
|
|
|
import PropTypes from 'prop-types';
|
2018-02-19 13:48:02 +01:00
|
|
|
import { FormattedMessage } from 'react-intl';
|
|
|
|
import { CopyToClipboard } from 'react-copy-to-clipboard';
|
|
|
|
import cn from 'classnames';
|
2018-03-05 17:37:48 +01:00
|
|
|
import moment from 'moment';
|
2018-02-16 17:19:57 +01:00
|
|
|
|
2019-04-16 18:23:26 +02:00
|
|
|
import { IcoContainer, PopUpWarning } from 'strapi-helper-plugin';
|
2018-02-19 14:23:47 +01:00
|
|
|
|
2019-02-22 11:11:25 +01:00
|
|
|
import FileIcon from '../FileIcon';
|
|
|
|
|
2018-02-16 17:19:57 +01:00
|
|
|
import styles from './styles.scss';
|
|
|
|
|
2018-02-22 12:08:11 +01:00
|
|
|
/* eslint-disable react/no-string-refs */
|
2018-02-16 17:19:57 +01:00
|
|
|
class Li extends React.Component {
|
2018-02-19 13:48:02 +01:00
|
|
|
state = { isOpen: false, copied: false };
|
|
|
|
|
|
|
|
componentDidUpdate(prevProps, prevState) {
|
|
|
|
if (prevState.copied !== this.state.copied && this.state.copied) {
|
|
|
|
setTimeout(() => {
|
|
|
|
this.setState({ copied: false });
|
|
|
|
}, 3000);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-04-16 18:23:26 +02:00
|
|
|
getUnit = value => {
|
2018-03-05 12:28:29 +01:00
|
|
|
let unit;
|
2018-03-29 16:25:47 +02:00
|
|
|
let divider;
|
2019-04-16 18:23:26 +02:00
|
|
|
|
2018-03-05 12:28:29 +01:00
|
|
|
switch (true) {
|
2018-08-20 22:11:50 +02:00
|
|
|
case value > 1000000:
|
2018-03-05 12:28:29 +01:00
|
|
|
unit = 'GB';
|
2018-08-20 22:11:50 +02:00
|
|
|
divider = 1000000;
|
2018-03-05 12:28:29 +01:00
|
|
|
break;
|
|
|
|
case value < 1:
|
|
|
|
unit = 'B';
|
2019-04-16 18:23:26 +02:00
|
|
|
divider = 0.001;
|
2018-03-05 12:28:29 +01:00
|
|
|
break;
|
2018-03-09 11:22:37 +01:00
|
|
|
case value > 1000:
|
2018-03-05 12:28:29 +01:00
|
|
|
unit = 'MB';
|
2018-03-29 16:25:47 +02:00
|
|
|
divider = 1000;
|
2018-03-09 11:22:37 +01:00
|
|
|
break;
|
|
|
|
default:
|
|
|
|
unit = 'KB';
|
2018-03-29 16:25:47 +02:00
|
|
|
divider = 1;
|
2018-03-05 12:28:29 +01:00
|
|
|
}
|
|
|
|
|
2018-03-29 16:25:47 +02:00
|
|
|
return { divider, unit };
|
2019-04-16 18:23:26 +02:00
|
|
|
};
|
2018-03-05 12:28:29 +01:00
|
|
|
|
2019-04-16 18:23:26 +02:00
|
|
|
handleClick = e => {
|
2018-02-19 15:14:32 +01:00
|
|
|
e.preventDefault();
|
2018-10-15 21:48:01 +08:00
|
|
|
const aTag = document.getElementById(this.props.item.hash);
|
2018-02-26 11:39:50 +01:00
|
|
|
aTag.click();
|
2019-04-16 18:23:26 +02:00
|
|
|
};
|
2018-02-19 15:14:32 +01:00
|
|
|
|
2019-04-16 18:23:26 +02:00
|
|
|
handleDelete = e => {
|
2018-02-19 15:14:32 +01:00
|
|
|
e.preventDefault();
|
|
|
|
this.context.deleteData(this.props.item);
|
2019-04-16 18:23:26 +02:00
|
|
|
};
|
2018-02-19 15:14:32 +01:00
|
|
|
|
2018-02-19 13:48:02 +01:00
|
|
|
renderLiCopied = () => (
|
|
|
|
<li className={cn(styles.liWrapper, styles.copied)}>
|
|
|
|
<div>
|
|
|
|
<div className={styles.checked}>
|
|
|
|
<div />
|
|
|
|
</div>
|
|
|
|
<div>
|
|
|
|
<FormattedMessage id="upload.Li.linkCopied" />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</li>
|
|
|
|
);
|
2018-02-16 17:19:57 +01:00
|
|
|
|
|
|
|
render() {
|
|
|
|
const { item } = this.props;
|
|
|
|
|
2018-02-19 13:48:02 +01:00
|
|
|
if (this.state.copied) {
|
|
|
|
return this.renderLiCopied();
|
|
|
|
}
|
|
|
|
|
2018-02-19 15:14:32 +01:00
|
|
|
const icons = [
|
2018-02-23 15:28:01 +01:00
|
|
|
// {
|
|
|
|
// icoType: item.private ? 'lock' : 'unlock',
|
|
|
|
// onClick: () => {},
|
|
|
|
// },
|
2018-02-19 15:14:32 +01:00
|
|
|
{
|
|
|
|
icoType: 'eye',
|
|
|
|
onClick: this.handleClick,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
icoType: 'trash',
|
|
|
|
onClick: () => this.setState({ isOpen: true }),
|
|
|
|
},
|
|
|
|
];
|
|
|
|
|
2018-02-16 17:19:57 +01:00
|
|
|
return (
|
2019-04-16 18:23:26 +02:00
|
|
|
<CopyToClipboard
|
|
|
|
text={item.url}
|
|
|
|
onCopy={() => this.setState({ copied: true })}
|
|
|
|
>
|
2018-02-19 13:48:02 +01:00
|
|
|
<li className={styles.liWrapper}>
|
2019-04-16 18:23:26 +02:00
|
|
|
<a
|
|
|
|
href={item.url}
|
|
|
|
target="_blank"
|
2019-07-02 08:37:41 +02:00
|
|
|
rel="noopener noreferrer"
|
2019-04-16 18:23:26 +02:00
|
|
|
style={{ display: 'none' }}
|
|
|
|
id={item.hash}
|
|
|
|
>
|
|
|
|
nothing
|
|
|
|
</a>
|
2018-02-19 13:48:02 +01:00
|
|
|
<div className={styles.liContainer}>
|
2018-02-23 12:21:57 +01:00
|
|
|
<div>
|
|
|
|
<div />
|
|
|
|
<FileIcon fileType={item.ext} />
|
|
|
|
</div>
|
2019-04-16 18:23:26 +02:00
|
|
|
{['hash', 'name', 'updatedAt', 'size', 'relatedTo', ''].map(
|
|
|
|
(value, key) => {
|
|
|
|
if (value === 'updatedAt') {
|
|
|
|
return (
|
|
|
|
<div key={key} className={styles.truncate}>
|
|
|
|
{moment(item[value]).format('YYYY/MM/DD - HH:mm')}
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (value === 'size') {
|
|
|
|
const { divider, unit } = this.getUnit(item[value]);
|
|
|
|
const size = item[value] / divider;
|
|
|
|
|
|
|
|
return (
|
|
|
|
<div key={key} className={styles.truncate}>
|
|
|
|
{Math.round(size * 100) / 100} {unit}
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (value !== '') {
|
|
|
|
return (
|
|
|
|
<div key={key} className={styles.truncate}>
|
|
|
|
{item[value]}
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
return <IcoContainer key={key} icons={icons} />;
|
2019-07-02 08:37:41 +02:00
|
|
|
}
|
2019-04-16 18:23:26 +02:00
|
|
|
)}
|
2018-02-19 13:48:02 +01:00
|
|
|
</div>
|
2018-02-19 15:14:32 +01:00
|
|
|
<PopUpWarning
|
|
|
|
isOpen={this.state.isOpen}
|
|
|
|
onConfirm={this.handleDelete}
|
|
|
|
toggleModal={() => this.setState({ isOpen: false })}
|
|
|
|
/>
|
2018-02-19 13:48:02 +01:00
|
|
|
</li>
|
|
|
|
</CopyToClipboard>
|
2018-02-16 17:19:57 +01:00
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-02-19 15:14:32 +01:00
|
|
|
Li.contextTypes = {
|
|
|
|
deleteData: PropTypes.func.isRequired,
|
|
|
|
};
|
|
|
|
|
2018-02-16 17:19:57 +01:00
|
|
|
Li.defaultProps = {
|
|
|
|
item: {
|
|
|
|
type: 'pdf',
|
|
|
|
hash: '1234',
|
|
|
|
name: 'avatar.pdf',
|
|
|
|
updated: '20/11/2017 19:29:54',
|
|
|
|
size: '24 B',
|
|
|
|
relatedTo: 'John Doe',
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
2018-02-22 12:08:11 +01:00
|
|
|
Li.propTypes = {
|
2018-02-16 17:19:57 +01:00
|
|
|
item: PropTypes.object,
|
|
|
|
};
|
|
|
|
|
|
|
|
export default Li;
|