From a2036ca3259668829729394660a0a1a758f436c1 Mon Sep 17 00:00:00 2001 From: Jaydon Krooss Date: Wed, 31 Jul 2024 12:26:22 -0400 Subject: [PATCH] Fixes #1580 use new GoogleAnalytics react package, upgrade react, react-dom --- .../src/components/GoogleAnalyticsTracking.js | 29 --------- assets/src/containers/App.js | 4 +- package-lock.json | 64 +++++++++++-------- package.json | 7 +- 4 files changed, 44 insertions(+), 60 deletions(-) delete mode 100644 assets/src/components/GoogleAnalyticsTracking.js diff --git a/assets/src/components/GoogleAnalyticsTracking.js b/assets/src/components/GoogleAnalyticsTracking.js deleted file mode 100644 index 01c59d6c..00000000 --- a/assets/src/components/GoogleAnalyticsTracking.js +++ /dev/null @@ -1,29 +0,0 @@ -import { useState, useEffect } from 'react' -import GoogleAnalytics from 'react-ga4' - -function GoogleAnalyticsTracking (props) { - const { gaId, cspNonce } = props - - const [initialized, setInitialized] = useState(false) - const [previousPage, setPreviousPage] = useState(null) - - if (gaId && !initialized) { - setInitialized(true) - GoogleAnalytics.initialize([{ - trackingId: gaId, - gaOptions: { nonce: cspNonce, cookieFlags: 'SameSite=None; Secure' } - }]) - } - - useEffect(() => { - const page = window.location.pathname + window.location.search + window.location.hash - if (gaId && page !== previousPage) { - setPreviousPage(page) - GoogleAnalytics.send({ hitType: 'pageview', page }) - } - }) - - return null -} - -export default GoogleAnalyticsTracking diff --git a/assets/src/containers/App.js b/assets/src/containers/App.js index 2a131928..941ddba8 100755 --- a/assets/src/containers/App.js +++ b/assets/src/containers/App.js @@ -1,14 +1,15 @@ import React from 'react' import { Route, Routes, useMatch } from 'react-router-dom' -import GoogleAnalyticsTracking from '../components/GoogleAnalyticsTracking' import CourseList from './CourseList' import Course from './Course' import WarningBanner from '../components/WarningBanner' import AlertBanner from '../components/AlertBanner' import { Helmet } from 'react-helmet' +import useGoogleAnalytics from 'react-ga-onetrust-consent' function App (props) { const { user, gaId, cspNonce } = props + useGoogleAnalytics({ googleAnalyticsId: gaId, nonce: cspNonce }) if (!user.isLoggedIn) { if (user.loginURL === '') { @@ -21,7 +22,6 @@ function App (props) { return ( <> - } /> } /> diff --git a/package-lock.json b/package-lock.json index f433d130..b5ca7746 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,11 +20,12 @@ "lodash.debounce": "4.0.8", "lodash.isequal": "4.5.0", "rc-slider": "10.5.0", - "react": "18.2.0", - "react-dom": "18.2.0", + "react": "18.3.1", + "react-dom": "18.3.1", + "react-ga-onetrust-consent": "github:tl-its-umich-edu/react-ga-onetrust-consent", "react-ga4": "2.1.0", "react-helmet": "6.1.0", - "react-router-dom": "6.21.1" + "react-router-dom": "6.25.1" }, "devDependencies": { "@babel/cli": "7.23.4", @@ -3368,9 +3369,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.14.1.tgz", - "integrity": "sha512-Qg4DMQsfPNAs88rb2xkdk03N3bjK4jgX5fR24eHCTR9q6PrhZQZ4UJBPzCHJkIpTRN1UKxx2DzjZmnC+7Lj0Ow==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.18.0.tgz", + "integrity": "sha512-L3jkqmqoSVBVKHfpGZmLrex0lxR5SucGA0sUfFzGctehw+S/ggL9L/0NnC5mw6P8HUWpFZ3nQw3cRApjjWx9Sw==", "engines": { "node": ">=14.0.0" } @@ -11474,9 +11475,9 @@ } }, "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "dependencies": { "loose-envify": "^1.1.0" }, @@ -11508,15 +11509,15 @@ "dev": true }, "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "dependencies": { "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" + "scheduler": "^0.23.2" }, "peerDependencies": { - "react": "^18.2.0" + "react": "^18.3.1" } }, "node_modules/react-fast-compare": { @@ -11524,6 +11525,17 @@ "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==" }, + "node_modules/react-ga-onetrust-consent": { + "version": "1.0.0", + "resolved": "git+ssh://git@github.com/tl-its-umich-edu/react-ga-onetrust-consent.git#9f34eefa515d1c3d33ee071c6a935f23c85a4de4", + "license": "Apache-2.0", + "dependencies": { + "js-cookie": "^3.0.5", + "react": "^18.3.1", + "react-ga4": "^2.1.0", + "react-router-dom": "^6.25.1" + } + }, "node_modules/react-ga4": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/react-ga4/-/react-ga4-2.1.0.tgz", @@ -11549,11 +11561,11 @@ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, "node_modules/react-router": { - "version": "6.21.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.21.1.tgz", - "integrity": "sha512-W0l13YlMTm1YrpVIOpjCADJqEUpz1vm+CMo47RuFX4Ftegwm6KOYsL5G3eiE52jnJpKvzm6uB/vTKTPKM8dmkA==", + "version": "6.25.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.25.1.tgz", + "integrity": "sha512-u8ELFr5Z6g02nUtpPAggP73Jigj1mRePSwhS/2nkTrlPU5yEkH1vYzWNyvSnSzeeE2DNqWdH+P8OhIh9wuXhTw==", "dependencies": { - "@remix-run/router": "1.14.1" + "@remix-run/router": "1.18.0" }, "engines": { "node": ">=14.0.0" @@ -11563,12 +11575,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.21.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.21.1.tgz", - "integrity": "sha512-QCNrtjtDPwHDO+AO21MJd7yIcr41UetYt5jzaB9Y1UYaPTCnVuJq6S748g1dE11OQlCFIQg+RtAA1SEZIyiBeA==", + "version": "6.25.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.25.1.tgz", + "integrity": "sha512-0tUDpbFvk35iv+N89dWNrJp+afLgd+y4VtorJZuOCXK0kkCWjEvb3vTJM++SYvMEpbVwXKf3FjeVveVEb6JpDQ==", "dependencies": { - "@remix-run/router": "1.14.1", - "react-router": "6.21.1" + "@remix-run/router": "1.18.0", + "react-router": "6.25.1" }, "engines": { "node": ">=14.0.0" @@ -12032,9 +12044,9 @@ } }, "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "dependencies": { "loose-envify": "^1.1.0" } diff --git a/package.json b/package.json index d7c95b38..a6c230c2 100644 --- a/package.json +++ b/package.json @@ -18,11 +18,12 @@ "lodash.debounce": "4.0.8", "lodash.isequal": "4.5.0", "rc-slider": "10.5.0", - "react": "18.2.0", - "react-dom": "18.2.0", + "react": "18.3.1", + "react-dom": "18.3.1", + "react-ga-onetrust-consent": "github:tl-its-umich-edu/react-ga-onetrust-consent", "react-ga4": "2.1.0", "react-helmet": "6.1.0", - "react-router-dom": "6.21.1" + "react-router-dom": "6.25.1" }, "babel": { "presets": [