AnalyticsSwitch
parent
7d69d9f8a5
commit
7aae6be023
|
@ -0,0 +1,35 @@
|
||||||
|
import React from "react";
|
||||||
|
import PropTypes from "prop-types";
|
||||||
|
import UmamiAnalytics from "./umami/UmamiAnalytics";
|
||||||
|
import MatomoAnalytics from "./matomo/MatomoAnalytics";
|
||||||
|
|
||||||
|
const AnalyticsSwitch = ({ disabled, umami, matomo }) => {
|
||||||
|
if (disabled) return "";
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
{umami && umami.enabled && <UmamiAnalytics {...umami} />}
|
||||||
|
{matomo && matomo.enabled && <MatomoAnalytics {...matomo} />}
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
AnalyticsSwitch.defaultProps = {
|
||||||
|
disabled: false
|
||||||
|
};
|
||||||
|
|
||||||
|
AnalyticsSwitch.propTypes = {
|
||||||
|
disabled: PropTypes.bool,
|
||||||
|
umami: PropTypes.shape({
|
||||||
|
enabled: PropTypes.bool.isRequired,
|
||||||
|
source: PropTypes.string.isRequired,
|
||||||
|
websiteId: PropTypes.string.isRequired
|
||||||
|
}),
|
||||||
|
matomo: PropTypes.shape({
|
||||||
|
enabled: PropTypes.bool.isRequired,
|
||||||
|
source: PropTypes.string.isRequired,
|
||||||
|
websiteId: PropTypes.string.isRequired
|
||||||
|
})
|
||||||
|
};
|
||||||
|
|
||||||
|
export default AnalyticsSwitch;
|
|
@ -1 +1,4 @@
|
||||||
export {};
|
import AnalyticsSwitch from "./AnalyticsSwitch";
|
||||||
|
|
||||||
|
export { AnalyticsSwitch };
|
||||||
|
export default AnalyticsSwitch;
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
import PropTypes from "prop-types";
|
||||||
|
import useMatomoScript from "./useMatomoScript";
|
||||||
|
|
||||||
|
const MatomoAnalytics = ({ source, websiteId }) => {
|
||||||
|
useMatomoScript(source, websiteId);
|
||||||
|
return "";
|
||||||
|
};
|
||||||
|
|
||||||
|
MatomoAnalytics.propTypes = {
|
||||||
|
source: PropTypes.string.isRequired,
|
||||||
|
websiteId: PropTypes.string.isRequired
|
||||||
|
};
|
||||||
|
|
||||||
|
export default MatomoAnalytics;
|
|
@ -0,0 +1,30 @@
|
||||||
|
import { useEffect } from "react";
|
||||||
|
|
||||||
|
const useMatomoScript = (source, websiteId) => {
|
||||||
|
useEffect(() => {
|
||||||
|
const script = document.createElement("script");
|
||||||
|
script.text = `var _paq = (window._paq = window._paq || []);
|
||||||
|
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
|
||||||
|
_paq.push(["trackPageView"]);
|
||||||
|
_paq.push(["enableLinkTracking"]);
|
||||||
|
(function () {
|
||||||
|
var u = "${source}";
|
||||||
|
_paq.push(["setTrackerUrl", u + "matomo.php"]);
|
||||||
|
_paq.push(["setSiteId", "${websiteId}"]);
|
||||||
|
var d = document,
|
||||||
|
g = d.createElement("script"),
|
||||||
|
s = d.getElementsByTagName("script")[0];
|
||||||
|
g.async = true;
|
||||||
|
g.src = u + "matomo.js";
|
||||||
|
s.parentNode.insertBefore(g, s);
|
||||||
|
})();`;
|
||||||
|
|
||||||
|
document.head.appendChild(script);
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
document.head.removeChild(script);
|
||||||
|
};
|
||||||
|
}, [source, websiteId]);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default useMatomoScript;
|
|
@ -0,0 +1,14 @@
|
||||||
|
import PropTypes from "prop-types";
|
||||||
|
import useUmamiScript from "./useUmamiScript";
|
||||||
|
|
||||||
|
const UmamiAnalytics = ({ source, websiteId }) => {
|
||||||
|
useUmamiScript(source, websiteId);
|
||||||
|
return "";
|
||||||
|
};
|
||||||
|
|
||||||
|
UmamiAnalytics.propTypes = {
|
||||||
|
source: PropTypes.string.isRequired,
|
||||||
|
websiteId: PropTypes.string.isRequired
|
||||||
|
};
|
||||||
|
|
||||||
|
export default UmamiAnalytics;
|
|
@ -0,0 +1,19 @@
|
||||||
|
import { useEffect } from "react";
|
||||||
|
|
||||||
|
const useUmamiScript = (src, websiteId) => {
|
||||||
|
useEffect(() => {
|
||||||
|
const script = document.createElement("script");
|
||||||
|
script.async = true;
|
||||||
|
script.defer = true;
|
||||||
|
script.src = src;
|
||||||
|
script.setAttribute("data-website-id", websiteId);
|
||||||
|
|
||||||
|
document.head.appendChild(script);
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
document.head.removeChild(script);
|
||||||
|
};
|
||||||
|
}, [src, websiteId]);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default useUmamiScript;
|
Loading…
Reference in New Issue