UNPKG

@mrr_97/next-yandex-metrika

Version:
121 lines (115 loc) 3.72 kB
'use strict'; 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