vcc-ui
Version:
VCC UI is a collection of React UI Components that can be used for developing front-end applications at Volvo Car Corporation.
192 lines (181 loc) • 6.84 kB
JavaScript
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
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; }
import React from "react";
import PropTypes from "prop-types";
import { Block, withTheme } from "../block";
import { Inline } from "../inline";
import { Button } from "../button";
import { Logo } from "../logo";
import { Link } from "../link";
import { Icon } from "../icon";
import { BREAKPOINTS } from "../../constants/breakpoints";
import { deprecate } from "../../deprecate";
var styles = {
boxSizing: "border-box",
background: "#000",
color: "#fff",
padding: "40px 20px 80px",
fontFamily: "Volvo Novum Regular, sans-serif",
textAlign: "center"
};
var primaryNavigation = function primaryNavigation(item, i) {
return React.createElement(Block, {
key: i,
extend: {
padding: "10px 16px"
}
}, React.createElement(Link, {
key: item.name,
href: item.url,
intent: "primary-light",
arrow: "right"
}, item.name));
};
var secondaryNavigation = function secondaryNavigation(item, i) {
return React.createElement(Block, {
key: i,
extend: {
margin: "10px 0"
}
}, React.createElement(Inline, {
extend: _objectSpread({}, i > 0 && {
borderLeft: "1px solid #aaa",
paddingLeft: "12px",
height: "12px",
marginLeft: "12px"
})
}, React.createElement(Link, {
key: item.name,
href: item.url,
intent: "primary-light"
}, item.name)));
};
var socialNavigation = function socialNavigation(item, i) {
return React.createElement(Block, {
as: "a",
key: item.name,
href: item.url,
extend: _objectSpread({}, i > 0 && {
marginLeft: "30px"
})
}, React.createElement(Icon, {
color: "#fff",
size: "m",
type: item.name.toLowerCase()
}));
};
var FooterComponent = function FooterComponent(_ref) {
var data = _ref.data,
theme = _ref.theme,
props = _objectWithoutProperties(_ref, ["data", "theme"]);
deprecate("The footer component has been moved to the @volvo-cars/site-footer-component package. The footer will be removed in the next major version release of VCC UI (1.x). Pleae upgrade now");
return React.createElement(Block, _extends({
as: "footer",
extend: _objectSpread({}, styles, theme.footer)
}, props), data.legalDisclaimer && React.createElement(Block, {
extend: {
fontSize: "14px",
maxWidth: "620px",
color: "#999",
margin: "0 auto 30px",
"> a": {
color: "#aaa"
}
},
dangerouslySetInnerHTML: {
__html: data.legalDisclaimer
}
}), React.createElement(Block, {
extend: _defineProperty({
justifyContent: "center",
display: "flex",
flexWrap: "wrap",
margin: "0 auto 30px",
maxWidth: "620px"
}, BREAKPOINTS.onS, {
flexDirection: "column",
alignItems: "center"
})
}, data.primaryFooterNavigation.map(primaryNavigation)), data.socialMediaNavigation.length && React.createElement(Block, {
extend: {
marginBottom: "30px"
}
}, data.socialMediaNavigation.map(socialNavigation)), React.createElement(Block, {
extend: {
marginBottom: "30px"
}
}, React.createElement(Inline, {
extend: {
verticalAlign: "middle",
display: "inline-block",
marginRight: "10px"
}
}, React.createElement(Icon, {
size: "l",
stroke: "#fff",
fill: "#fff",
type: "globe"
})), React.createElement(Inline, {
extend: {
verticalAlign: "middle"
}
}, data.marketName)), React.createElement(Block, {
extend: {
marginBottom: "40px"
}
}, React.createElement(Link, {
href: "/",
intent: "primary-light",
arrow: "right"
}, "Change Location")), React.createElement(Block, {
extend: {
fontSize: "14px",
color: "#999",
marginBottom: "40px"
}
}, data.copyrightInfo), React.createElement(Block, {
extend: {
justifyContent: "center",
display: "flex",
flexWrap: "wrap",
margin: "0 auto 30px",
maxWidth: "620px"
}
}, data.secondaryFooterNavigation.map(secondaryNavigation)), React.createElement(Block, {
extend: {
marginBottom: "40px"
}
}, React.createElement(Logo, {
type: "wordmark"
})), React.createElement(Button, {
intent: "primary-light",
variant: "outline",
arrow: "up",
onClick: function onClick() {
return window.scrollTo({
top: 0,
left: 0,
behavior: "smooth"
});
}
}, data.navigateToTop));
};
FooterComponent.displayName = "Footer";
FooterComponent.propTypes = {
/** Data from VCC Content Delivery API */
data: PropTypes.shape({
legalDisclaimer: PropTypes.string,
// Optional, only on some markets
primaryFooterNavigation: PropTypes.array.isRequired,
secondaryFooterNavigation: PropTypes.array.isRequired,
socialMediaNavigation: PropTypes.array.isRequired,
marketName: PropTypes.string.isRequired,
copyrightInfo: PropTypes.string.isRequired,
navigateToTop: PropTypes.string.isRequired
}).isRequired
};
var Footer = withTheme(FooterComponent);
export { Footer };