@plone/volto
Version:
Volto
43 lines (35 loc) • 1.2 kB
JSX
import React from 'react';
import cx from 'classnames';
import { flattenToAppURL } from '@plone/volto/helpers/Url/Url';
import UniversalLink from '@plone/volto/components/manage/UniversalLink/UniversalLink';
const niceBytes = (bytes) => {
bytes = Number(bytes);
const divider = 1024;
const magnitude = (Math.log(bytes) / Math.log(divider)) | 0;
const result = bytes / Math.pow(divider, magnitude);
const fixed = result.toFixed(0);
const suffix = magnitude ? 'kMGTPEZY'[magnitude - 1] + 'B' : 'B';
return fixed + suffix;
};
const FileWidget = ({ value, children, className }) => {
if (!value) {
return '';
}
const url = flattenToAppURL(value.download || value.filename || value);
const filename = value.filename || url;
const size = value.data ? value.data.length * 0.75 : value.size || 0;
const ctype = value['content-type'] || '';
return (
<UniversalLink
title={ctype || filename}
href={url}
className={cx(className, 'file', 'widget')}
data-size={size}
data-size-fmt={niceBytes(size)}
data-content-type={ctype}
>
{children ? children(filename) : filename}
</UniversalLink>
);
};
export default FileWidget;