@lyra/components
Version:
Basic UX components
136 lines (120 loc) • 4.29 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _mediaStyle = require('part:@lyra/components/previews/media-style');
var _mediaStyle2 = _interopRequireDefault(_mediaStyle);
var _circle = require('part:@lyra/components/progress/circle');
var _circle2 = _interopRequireDefault(_circle);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/* eslint-disable complexity */
const fieldProp = _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.node, _propTypes2.default.func]);
class MediaPreview extends _react2.default.PureComponent {
render() {
var _props = this.props;
const title = _props.title,
subtitle = _props.subtitle,
description = _props.description,
media = _props.media,
mediaDimensions = _props.mediaDimensions,
children = _props.children,
isPlaceholder = _props.isPlaceholder,
progress = _props.progress;
if (isPlaceholder) {
return _react2.default.createElement(
'div',
{ className: _mediaStyle2.default.root },
_react2.default.createElement('div', {
className: _mediaStyle2.default.padder,
style: { paddingTop: `${100 / mediaDimensions.aspect || 100}%` }
})
);
}
return _react2.default.createElement(
'div',
{ className: _mediaStyle2.default.root, title: title },
_react2.default.createElement('div', {
className: _mediaStyle2.default.padder,
style: { paddingTop: `${100 / mediaDimensions.aspect || 100}%` }
}),
_react2.default.createElement(
'div',
{ className: _mediaStyle2.default.mediaContainer },
typeof media === 'undefined' && _react2.default.createElement(
'div',
{ className: _mediaStyle2.default.mediaString },
title
),
typeof media === 'function' && media({ dimensions: mediaDimensions, layout: 'media' }),
typeof media === 'string' && _react2.default.createElement(
'div',
{ className: _mediaStyle2.default.mediaString },
media
),
_react2.default.isValidElement(media) && media,
typeof progress === 'number' && progress > -1 && _react2.default.createElement(
'div',
{ className: _mediaStyle2.default.progress },
_react2.default.createElement(_circle2.default, {
percent: progress,
showPercent: true,
text: 'Uploaded'
})
)
),
_react2.default.createElement(
'div',
{ className: _mediaStyle2.default.meta },
_react2.default.createElement(
'div',
{ className: _mediaStyle2.default.metaInner },
title && _react2.default.createElement(
'h2',
{ className: _mediaStyle2.default.title },
title
),
subtitle && _react2.default.createElement(
'h3',
{ className: _mediaStyle2.default.subtitle },
subtitle
),
description && _react2.default.createElement(
'p',
{ className: _mediaStyle2.default.description },
description
)
)
),
children
);
}
}
exports.default = MediaPreview;
MediaPreview.propTypes = {
title: fieldProp,
subtitle: fieldProp,
description: fieldProp,
media: fieldProp,
progress: _propTypes2.default.number,
mediaDimensions: _propTypes2.default.shape({
width: _propTypes2.default.number,
height: _propTypes2.default.number,
fit: _propTypes2.default.oneOf(['clip', 'crop', 'fill', 'fillmax', 'max', 'scale', 'min']),
aspect: _propTypes2.default.number
}),
children: _propTypes2.default.node,
isPlaceholder: _propTypes2.default.bool
};
MediaPreview.defaultProps = {
title: undefined,
subtitle: undefined,
description: undefined,
media: undefined,
isPlaceholder: false,
children: undefined,
mediaDimensions: { width: 160, height: 160, aspect: 1, fit: 'crop' }
};