@plone/volto
Version:
Volto
65 lines (59 loc) • 1.66 kB
JSX
/**
* File view component.
* @module components/theme/View/FileView
*/
import React from 'react';
import PropTypes from 'prop-types';
import { Container as SemanticContainer } from 'semantic-ui-react';
import { flattenToAppURL } from '@plone/volto/helpers/Url/Url';
import { FormattedMessage } from 'react-intl';
import config from '@plone/volto/registry';
/**
* File view component class.
* @function FileView
* @params {object} content Content object.
* @returns {string} Markup of the component.
*/
const FileView = ({ content }) => {
const Container =
config.getComponent({ name: 'Container' }).component || SemanticContainer;
return (
<Container className="view-wrapper">
<h1 className="documentFirstHeading">
{content.title}
{content.subtitle && ` - ${content.subtitle}`}
</h1>
{content.description && (
<p className="documentDescription">{content.description}</p>
)}
{content.file?.download && (
<a href={flattenToAppURL(content.file.download)}>
{content.file.filename ? (
content.file.filename
) : (
<FormattedMessage
id="Download file"
defaultMessage="Download file"
/>
)}
</a>
)}
</Container>
);
};
/**
* Property types.
* @property {Object} propTypes Property types.
* @static
*/
FileView.propTypes = {
content: PropTypes.shape({
title: PropTypes.string,
description: PropTypes.string,
file: PropTypes.shape({
download: PropTypes.string,
filename: PropTypes.string,
}),
}).isRequired,
};
export default FileView;