@mrr_97/next-yandex-metrika
Version:
Yandex Metrika for Next.js >= 14
121 lines (115 loc) • 3.72 kB
JavaScript
;
var Script = require('next/script');
var jsxRuntime = require('react/jsx-runtime');
var react = require('react');
var navigation = require('next/navigation');
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
var Script__default = /*#__PURE__*/_interopDefault(Script);
// src/components/YandexMetrika.tsx
function YandexMetrikaTag({
yid,
clickmap = true,
trackLinks = true,
accurateTrackBounce = true,
webvisor = false,
strategy = "afterInteractive"
}) {
return /* @__PURE__ */ jsxRuntime.jsx(Script__default.default, { id: "yandex-metrika-tag", strategy, children: `
(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
m[i].l=1*new Date();
for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }}
k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
(window, document, "script", "https://mc.webvisor.org/metrika/tag_ww.js", "ym");
ym(${yid}, "init", {
clickmap:${clickmap},
trackLinks:${trackLinks},
accurateTrackBounce:${accurateTrackBounce},
webvisor:${webvisor}
});
` });
}
function YandexMetrikaPixel({ yid }) {
const src = `https://mc.yandex.ru/watch/${yid}`;
return /* @__PURE__ */ jsxRuntime.jsx("noscript", { id: "yandex-metrika-pixel", children: /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx(
"img",
{
src,
style: { position: "absolute", left: "-9999px" },
alt: ""
}
) }) });
}
function YandexMetrika({
yid,
clickmap = true,
trackLinks = true,
accurateTrackBounce = true,
webvisor = false,
strategy = "afterInteractive"
}) {
yid = yid ?? Number(process.env.NEXT_PUBLIC_YANDEX_ID);
if (!yid) {
if (process.env.NODE_ENV !== "production") {
console.warn("Yandex Metrika ID is not set");
}
return null;
}
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
/* @__PURE__ */ jsxRuntime.jsx(
YandexMetrikaTag,
{
yid,
clickmap,
trackLinks,
accurateTrackBounce,
webvisor,
strategy
}
),
/* @__PURE__ */ jsxRuntime.jsx(YandexMetrikaPixel, { yid })
] });
}
var trackPageView = (url, options) => {
if (typeof window !== "undefined" && window.ym) {
const yid = Number(process.env.NEXT_PUBLIC_YANDEX_ID);
if (!window.ym || !yid) {
return;
}
window.ym(yid, "hit", url, {
...options,
title: document.title
});
}
};
function usePageViews({
ignoreHashChange = false,
disabled = false
} = {}) {
const pathname = navigation.usePathname();
const searchParams = navigation.useSearchParams();
react.useEffect(() => {
if (disabled) {
return;
}
const url = searchParams.toString() ? `${pathname}?${searchParams.toString()}` : pathname;
trackPageView(url);
}, [pathname, searchParams, disabled]);
react.useEffect(() => {
if (disabled || ignoreHashChange) {
return;
}
const handleHashChange = () => {
if (typeof window !== "undefined") {
trackPageView(window.location.pathname + window.location.search + window.location.hash);
}
};
if (typeof window !== "undefined") {
window.addEventListener("hashchange", handleHashChange);
return () => window.removeEventListener("hashchange", handleHashChange);
}
}, [disabled, ignoreHashChange]);
}
exports.YandexMetrika = YandexMetrika;
exports.usePageViews = usePageViews;
//# sourceMappingURL=index.cjs.map
//# sourceMappingURL=index.cjs.map