182 lines
4.1 KiB
JavaScript
Raw Normal View History

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';
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';
2019-02-22 11:11:25 +01:00
import FileIcon from '../FileIcon';
import { StyledLi, Truncate, Wrapper, Checked } from './components';
2018-02-16 17:19:57 +01:00
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 => {
let unit;
2018-03-29 16:25:47 +02:00
let divider;
2019-04-16 18:23:26 +02:00
switch (true) {
2018-08-20 22:11:50 +02:00
case value > 1000000:
unit = 'GB';
2018-08-20 22:11:50 +02:00
divider = 1000000;
break;
case value < 1:
unit = 'B';
2019-04-16 18:23:26 +02:00
divider = 0.001;
break;
2018-03-09 11:22:37 +01:00
case value > 1000:
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-29 16:25:47 +02:00
return { divider, unit };
2019-04-16 18:23:26 +02: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);
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 = () => (
<StyledLi withCopyStyle>
2018-02-19 13:48:02 +01:00
<div>
<Checked>
2018-02-19 13:48:02 +01:00
<div />
</Checked>
2018-02-19 13:48:02 +01:00
<div>
<FormattedMessage id="upload.Li.linkCopied" />
</div>
</div>
</StyledLi>
2018-02-19 13:48:02 +01:00
);
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 })}
>
<StyledLi>
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>
<Wrapper>
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 (
<Truncate key={key}>
2019-08-08 12:47:32 +02:00
{moment(item.updatedAt || item.updated_at).format(
'YYYY/MM/DD - HH:mm'
)}
</Truncate>
2019-04-16 18:23:26 +02:00
);
}
if (value === 'size') {
const { divider, unit } = this.getUnit(item[value]);
const size = item[value] / divider;
return (
<Truncate key={key}>
2019-04-16 18:23:26 +02:00
{Math.round(size * 100) / 100}&nbsp;{unit}
</Truncate>
2019-04-16 18:23:26 +02:00
);
}
if (value !== '') {
return <Truncate key={key}>{item[value]}</Truncate>;
2019-04-16 18:23:26 +02:00
}
return <IcoContainer key={key} icons={icons} />;
2019-07-02 08:37:41 +02:00
}
2019-04-16 18:23:26 +02:00
)}
</Wrapper>
2018-02-19 15:14:32 +01:00
<PopUpWarning
isOpen={this.state.isOpen}
onConfirm={this.handleDelete}
toggleModal={() => this.setState({ isOpen: false })}
/>
</StyledLi>
2018-02-19 13:48:02 +01:00
</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;