UNPKG

gatsby-plugin-next-seo

Version:
135 lines (119 loc) 5.11 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.ProductJsonLd = void 0; var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _jsonld = require("./jsonld"); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } var availabilityConverter = { Discontinued: 'http://schema.org/Discontinued', InStock: 'http://schema.org/InStock', InStoreOnly: 'http://schema.org/InStoreOnly', LimitedAvailability: 'http://schema.org/LimitedAvailability', OnlineOnly: 'http://schema.org/OnlineOnly', OutOfStock: 'http://schema.org/OutOfStock', PreOrder: 'http://schema.org/PreOrder', PreSale: 'http://schema.org/PreSale', SoldOut: 'http://schema.org/SoldOut' }; var itemConditionConverter = { DamagedCondition: 'http://schema.org/DamagedCondition', NewCondition: 'http://schema.org/NewCondition', RefurbishedCondition: 'http://schema.org/RefurbishedCondition', UsedCondition: 'http://schema.org/UsedCondition' }; var getAvailability = function getAvailability(availability) { return availability ? availabilityConverter[availability] : undefined; }; var getItemCondition = function getItemCondition(itemCondition) { return itemCondition ? itemConditionConverter[itemCondition] : undefined; }; /** * Add markup to your product pages so Google can provide detailed product * information in rich Search results — including Google Images. * * @remarks * * Users can see price, availability, and review ratings right on Search * results. * * @public */ var ProductJsonLd = function ProductJsonLd(_ref) { var _ref3; var name = _ref.name, productName = _ref.productName, _ref$images = _ref.images, images = _ref$images === void 0 ? [] : _ref$images, description = _ref.description, sku = _ref.sku, gtin12 = _ref.gtin12, gtin = _ref.gtin, gtin8 = _ref.gtin8, gtin13 = _ref.gtin13, gtin14 = _ref.gtin14, mpn = _ref.mpn, brand = _ref.brand, _ref$reviews = _ref.reviews, reviews = _ref$reviews === void 0 ? [] : _ref$reviews, aggregateRating = _ref.aggregateRating, offers = _ref.offers, _ref$offersType = _ref.offersType, offersType = _ref$offersType === void 0 ? 'Offer' : _ref$offersType, _ref$overrides = _ref.overrides, overrides = _ref$overrides === void 0 ? {} : _ref$overrides, _ref$defer = _ref.defer, defer = _ref$defer === void 0 ? false : _ref$defer; var json = _objectSpread({ '@context': 'https://schema.org', '@type': 'Product', name: name !== null && name !== void 0 ? name : productName, image: images, sku: sku, gtin: gtin, gtin8: gtin8, gtin12: gtin12, gtin13: gtin13, gtin14: gtin14, mpn: mpn, brand: brand ? { '@type': 'Brand', name: brand } : undefined, description: description, review: reviews.map(function (_ref2) { var reviewRating = _ref2.reviewRating, review = (0, _objectWithoutProperties2["default"])(_ref2, ["reviewRating"]); return _objectSpread(_objectSpread({ '@type': 'Review' }, review), {}, { reviewRating: _objectSpread({ '@type': 'Rating' }, reviewRating) }); }), aggregateRating: aggregateRating ? _objectSpread({ '@type': 'AggregateRating' }, aggregateRating) : undefined, offers: offers ? _objectSpread(_objectSpread({ '@type': offersType }, offers), {}, { availability: getAvailability(offers.availability), itemCondition: getItemCondition(offers.itemCondition), seller: offers.seller ? { '@type': (_ref3 = offers.seller.type) !== null && _ref3 !== void 0 ? _ref3 : 'Organization', name: offers.seller.name } : undefined }) : undefined }, overrides); return /*#__PURE__*/_react["default"].createElement(_jsonld.JsonLd, { defer: defer, json: json }); }; exports.ProductJsonLd = ProductJsonLd;