@pittica/gatsby-plugin-seo
Version:
SEO optimization plugin for GatsbyJS.
75 lines (62 loc) • 2.88 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.default = Breadcrumb;
var _react = _interopRequireWildcard(require("react"));
var _reactHelmetAsync = require("react-helmet-async");
var _propTypes = _interopRequireDefault(require("prop-types"));
var _gatsbyPluginUtils = require("@pittica/gatsby-plugin-utils");
var _socialContext = _interopRequireDefault(require("../../context/social-context"));
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function Breadcrumb({
title,
url,
image,
items
}) {
const {
siteUrl
} = (0, _react.useContext)(_socialContext.default);
const itemListElement = [];
let position = 1;
for (let i = 0; i < items.length; i++) {
if (items[i].url) {
itemListElement.push({
"@type": "ListItem",
position: position++,
item: {
"@id": (0, _gatsbyPluginUtils.withUrl)(items[i].url, siteUrl),
name: items[i].name,
image: items[i].image
}
});
}
}
itemListElement.push({
"@type": "ListItem",
position,
item: {
"@id": (0, _gatsbyPluginUtils.withUrl)(url, siteUrl),
name: title,
image
}
});
return /*#__PURE__*/_react.default.createElement(_reactHelmetAsync.Helmet, null, /*#__PURE__*/_react.default.createElement("script", {
type: "application/ld+json",
key: "ld-json-breadcrumb"
}, JSON.stringify({
"@context": "http://schema.org",
"@type": "BreadcrumbList",
itemListElement
})));
}
Breadcrumb.propTypes = {
title: _propTypes.default.string,
url: _propTypes.default.string,
image: _propTypes.default.string,
items: _propTypes.default.arrayOf(_propTypes.default.object)
};
Breadcrumb.defaultProps = {
items: []
};