cpui-components
Version:
257 lines (223 loc) • 8.11 kB
JavaScript
"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;