backpack-ui
Version:
Lonely Planet's Components
284 lines (233 loc) • 6.77 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _base;
var _react = require("react");
var _react2 = _interopRequireDefault(_react);
var _radium = require("radium");
var _radium2 = _interopRequireDefault(_radium);
var _settings = require("../../../settings.json");
var _heading = require("../heading");
var _heading2 = _interopRequireDefault(_heading);
var _price = require("../price");
var _price2 = _interopRequireDefault(_price);
var _bullet2 = require("../decoration/bullet");
var _bullet3 = _interopRequireDefault(_bullet2);
var _grid = require("../../utils/grid");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var styles = {
base: {},
elements: {
image: {
base: {
display: "block",
marginBottom: (0, _grid.gutter)("static"),
width: "100%"
}
},
content: {
base: {
position: "relative"
}
},
details: {
base: (_base = {
color: _settings.color.text,
fontSize: "1.1rem",
lineHeight: 1,
textTransform: "uppercase"
}, _defineProperty(_base, "@media (max-width: " + _settings.media.max["480"] + ")", {
display: "inline-block"
}), _defineProperty(_base, "@media (min-width: " + _settings.media.min["480"] + ")", {
marginTop: ".7rem"
}), _base),
list: _defineProperty({}, "@media (max-width: " + _settings.media.max["480"] + ")", {
display: "inline-block"
}),
item: {
display: "inline-block"
},
bullet: _defineProperty({
display: "inline-block"
}, "@media (min-width: " + _settings.media.min["480"] + ")", {
display: "none"
})
}
}
};
function RelatedTour(_ref) {
var _mediaQueries;
var title = _ref.title;
var slug = _ref.slug;
var image = _ref.image;
var price = _ref.price;
var tripLength = _ref.tripLength;
var destination = _ref.destination;
var reviews = _ref.reviews;
var clickHandler = _ref.clickHandler;
var Details = tripLength || destination || reviews ? _react2.default.createElement(
"div",
{
className: "RelatedTour-details",
style: styles.elements.details.base
},
_react2.default.createElement(
"span",
{
style: styles.elements.details.bullet
},
_react2.default.createElement(_bullet3.default, { space: "both" })
),
_react2.default.createElement(
"ul",
{ style: styles.elements.details.list },
tripLength && _react2.default.createElement(
"li",
{ style: styles.elements.details.item },
tripLength,
(destination || reviews) && _react2.default.createElement(_bullet3.default, { space: "both" })
),
destination && _react2.default.createElement(
"li",
{ style: styles.elements.details.item },
destination,
reviews && _react2.default.createElement(_bullet3.default, { space: "both" })
),
reviews && _react2.default.createElement(
"li",
{ style: styles.elements.details.item },
reviews,
" reviews"
)
)
) : null;
return _react2.default.createElement(
"div",
{ className: "RelatedTour" },
_react2.default.createElement(_radium.Style, {
scopeSelector: ".RelatedTour",
rules: {
".Heading a": {
color: "currentColor"
},
".Price-amount": {
color: _settings.color.red,
fontSize: "1.1rem"
},
mediaQueries: (_mediaQueries = {}, _defineProperty(_mediaQueries, "(max-width: " + _settings.media.max["480"] + ")", {
".Price": {
display: "inline-block"
},
".Price-amount": {
fontWeight: 600
}
}), _defineProperty(_mediaQueries, "(min-width: " + _settings.media.min["480"] + ")", {
".Heading": {
maxWidth: "50rem",
width: (0, _grid.percentage)("50rem", (0, _grid.span)(6, "static"))
},
".Price": {
position: "absolute",
right: 0,
top: ".8rem"
},
".Price-amount": {
color: "" + _settings.color.darkGray,
fontSize: "2.4rem"
}
}), _mediaQueries)
}
}),
_react2.default.createElement(
"a",
{
className: "RelatedTour-image",
style: styles.elements.image.base,
href: slug,
onClick: clickHandler
},
_react2.default.createElement("img", {
src: image,
alt: ""
})
),
_react2.default.createElement(
"div",
{
className: "RelatedTour-content clearfix",
style: styles.elements.content.base
},
_react2.default.createElement(
_heading2.default,
{
level: 3,
size: "medium",
importance: "high",
weight: "thick",
truncate: true,
tracking: "tight"
},
_react2.default.createElement(
"a",
{ href: slug, onClick: clickHandler },
title
)
),
_react2.default.createElement(_price2.default, {
amount: price.amount,
currency: price.currency
}),
Details
)
);
}
RelatedTour.propTypes = {
/**
* The name of the tour
*/
title: _react2.default.PropTypes.string.isRequired,
/**
* The URL of the tour
*/
slug: _react2.default.PropTypes.string.isRequired,
/**
* The image of the tour
*/
image: _react2.default.PropTypes.string.isRequired,
/**
* The price of the tour, containing currency and amount
*/
price: _react2.default.PropTypes.shape({
currency: _react2.default.PropTypes.string,
amount: _react2.default.PropTypes.number
}).isRequired,
/**
* The length of the trip, usually in days i.e., "14 days"
*/
tripLength: _react2.default.PropTypes.string,
/**
* The main destination of the tour; can be something like "London to Ireland"
*/
destination: _react2.default.PropTypes.string,
/**
* The number of reviews for the tour
*/
reviews: _react2.default.PropTypes.number,
/**
* Callback for clicking on the tour
*/
clickHandler: _react2.default.PropTypes.func
};
RelatedTour.defaultProps = {
title: "",
slug: "",
image: "",
price: {},
tripLength: "",
destination: "",
reviews: 0
};
RelatedTour.styles = styles;
exports.default = (0, _radium2.default)(RelatedTour);