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.
211 lines (187 loc) • 7.57 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Footer = void 0;
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _block = require("../block");
var _inline = require("../inline");
var _button = require("../button");
var _logo = require("../logo");
var _link = require("../link");
var _icon = require("../icon");
var _breakpoints = require("../../constants/breakpoints");
var _deprecate = require("../../deprecate");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
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; }
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.default.createElement(_block.Block, {
key: i,
extend: {
padding: "10px 16px"
}
}, _react.default.createElement(_link.Link, {
key: item.name,
href: item.url,
intent: "primary-light",
arrow: "right"
}, item.name));
};
var secondaryNavigation = function secondaryNavigation(item, i) {
return _react.default.createElement(_block.Block, {
key: i,
extend: {
margin: "10px 0"
}
}, _react.default.createElement(_inline.Inline, {
extend: _objectSpread({}, i > 0 && {
borderLeft: "1px solid #aaa",
paddingLeft: "12px",
height: "12px",
marginLeft: "12px"
})
}, _react.default.createElement(_link.Link, {
key: item.name,
href: item.url,
intent: "primary-light"
}, item.name)));
};
var socialNavigation = function socialNavigation(item, i) {
return _react.default.createElement(_block.Block, {
as: "a",
key: item.name,
href: item.url,
extend: _objectSpread({}, i > 0 && {
marginLeft: "30px"
})
}, _react.default.createElement(_icon.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"]);
(0, _deprecate.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.default.createElement(_block.Block, _extends({
as: "footer",
extend: _objectSpread({}, styles, theme.footer)
}, props), data.legalDisclaimer && _react.default.createElement(_block.Block, {
extend: {
fontSize: "14px",
maxWidth: "620px",
color: "#999",
margin: "0 auto 30px",
"> a": {
color: "#aaa"
}
},
dangerouslySetInnerHTML: {
__html: data.legalDisclaimer
}
}), _react.default.createElement(_block.Block, {
extend: _defineProperty({
justifyContent: "center",
display: "flex",
flexWrap: "wrap",
margin: "0 auto 30px",
maxWidth: "620px"
}, _breakpoints.BREAKPOINTS.onS, {
flexDirection: "column",
alignItems: "center"
})
}, data.primaryFooterNavigation.map(primaryNavigation)), data.socialMediaNavigation.length && _react.default.createElement(_block.Block, {
extend: {
marginBottom: "30px"
}
}, data.socialMediaNavigation.map(socialNavigation)), _react.default.createElement(_block.Block, {
extend: {
marginBottom: "30px"
}
}, _react.default.createElement(_inline.Inline, {
extend: {
verticalAlign: "middle",
display: "inline-block",
marginRight: "10px"
}
}, _react.default.createElement(_icon.Icon, {
size: "l",
stroke: "#fff",
fill: "#fff",
type: "globe"
})), _react.default.createElement(_inline.Inline, {
extend: {
verticalAlign: "middle"
}
}, data.marketName)), _react.default.createElement(_block.Block, {
extend: {
marginBottom: "40px"
}
}, _react.default.createElement(_link.Link, {
href: "/",
intent: "primary-light",
arrow: "right"
}, "Change Location")), _react.default.createElement(_block.Block, {
extend: {
fontSize: "14px",
color: "#999",
marginBottom: "40px"
}
}, data.copyrightInfo), _react.default.createElement(_block.Block, {
extend: {
justifyContent: "center",
display: "flex",
flexWrap: "wrap",
margin: "0 auto 30px",
maxWidth: "620px"
}
}, data.secondaryFooterNavigation.map(secondaryNavigation)), _react.default.createElement(_block.Block, {
extend: {
marginBottom: "40px"
}
}, _react.default.createElement(_logo.Logo, {
type: "wordmark"
})), _react.default.createElement(_button.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.default.shape({
legalDisclaimer: _propTypes.default.string,
// Optional, only on some markets
primaryFooterNavigation: _propTypes.default.array.isRequired,
secondaryFooterNavigation: _propTypes.default.array.isRequired,
socialMediaNavigation: _propTypes.default.array.isRequired,
marketName: _propTypes.default.string.isRequired,
copyrightInfo: _propTypes.default.string.isRequired,
navigateToTop: _propTypes.default.string.isRequired
}).isRequired
};
var Footer = (0, _block.withTheme)(FooterComponent);
exports.Footer = Footer;