backpack-ui
Version:
Lonely Planet's Components
210 lines (164 loc) • 6.01 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _defineProperty2 = require("babel-runtime/helpers/defineProperty");
var _defineProperty3 = _interopRequireDefault(_defineProperty2);
var _list;
var _react = require("react");
var _react2 = _interopRequireDefault(_react);
var _propTypes = require("prop-types");
var _propTypes2 = _interopRequireDefault(_propTypes);
var _radium = require("radium");
var _radium2 = _interopRequireDefault(_radium);
var _reactStickynode = require("react-stickynode");
var _reactStickynode2 = _interopRequireDefault(_reactStickynode);
var _reactScroll = require("react-scroll");
var _colors = require("../../styles/colors");
var _colors2 = _interopRequireDefault(_colors);
var _dimensions = require("../../styles/dimensions");
var _dimensions2 = _interopRequireDefault(_dimensions);
var _mq = require("../../styles/mq");
var _mq2 = _interopRequireDefault(_mq);
var _spacing = require("../../styles/spacing");
var _spacing2 = _interopRequireDefault(_spacing);
var _timing = require("../../styles/timing");
var _timing2 = _interopRequireDefault(_timing);
var _zIndex = require("../../styles/zIndex");
var _zIndex2 = _interopRequireDefault(_zIndex);
var _color = require("../../utils/color");
var _font = require("../../utils/font");
var _font2 = _interopRequireDefault(_font);
var _createQAHook = require("../../utils/createQAHook");
var _createQAHook2 = _interopRequireDefault(_createQAHook);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var navigationSubHeight = "80px";
var navigationSubHeightMobile = _dimensions2.default.headerHeightMobile + "px";
var styles = {
container: (0, _defineProperty3.default)({
backgroundColor: _colors2.default.bgPrimary,
borderBottom: "1px solid rgba(" + (0, _color.rgb)(_colors2.default.accentGray) + ", 0.45)",
borderTop: "1px solid rgba(" + (0, _color.rgb)(_colors2.default.accentGray) + ", 0.45)",
fontFamily: (0, _font2.default)("benton"),
fontSize: 0,
height: navigationSubHeightMobile,
lineHeight: 1,
margin: 0,
padding: 0,
position: "relative",
transform: "translateZ(0)", // force hardware acceleration for iOS
transition: "opacity " + _timing2.default.default + ", visibility " + _timing2.default.default,
zIndex: _zIndex2.default.globalHeader
}, "@media (min-width: " + _mq2.default.min[768] + ")", {
height: navigationSubHeight
}),
innerContainer: (0, _defineProperty3.default)({
height: navigationSubHeightMobile,
overflow: "hidden"
}, "@media (min-width: " + _mq2.default.min[768] + ")", {
height: navigationSubHeight
}),
list: (_list = {
animation: "fly-in " + _timing2.default.default,
height: navigationSubHeightMobile + 2, // to push horizontal scrollbar out of view
margin: 0,
"-webkit-overflow-scrolling": "touch",
overflowX: "auto",
overflowY: "hidden",
padding: 0,
textAlign: "center",
transition: "opacity " + _timing2.default.default,
whiteSpace: "nowrap",
width: "100%"
}, (0, _defineProperty3.default)(_list, "@media (min-width: " + _mq2.default.min[480] + ")", {
animation: "none"
}), (0, _defineProperty3.default)(_list, "@media (min-width: " + _mq2.default.min[768] + ")", {
height: navigationSubHeight
}), _list),
listItem: (0, _defineProperty3.default)({
display: "inline-block",
lineHeight: navigationSubHeightMobile,
margin: 0,
padding: 0
}, "@media (min-width: " + _mq2.default.min[768] + ")", {
height: "100%",
lineHeight: navigationSubHeight
}),
// to be used as rules for style component
scoped: {
a: {
color: _colors2.default.textPrimary,
display: "block",
fontSize: "11px",
fontWeight: 600,
padding: "2px calc(" + _spacing2.default.gutter + "px / 2) 0",
textTransform: "uppercase",
cursor: "pointer"
},
"a.active": {
borderBottom: "5px solid " + _colors2.default.linkPrimary
},
mediaQueries: (0, _defineProperty3.default)({}, "(min-width: " + _mq2.default.min[768] + ")", {
a: {
fontSize: "12px",
height: "100%"
}
})
}
};
function SectionalNav(_ref) {
var items = _ref.items,
linkToOffset = _ref.linkToOffset,
qaHook = _ref.qaHook;
return _react2.default.createElement(
_reactStickynode2.default,
{ innerZ: _zIndex2.default.globalHeader, enabled: true },
_react2.default.createElement(
"nav",
{ "data-testid": qaHook ? "sectional-nav" : null, className: "SectionalNav", style: styles.container },
_react2.default.createElement(_radium.Style, {
scopeSelector: ".SectionalNav",
rules: styles.scoped
}),
_react2.default.createElement(
"div",
{ style: styles.innerContainer },
_react2.default.createElement(
"ul",
{ style: styles.list },
items && items.map(function (item, index) {
return _react2.default.createElement(
"li",
{
style: styles.listItem,
key: index,
"data-testid": qaHook ? "" + (0, _createQAHook2.default)(item, "sectional-nav-item-" + index + ")", "li") : null
},
_react2.default.createElement(
_reactScroll.Link,
{
to: item,
spy: true,
smooth: true,
isDynamic: true,
offset: linkToOffset,
duration: 500
},
item
)
);
})
)
)
)
);
}
SectionalNav.propTypes = {
items: _propTypes2.default.arrayOf(_propTypes2.default.string).isRequired,
linkToOffset: _propTypes2.default.number,
qaHook: _propTypes2.default.bool
};
SectionalNav.defaultProps = {
qaHook: false
};
exports.default = (0, _radium2.default)(SectionalNav);