UNPKG

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
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 };