@telia/styleguide
Version:
This is a living styleguide, showing the Atomic Design components which should be used in Telia Norway's web applications to achieve a common look & feel, and therefore user experience.
96 lines (77 loc) • 3.09 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _classnames = _interopRequireDefault(require("classnames"));
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _SvgIcon = _interopRequireDefault(require("../../atoms/SvgIcon/SvgIcon"));
var _ref2 = _react.default.createElement(_SvgIcon.default, {
className: "product-list__item--link-icon",
iconName: "ico_linkarrow",
color: "purple"
});
/**
* Status: *finished*.
*
* Used for showing lists of products like subscriptions and services, in a less "in your face" manner than the Subscription component.
*/
var ProductList = function ProductList(_ref) {
var _ref$items = _ref.items,
items = _ref$items === void 0 ? [] : _ref$items;
return _react.default.createElement("div", {
className: "product-list"
}, items.map(function (item, index) {
var productItemClassNames = (0, _classnames.default)('product-list__item', {
'product-list__item--promo': item.style === 'promo'
});
var icon = _react.default.createElement(_SvgIcon.default, {
className: "product-list__item-icon",
iconName: item.iconName,
color: item.iconColor
});
var content = _react.default.createElement("div", {
className: "product-list__item-content"
}, _react.default.createElement("div", {
className: "product-list__item-heading"
}, item.title), item.description && _react.default.createElement("div", {
className: "product-list__item-description"
}, item.description));
if (item.href) {
return _react.default.createElement("a", {
href: item.href,
key: index,
className: "".concat(productItemClassNames, " product-list__item--link"),
onClick: item.onClick
}, icon, content, _ref2);
}
return _react.default.createElement("article", {
key: index,
className: productItemClassNames,
onClick: item.onClick
}, icon, content);
}));
};
ProductList.propTypes = process.env.NODE_ENV !== "production" ? {
/** An array of items where each item can have properties of icon name, icon color, title, description and href. */
items: _propTypes.default.arrayOf(_propTypes.default.shape({
/** Name of the icon e.g. arrow_ico */
iconName: _propTypes.default.string.isRequired,
/** Color of the icon (white, black or purple) */
iconColor: _propTypes.default.oneOf(['white', 'black', 'purple']),
/** Title of product */
title: _propTypes.default.string.isRequired,
/** Description of product */
description: _propTypes.default.string,
/** A link to the product */
href: _propTypes.default.string,
/** A click-handler for the product */
onClick: _propTypes.default.func,
/** Decide the style of the box */
style: _propTypes.default.oneOf(['promo'])
}))
} : {};
var _default = ProductList;
exports.default = _default;