@dr.pogodin/react-helmet
Version:
Thread-safe Helmet for React 19+ and friends
111 lines (108 loc) • 3.6 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = require("react");
var _Helmet = _interopRequireDefault(require("./Helmet"));
var _jsxRuntime = require("react/jsx-runtime");
const Context = /*#__PURE__*/(0, _react.createContext)({
description: '',
title: ''
});
/**
* Auxiliary wrapper around "react-helmet", which helps to inject meta tags
* (page title, a brief content description, and social media thumbnails) into
* generated pages.
*/
const MetaTags = _ref => {
let {
children,
description,
extraMetaTags,
image,
siteName,
socialDescription,
socialTitle,
title,
url
} = _ref;
// NOTE: I guess, in this very case, we should prefer title and description
// also to empty social title and decscription?
/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */
const socTitle = socialTitle || title;
const socDesc = socialDescription || description;
/* eslint-enable @typescript-eslint/prefer-nullish-coalescing */
const context = (0, _react.useMemo)(() => ({
description,
image,
siteName,
socialDescription,
socialTitle,
title,
url
}), [description, image, siteName, socialDescription, socialTitle, title, url]);
const extra = [];
if (extraMetaTags?.length) {
for (let i = 0; i < extraMetaTags.length; ++i) {
const {
content,
name
} = extraMetaTags[i];
extra.push(/*#__PURE__*/(0, _jsxRuntime.jsx)("meta", {
content: content,
name: name
}, `extra-meta-tag-${i}`));
}
}
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Helmet.default, {
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("title", {
children: title
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("meta", {
content: description,
name: "description"
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("meta", {
content: "summary_large_image",
name: "twitter:card"
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("meta", {
content: socTitle,
name: "twitter:title"
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("meta", {
content: socDesc,
name: "twitter:description"
}), image ? /*#__PURE__*/(0, _jsxRuntime.jsx)("meta", {
content: image,
name: "twitter:image"
}) : null, siteName ? /*#__PURE__*/(0, _jsxRuntime.jsx)("meta", {
content: `@${siteName}`,
name: "twitter:site"
}) : null, /*#__PURE__*/(0, _jsxRuntime.jsx)("meta", {
content: socTitle,
name: "og:title"
}), image ? /*#__PURE__*/(0, _jsxRuntime.jsx)("meta", {
content: image,
name: "og:image"
}) : null, image ? /*#__PURE__*/(0, _jsxRuntime.jsx)("meta", {
content: socTitle,
name: "og:image:alt"
}) : null, /*#__PURE__*/(0, _jsxRuntime.jsx)("meta", {
content: socDesc,
name: "og:description"
}), siteName ? /*#__PURE__*/(0, _jsxRuntime.jsx)("meta", {
content: siteName,
name: "og:sitename"
}) : null, url ? /*#__PURE__*/(0, _jsxRuntime.jsx)("meta", {
content: url,
name: "og:url"
}) : null, extra]
}), children ? /*#__PURE__*/(0, _jsxRuntime.jsx)(Context, {
value: context,
children: children
}) : null]
});
};
MetaTags.Context = Context;
var _default = exports.default = MetaTags;
//# sourceMappingURL=MetaTags.js.map