UNPKG

@koiztech/next-yandex-metrika

Version:
1 lines 6.83 kB
{"version":3,"sources":["../src/components/YandexMetrika.tsx","../src/hooks/usePageViews.tsx"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import Script from 'next/script'\n\nfunction YandexMetrikaTag({\n yid,\n clickmap = true,\n trackLinks = true,\n accurateTrackBounce = true,\n webvisor = false,\n strategy = 'afterInteractive',\n}: {\n yid: number,\n clickmap?: boolean,\n trackLinks?: boolean,\n accurateTrackBounce?: boolean,\n webvisor?: boolean,\n strategy?: 'lazyOnload' | 'afterInteractive' | 'beforeInteractive'\n}) {\n return (\n <Script id=\"yandex-metrika-tag\" strategy={strategy}>\n {`\n (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};\n m[i].l=1*new Date();\n for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }}\n k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})\n (window, document, \"script\", \"https://mc.webvisor.org/metrika/tag_ww.js\", \"ym\");\n\n ym(${yid}, \"init\", {\n clickmap:${clickmap},\n trackLinks:${trackLinks},\n accurateTrackBounce:${accurateTrackBounce},\n webvisor:${webvisor}\n });\n `}\n </Script>\n );\n}\n\nfunction YandexMetrikaPixel({ yid }: { yid: number }) {\n const src = `https://mc.yandex.ru/watch/${yid}`;\n\n /* eslint-disable @next/next/no-img-element */\n return (\n <noscript id=\"yandex-metrika-pixel\">\n <div>\n <img\n src={src}\n style={{ position: \"absolute\", left: \"-9999px\" }}\n alt=\"\"\n />\n </div>\n </noscript>\n );\n}\n\nexport function YandexMetrika({\n yid,\n clickmap = true,\n trackLinks = true,\n accurateTrackBounce = true,\n webvisor = false,\n strategy = 'afterInteractive'\n}: {\n yid?: number,\n clickmap?: boolean,\n trackLinks?: boolean,\n accurateTrackBounce?: boolean,\n webvisor?: boolean,\n strategy?: 'lazyOnload' | 'afterInteractive' | 'beforeInteractive'\n}) {\n yid = yid ?? Number(process.env.NEXT_PUBLIC_YANDEX_ID)\n\n if (!yid) {\n console.warn('Yandex Metrika ID is not set')\n return null\n }\n\n return (\n <>\n <YandexMetrikaTag\n yid={yid}\n clickmap={clickmap}\n trackLinks={trackLinks}\n accurateTrackBounce={accurateTrackBounce}\n webvisor={webvisor}\n strategy={strategy}\n />\n <YandexMetrikaPixel yid={yid} />\n </>\n );\n}\n","'use client'\n\nimport { useEffect } from 'react'\nimport { Router } from \"next/router\";\n\ntype HitOptions = {\n callback?: () => void\n ctx?: object\n params?: {\n order_price?: number\n currency?: string\n }\n referer?: string\n title?: string\n}\n\ninterface UsePageViewsOptions {\n ignoreHashChange?: boolean\n disabled?: boolean\n}\n\nconst trackPageView = (url: string, options?: HitOptions) => {\n if (typeof window !== 'undefined' && 'ym' in window) {\n const ym = window.ym as unknown as (yid: number, method: string, url: string, options?: HitOptions) => void\n const yid = Number(process.env.NEXT_PUBLIC_YANDEX_ID)\n\n if (!ym || !yid) {\n return\n }\n\n https://yandex.ru/support/metrica/code/counter-spa-setup.html\n ym(yid, 'hit', url, {\n ...options,\n title: options?.title || document.title\n })\n }\n}\n\nexport function usePageViews({\n ignoreHashChange,\n disabled\n}: UsePageViewsOptions = {}) {\n\n useEffect(() => {\n if (disabled) {\n return\n }\n\n const handleRouteChange = (url: string) => {\n trackPageView(url)\n }\n\n if (typeof window !== 'undefined') {\n Router.events.on('routeChangeComplete', handleRouteChange)\n\n if (!ignoreHashChange) {\n Router.events.on('hashChangeComplete', handleRouteChange) \n }\n\n return () => {\n Router.events.off('routeChangeComplete', handleRouteChange)\n \n if (!ignoreHashChange) {\n Router.events.off('hashChangeComplete', handleRouteChange)\n }\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [Router.events, ignoreHashChange, disabled])\n}\n"]}