UNPKG

cpui-components

Version:

257 lines (223 loc) 8.11 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CPCard = undefined; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; 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, actionMenuItems: _propTypes2.default.arrayOf(_propTypes2.default.shape({ text: _propTypes2.default.string.isRequired, onClick: _propTypes2.default.func, url: _propTypes2.default.string })), selectionType: _propTypes2.default.oneOf(["checkbox", "radiobutton", "none"]), single: _propTypes2.default.bool, draggable: _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 = { meta: {}, hasActionMenu: false, actionMenuItems: [{ text: "View Content", url: "https://www.msn.com", newWindow: false }, { text: "Modify", url: "https://www.google.com", newWindow: true }], selectionType: "none", single: false, onChangeSelection: function onChangeSelection() {} }; var _initialiseProps = function _initialiseProps() { var _this2 = this; this.setActionMenuRef = function (node) { return _this2.actionMenuRef = node; }; this.onSelectionClickHandler = function (e) { var originalState = _this2.state.isSelected; if (_this2.actionMenuRef && !_this2.actionMenuRef.contains(e.target) || !_this2.actionMenuRef) { e.stopPropagation(); e.preventDefault(); 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") ); } var meta = {}; Object.keys(_this2.props.meta).forEach(function (dataField) { meta["data-" + dataField] = _this2.props.meta[dataField]; }); return _react2.default.createElement( "div", _extends({}, meta, { className: "cp-card" + (_this2.props.single ? " cp-card--single" : "") + (hasActionMenu ? " cp-card--hasActionMenu" : "") + (onClickCardHandler !== null ? " cp-card--clickable" : "") + (_this2.props.draggable ? " cp-card--draggable" : "") + " 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( "div", { ref: _this2.setActionMenuRef }, _react2.default.createElement(_ActionMenu2.default, { options: _this2.props.actionMenuItems }) ) : "", _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;