cpui-components
Version:
208 lines (177 loc) • 6.81 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.CPCard = undefined;
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _moment = require('moment');
var _moment2 = _interopRequireDefault(_moment);
var _ActionMenu = require('./../ActionMenu');
var _ActionMenu2 = _interopRequireDefault(_ActionMenu);
var _Checkbox = require('./../Checkbox');
var _Checkbox2 = _interopRequireDefault(_Checkbox);
var _Radio = require('./../Radio');
var _Radio2 = _interopRequireDefault(_Radio);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var CPCard = exports.CPCard = function (_Component) {
_inherits(CPCard, _Component);
function CPCard(props) {
_classCallCheck(this, CPCard);
var _this = _possibleConstructorReturn(this, (CPCard.__proto__ || Object.getPrototypeOf(CPCard)).call(this, props));
_initialiseProps.call(_this);
_this.state = {
isSelected: !!_this.props.checked
};
return _this;
}
return CPCard;
}(_react.Component);
CPCard.propTypes = {
hasActionMenu: _propTypes2.default.bool,
selectionType: _propTypes2.default.oneOf(['checkbox', 'radiobutton', 'none']),
single: _propTypes2.default.bool,
data: _propTypes2.default.shape({
contentType: _propTypes2.default.string,
date: function date(props, propName, componentName) {
var validDate = !props[propName] || (0, _moment2.default)(props[propName]).isValid();
if (!validDate) {
return new Error('Invalid prop `' + propName + '` supplied to' + ' `' + componentName + '`. Validation failed.');
}
},
description: _propTypes2.default.string,
title: _propTypes2.default.string,
thumbnail: _propTypes2.default.shape({
url: _propTypes2.default.string,
svg: _propTypes2.default.string,
alt: _propTypes2.default.string
})
}).isRequired,
onChangeSelection: _propTypes2.default.func
};
CPCard.defaultProps = {
hasActionMenu: false,
selectionType: 'none',
single: false
};
var _initialiseProps = function _initialiseProps() {
var _this2 = this;
this.onSelectionClickHandler = function (e) {
e.stopPropagation();
e.preventDefault();
var originalState = _this2.state.isSelected;
if (_this2.props.selectionType !== 'radiobutton') {
_this2.setState({
isSelected: !_this2.state.isSelected
});
_this2.props.onChangeSelection(!originalState);
} else {
_this2.setState({
isSelected: true
});
_this2.props.onChangeSelection(true);
}
};
this.render = function () {
var date = (0, _moment2.default)(_this2.props.data.date);
var hasActionMenu = _this2.props.hasActionMenu;
var thumbnail = _this2.props.data.thumbnail;
var selectionType = _this2.props.selectionType;
var selectionName = _this2.props.selectionTypeName;
var onClickCardHandler = null;
var cardTitle = void 0;
switch (selectionType) {
case 'checkbox':
cardTitle = _react2.default.createElement(
'h2',
{ className: 'cp-card-title' },
_react2.default.createElement(_Checkbox2.default, { label: _this2.props.data.title, name: selectionName, checked: _this2.state.isSelected, onChange: function onChange() {} })
);
onClickCardHandler = _this2.onSelectionClickHandler;
break;
case 'radiobutton':
cardTitle = _react2.default.createElement(
'h2',
{ className: 'cp-card-title' },
_react2.default.createElement(_Radio2.default, { label: _this2.props.data.title, name: selectionName, checked: _this2.state.isSelected })
);
onClickCardHandler = _this2.onSelectionClickHandler;
break;
case 'none':
default:
cardTitle = _react2.default.createElement(
'h2',
{ className: 'cp-card-title' },
_this2.props.data.title
);
break;
}
var dateJsx = _react2.default.createElement('span', { className: 'cp-card-metaItem cp-card-metaItem--date' });
if (_this2.props.data.date) {
dateJsx = _react2.default.createElement(
'span',
{ className: 'cp-card-metaItem cp-card-metaItem--date' },
_react2.default.createElement(
'abbr',
{ title: date.format('MMMM') },
date.format('MMM')
),
' ',
date.date(),
', ',
date.year(),
' ',
date.format('h:mm A')
);
}
return _react2.default.createElement(
'div',
{ className: 'cp-card' + (_this2.props.single ? ' cp-card--single' : '') + (hasActionMenu ? ' cp-card--hasActionMenu' : '') + (onClickCardHandler !== null ? ' cp-card--clickable' : '') + ' cp-clearfix', onClick: onClickCardHandler },
thumbnail && thumbnail.url ? _react2.default.createElement(
'div',
{ className: 'cp-card-thumbnail' },
_react2.default.createElement('img', { src: thumbnail.url, alt: thumbnail.alt })
) : '',
thumbnail && thumbnail.svg ? _react2.default.createElement(
'div',
{ className: 'cp-card-thumbnail cp-card-thumbnail--svg' },
_react2.default.createElement(
'svg',
null,
_react2.default.createElement('use', { xlinkHref: thumbnail.svg, alt: thumbnail.alt })
)
) : '',
_react2.default.createElement(
'div',
{ className: 'cp-card-content' },
_react2.default.createElement(
'div',
{ className: 'cp-card-header' },
cardTitle
),
_react2.default.createElement(
'p',
{ className: 'cp-card-description' },
_this2.props.data.description
),
hasActionMenu ? _react2.default.createElement(_ActionMenu2.default, { options: [{ "text": "View Content", "url": "" }, { "text": "Modify", "url": "" }] }) : ''
),
_react2.default.createElement(
'div',
{ className: 'cp-card-meta' },
dateJsx,
_react2.default.createElement(
'span',
{ className: 'cp-card-metaItem cp-card-metaItem--contentType' },
_this2.props.data.contentType
)
)
);
};
};
exports.default = CPCard;