optimizely-oui
Version:
Optimizely's Component Library.
66 lines (59 loc) • 1.68 kB
JavaScript
import React from "react";
import PropTypes from "prop-types";
import classNames from "classnames";
const HeaderDetails = ({
className,
items,
spaceBelow,
...props
}) => {
const itemList = items.map((item, ind) => {
if (item.isVisible !== undefined && !item.isVisible) {
return null;
}
return [
<div
key={`label-${item.label}`}
className={classNames({
sidenav__details__title: true,
muted: true,
"flush--bottom": true,
"push--top": ind > 0,
})}
>
<h5>{item.label}</h5>
</div>,
<span key={`value-${item.label}`} className="sidenav__details__item">
{item.value}
</span>,
];
});
return (
<div
className={classNames({
sidenav__details: true,
"soft-double--bottom": spaceBelow,
}, className)}
{...props}
>
{itemList}
</div>
);
};
HeaderDetails.propTypes = {
/** CSS class names. */
className: PropTypes.string,
/** List of details to display */
items: PropTypes.arrayOf(
PropTypes.shape({
label: PropTypes.string.isRequired,
value: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.node]).isRequired,
})
).isRequired,
/** Whether or not the details have extra space below */
spaceBelow: PropTypes.bool,
};
HeaderDetails.defaultProps = {
spaceBelow: false,
};
export default HeaderDetails;