@xo-union/tk-component-header-nav
Version:
60 lines (59 loc) • 1.95 kB
JavaScript
import React from "react";
import PropTypes from "prop-types";
import PageletContainer from "@xo-union/react-pagelet";
import { getHeaderAssetUrl, getHeaderSSIUrl } from "../../utils/urls.js";
import Placeholder from "./Placeholder.js";
const handleError = evt => {
if (evt.detail.isRendered && evt.detail.phase === 'load' && process.env.NODE_ENV === 'production') {
/**
* If header nav is already rendered, do not show error view
*/
evt.preventDefault();
}
};
/**
* Renders a header nav pagelet which gets dynamically updated as changes to the header are made.
*
* Besides its own props, this component also accepts all props accepted by the HeaderNav component
*/
const HeaderNavPagelet = _ref => {
let {
tag,
ssi,
...props
} = _ref;
const links = {
ssi: getHeaderSSIUrl(tag, 'index.html'),
css: getHeaderAssetUrl(tag, 'styles.css'),
js: getHeaderAssetUrl(tag, 'main.js')
};
return /*#__PURE__*/React.createElement(PageletContainer, {
onError: handleError,
renderPlaceholder: Placeholder,
renderError: Placeholder,
containerId: "header-navigation",
links: links,
ssi: ssi,
pageletProps: props
});
};
HeaderNavPagelet.defaultProps = {
tag: 'latest',
ssi: false
};
process.env.NODE_ENV !== "production" ? HeaderNavPagelet.propTypes = {
/**
* Pagelet tag to use. Primary tag will always be `latest` but in cases where we need
* to maintain support for an older version of the header pagelet, we will support other tags.
*
* The tag can also be a fixed header pagelet version
*/
tag: PropTypes.string,
/**
* Whether or not to enable SSI. This is recommended to improve rendering performance as this accomplishes
* server side rendering. NOTE: This requires that the backend server that serves the HTML
* for the current page supports `ssi` directives.
*/
ssi: PropTypes.bool
} : void 0;
export default HeaderNavPagelet;