backpack-ui
Version:
Lonely Planet's Components
126 lines (108 loc) • 2.42 kB
JSX
import React from "react";
import radium from "radium";
import capitalize from "lodash/capitalize";
import { color } from "../../../settings.json";
import Icon from "../icon";
import { blueLink } from "../../utils/mixins";
import schema from "../../utils/schema";
import font from "../../utils/font";
const _ = { capitalize };
const styles = {
container: {
base: {
color: color.lightText,
fontFamily: font("benton"),
fontSize: "14px",
fontWeight: 400,
lineHeight: 1,
},
},
item: {
padded: {
marginRight: `${10 / 14}em`,
},
},
anchor: {
base: blueLink(),
padded: {
marginRight: `${10 / 14}em`,
},
},
};
const listMicroData = schema({
itemType: "BreadcrumbList",
});
const itemMicroData = schema({
itemProp: "itemListElement",
itemType: "ListItem",
});
function linkMicroData(link) {
if (link && link.type) {
return schema({
itemProp: "item",
itemType: _.capitalize(link.type),
});
}
return schema({
itemProp: "item",
itemType: "Thing",
});
}
/**
* Breadcrumb navigation component
*/
function Breadcrumbs({ links }) {
const items = links.map((link, index) => (
<span
className="Breadcrumbs-item"
style={[index !== links.length - 1 && styles.item.padded]}
key={index}
{...itemMicroData}
>
<a
style={[
styles.anchor.base,
index < links.length - 1 && styles.anchor.padded,
]}
href={`//www.lonelyplanet.com${link.href}`}
key={index}
{...linkMicroData(link)}
>
<span itemProp="name">{link.title}</span>
</a>
{index < links.length - 1 &&
<Icon.ChevronRight
width={`${6 / 14}em`}
height={`${6 / 14}em`}
/>
}
<meta itemProp="position" content={index + 1} />
</span>
));
return (
<nav
className="Breadcrumbs"
style={styles.container.base}
{...listMicroData}
>
{items}
</nav>
);
}
Breadcrumbs.propTypes = {
/**
* An array of links for the navigation
*/
links: React.PropTypes.arrayOf(
React.PropTypes.shape({
title: React.PropTypes.string,
href: React.PropTypes.string,
type: React.PropTypes.string,
}),
).isRequired,
};
Breadcrumbs.defaultProps = {
links: [],
};
Breadcrumbs.styles = styles;
export default radium(Breadcrumbs);