@lyra/components
Version:
Basic UX components
145 lines (128 loc) • 4.42 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 _defaultStyle = require('part:@lyra/components/previews/default-style');
var _defaultStyle2 = _interopRequireDefault(_defaultStyle);
var _Styleable = require('../utilities/Styleable');
var _Styleable2 = _interopRequireDefault(_Styleable);
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 DefaultPreview extends _react2.default.PureComponent {
render() {
var _props = this.props;
const title = _props.title,
subtitle = _props.subtitle,
media = _props.media,
children = _props.children,
status = _props.status,
isPlaceholder = _props.isPlaceholder,
progress = _props.progress,
mediaDimensions = _props.mediaDimensions,
styles = _props.styles;
if (isPlaceholder) {
return _react2.default.createElement(
'div',
{ className: styles.placeholder },
_react2.default.createElement('div', { className: styles.media }),
_react2.default.createElement(
'div',
{ className: styles.heading },
_react2.default.createElement(
'h2',
{ className: styles.title },
'Loading\u2026'
),
_react2.default.createElement(
'h3',
{ className: styles.subtitle },
'Loading\u2026'
)
)
);
}
return _react2.default.createElement(
'div',
{
className: `
${styles.root}
${subtitle ? styles.hasSubtitle : ''}
${media ? styles.hasMedia : ''}
`
},
_react2.default.createElement(
'div',
{ className: styles.media },
typeof media === 'function' && media({ dimensions: mediaDimensions, layout: 'default' }),
typeof media === 'string' && _react2.default.createElement(
'div',
{ className: styles.mediaString },
media
),
_react2.default.isValidElement(media) && media
),
_react2.default.createElement(
'div',
{ className: styles.heading },
_react2.default.createElement(
'h2',
{ className: styles.title },
typeof title !== 'function' && title,
typeof title === 'function' && title({ layout: 'default' })
),
subtitle && _react2.default.createElement(
'h3',
{ className: styles.subtitle },
typeof subtitle === 'function' && subtitle({ layout: 'default' }) || subtitle
)
),
status && _react2.default.createElement(
'div',
{ className: styles.status },
typeof status === 'function' && status({ layout: 'default' }) || status
),
children && _react2.default.createElement(
'div',
{ className: styles.children },
children
),
typeof progress === 'number' && progress > -1 && _react2.default.createElement(
'div',
{ className: styles.progress },
_react2.default.createElement('div', {
className: styles.progressBar,
style: { width: `${progress}%` }
})
)
);
}
}
DefaultPreview.propTypes = {
title: fieldProp,
subtitle: fieldProp,
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
}),
status: fieldProp,
media: fieldProp,
isPlaceholder: _propTypes2.default.bool,
children: _propTypes2.default.node,
styles: _propTypes2.default.object,
progress: _propTypes2.default.number
};
DefaultPreview.defaultProps = {
title: 'Untitled',
subtitle: undefined,
progress: undefined,
media: undefined,
mediaDimensions: { width: 80, height: 80, aspect: 1, fit: 'crop' }
};
exports.default = (0, _Styleable2.default)(DefaultPreview, _defaultStyle2.default);