{
- const tracker = useContext(TrackerContext)
+ const { trackEvent } = useContext(MatomoContext)
const { t, i18n } = useTranslation()
const currentLangInfos = getLangInfos(getLangFromAbreviation(i18n.language))
@@ -149,13 +150,9 @@ export default ({
showLabel
checked={!realTimeMode}
onChange={() => {
- tracker.push([
- 'trackEvent',
- 'Mode groupe',
- realTimeMode
- ? 'Désactivation du mode temps réel'
- : 'Activation du mode temps réel',
- ])
+ trackEvent(
+ getMatomoEventModeGroupeRealtimeActivation(realTimeMode)
+ )
setRealTimeMode(!realTimeMode)
}}
/>
diff --git a/source/sites/publicodes/conference/LoadingButton.tsx b/source/sites/publicodes/conference/LoadingButton.tsx
index 7ad183aaa6..f968b357d2 100644
--- a/source/sites/publicodes/conference/LoadingButton.tsx
+++ b/source/sites/publicodes/conference/LoadingButton.tsx
@@ -2,11 +2,12 @@ import { motion } from 'framer-motion'
import { useContext, useState } from 'react'
import { useTranslation } from 'react-i18next'
import { useNavigate } from 'react-router-dom'
-import { TrackerContext } from '../../../contexts/TrackerContext'
+import { getMatomoEventModeGroupeRoomCreation } from '../../../analytics/matomo-events'
+import { MatomoContext } from '../../../contexts/MatomoContext'
import { surveysURL } from './useDatabase'
export default ({ mode, URLPath, room }) => {
- const tracker = useContext(TrackerContext)
+ const { trackEvent } = useContext(MatomoContext)
const [clicked, setClicked] = useState(false)
const [text, setText] = useState(null)
@@ -27,7 +28,7 @@ export default ({ mode, URLPath, room }) => {
setClicked(true)
if (mode === 'conférence') {
- tracker.push(['trackEvent', 'Mode Groupe', 'Création salle', mode])
+ trackEvent(getMatomoEventModeGroupeRoomCreation(mode))
return setTimeout(() => navigate(URLPath), 3000)
}
const request = await fetch(surveysURL, {
@@ -58,7 +59,7 @@ export default ({ mode, URLPath, room }) => {
setText(t('Sondage créé'))
- tracker.push(['trackEvent', 'Mode Groupe', 'Création salle', mode])
+ trackEvent(getMatomoEventModeGroupeRoomCreation(mode))
return setTimeout(() => {
navigate(URLPath)
diff --git a/source/sites/publicodes/conference/Survey.tsx b/source/sites/publicodes/conference/Survey.tsx
index ed97abe9e4..86347e625b 100644
--- a/source/sites/publicodes/conference/Survey.tsx
+++ b/source/sites/publicodes/conference/Survey.tsx
@@ -7,7 +7,7 @@ import { useNavigate } from 'react-router-dom'
import { Trans, useTranslation } from 'react-i18next'
import { conferenceImg } from '../../../components/SessionBar'
import Meta from '../../../components/utils/Meta'
-import { usePersistingState } from '../../../components/utils/persistState'
+import { usePersistingState } from '../../../hooks/usePersistState'
import Navigation from '../Navigation'
import { useProfileData } from '../Profil'
import { ConferenceTitle } from './Conference'
diff --git a/source/sites/publicodes/conference/SurveyBar.tsx b/source/sites/publicodes/conference/SurveyBar.tsx
index f5c9e02dca..97a585208a 100644
--- a/source/sites/publicodes/conference/SurveyBar.tsx
+++ b/source/sites/publicodes/conference/SurveyBar.tsx
@@ -4,14 +4,14 @@ import {
splitName,
} from 'Components/publicodesUtils'
import { useEngine } from 'Components/utils/EngineContext'
-import { usePersistingState } from 'Components/utils/persistState'
import { useEffect, useState } from 'react'
import { useTranslation } from 'react-i18next'
import { useDispatch, useSelector } from 'react-redux'
import { situationSelector } from 'Selectors/simulationSelectors'
import { v4 as uuidv4 } from 'uuid'
import { minimalCategoryData } from '../../../components/publicodesUtils'
-import { useSimulationProgress } from '../../../components/utils/useNextQuestion'
+import { useSimulationProgress } from '../../../hooks/useNextQuestion'
+import { usePersistingState } from '../../../hooks/usePersistState'
import { GroupModeMenuEntryContent } from './GroupModeSessionVignette'
import { computeHumanMean } from './GroupStats'
import { surveyElementsAdapter } from './Survey'
diff --git a/source/sites/publicodes/conference/useYjs.tsx b/source/sites/publicodes/conference/useYjs.tsx
index 6d3ee62da8..a7fd3f2886 100644
--- a/source/sites/publicodes/conference/useYjs.tsx
+++ b/source/sites/publicodes/conference/useYjs.tsx
@@ -3,7 +3,7 @@ import { useDispatch, useSelector } from 'react-redux'
import { WebrtcProvider } from 'y-webrtc'
import { WebsocketProvider } from 'y-websocket'
import * as Y from 'yjs'
-import { usePersistingState } from '../../../components/utils/persistState'
+import { usePersistingState } from '../../../hooks/usePersistState'
import { generateFruitName, stringToColour } from './utils'
localStorage.log = 'y-webrtc'
diff --git a/source/sites/publicodes/fin/Buttons.tsx b/source/sites/publicodes/fin/Buttons.tsx
index 4a452ec0b7..1b5074d324 100644
--- a/source/sites/publicodes/fin/Buttons.tsx
+++ b/source/sites/publicodes/fin/Buttons.tsx
@@ -4,7 +4,8 @@ import { IframeOptionsContext } from 'Components/utils/IframeOptionsProvider'
import { motion } from 'framer-motion'
import { useContext } from 'react'
import { Link } from 'react-router-dom'
-import { TrackerContext } from '../../../contexts/TrackerContext'
+import { getMatomoEventClickActionButtonEndPage } from '../../../analytics/matomo-events'
+import { MatomoContext } from '../../../contexts/MatomoContext'
export const ActionButton = ({
text,
@@ -13,22 +14,21 @@ export const ActionButton = ({
invertImage = true,
url = '/actions',
large,
+}: {
+ text: string
+ score: number
+ imgSrc?: string
+ invertImage?: boolean
+ url?: string
+ large?: boolean
}) => {
- const tracker = useContext(TrackerContext)
+ const { trackEvent } = useContext(MatomoContext)
return (
- tracker.push([
- 'trackEvent',
- 'NGC',
- 'Clic bouton action page /fin',
- null,
- score,
- ])
- }
+ onClick={() => trackEvent(getMatomoEventClickActionButtonEndPage(score))}
css={`
margin: 0.6rem auto;
${large && 'width: 90%;'}
diff --git a/source/sites/publicodes/fin/IframeDataShareModal.tsx b/source/sites/publicodes/fin/IframeDataShareModal.tsx
index 2616fbba40..08f8410ea1 100644
--- a/source/sites/publicodes/fin/IframeDataShareModal.tsx
+++ b/source/sites/publicodes/fin/IframeDataShareModal.tsx
@@ -1,7 +1,7 @@
import { useEffect, useRef, useState } from 'react'
import { Trans, useTranslation } from 'react-i18next'
import { useSelector } from 'react-redux'
-import { inIframe } from 'Source/utils'
+import { getIsIframe } from 'Source/utils'
// We let iframe integrators ask the user if he wants to share its simulation data to the parent window
const shareDataPopupTimeout = 3500
@@ -37,7 +37,7 @@ export default ({ data }) => {
setIsOpen(false)
}
- if (!inIframe() || !document.referrer || !iframeOptions?.iframeShareData) {
+ if (!getIsIframe() || !document.referrer || !iframeOptions?.iframeShareData) {
return null
}
diff --git a/source/sites/publicodes/fin/index.tsx b/source/sites/publicodes/fin/index.tsx
index d04829c916..56d5e941bb 100644
--- a/source/sites/publicodes/fin/index.tsx
+++ b/source/sites/publicodes/fin/index.tsx
@@ -2,12 +2,13 @@ import animate from 'Components/ui/animate'
import { utils } from 'publicodes'
import { useContext } from 'react'
import { Trans } from 'react-i18next'
-import { useDispatch, useSelector } from 'react-redux'
+import { useSelector } from 'react-redux'
import { Link, useSearchParams } from 'react-router-dom'
import { answeredQuestionsSelector } from 'Selectors/simulationSelectors'
+import { matomoEventSwipeEndPage } from '../../../analytics/matomo-events'
import SlidesLayout from '../../../components/SlidesLayout'
-import { useNextQuestions } from '../../../components/utils/useNextQuestion'
-import { TrackerContext } from '../../../contexts/TrackerContext'
+import { MatomoContext } from '../../../contexts/MatomoContext'
+import { useNextQuestions } from '../../../hooks/useNextQuestion'
import { arrayLoopIteration } from '../../../utils'
import EnqueteBannerContent from '../enquête/BannerContent'
import { enquêteSelector } from '../enquête/enquêteSelector'
@@ -46,10 +47,9 @@ export default ({}) => {
const headlessMode =
!window || window.navigator.userAgent.includes('HeadlessChrome')
- const dispatch = useDispatch(),
- answeredQuestions = useSelector(answeredQuestionsSelector)
+ const answeredQuestions = useSelector(answeredQuestionsSelector)
- const tracker = useContext(TrackerContext)
+ const { trackEvent } = useContext(MatomoContext)
const enquête = useSelector(enquêteSelector)
@@ -71,7 +71,7 @@ export default ({}) => {
diapo: arrayLoopIteration(componentKeys, slideName),
details: encodedDetails,
}),
- tracker.push(['trackEvent', 'NGC', 'Swipe page de fin'])
+ trackEvent(matomoEventSwipeEndPage)
}
const previous = () => {
@@ -80,7 +80,7 @@ export default ({}) => {
details: encodedDetails,
})
- tracker.push(['trackEvent', 'NGC', 'Swipe page de fin'])
+ trackEvent(matomoEventSwipeEndPage)
}
const nextQuestions = useNextQuestions()
diff --git a/source/sites/publicodes/pages/news/NewsItem.tsx b/source/sites/publicodes/pages/news/NewsItem.tsx
index c7566a7c83..d339b5a6e9 100644
--- a/source/sites/publicodes/pages/news/NewsItem.tsx
+++ b/source/sites/publicodes/pages/news/NewsItem.tsx
@@ -1,7 +1,6 @@
import { localStorageKey } from 'Components/NewsBanner'
import { MarkdownWithAnchorLinks } from 'Components/utils/markdown'
import Meta from 'Components/utils/Meta'
-import { usePersistingState } from 'Components/utils/persistState'
import { ScrollToTop } from 'Components/utils/Scroll'
import { useEffect } from 'react'
import emoji from 'react-easy-emoji'
@@ -13,9 +12,10 @@ import {
useMatch,
useNavigate,
} from 'react-router-dom'
-import { getCurrentLangInfos, Release } from 'Source/locales/translation'
-import { capitalise0 } from 'Source/utils'
import styled from 'styled-components'
+import { usePersistingState } from '../../../../hooks/usePersistState'
+import { getCurrentLangInfos, Release } from '../../../../locales/translation'
+import { capitalise0 } from '../../../../utils'
export const dateCool = (date: Date, abrvLocale: string) =>
date.toLocaleString(abrvLocale, {
@@ -51,8 +51,6 @@ export default function NewsItem() {
const data = sortReleases(currentLangInfos.releases),
lastRelease = data && data[0]
- console.log(data)
-
useEffect(() => {
setLastViewedRelease(lastRelease.name)
}, [])
diff --git a/source/sites/publicodes/pages/news/NewsList.tsx b/source/sites/publicodes/pages/news/NewsList.tsx
index 3027903d8e..e047e2d2f5 100644
--- a/source/sites/publicodes/pages/news/NewsList.tsx
+++ b/source/sites/publicodes/pages/news/NewsList.tsx
@@ -1,22 +1,20 @@
import { localStorageKey } from 'Components/NewsBanner'
-import { usePersistingState } from 'Components/utils/persistState'
import { ScrollToTop } from 'Components/utils/Scroll'
import { useEffect } from 'react'
import { useTranslation } from 'react-i18next'
import { Link } from 'react-router-dom'
import { getCurrentLangInfos } from 'Source/locales/translation'
+import { usePersistingState } from '../../../../hooks/usePersistState'
import { dateCool, extractImage, getPath, sortReleases } from './NewsItem'
export default () => {
- const { t, i18n } = useTranslation()
+ const { i18n } = useTranslation()
const currentLangInfos = getCurrentLangInfos(i18n)
const [, setLastViewedRelease] = usePersistingState(localStorageKey, null)
const data = sortReleases(currentLangInfos.releases),
lastRelease = data && data[0]
- console.log(data)
-
useEffect(() => {
setLastViewedRelease(lastRelease.name)
}, [])
diff --git a/source/sites/publicodes/tutorial/Tutorial.tsx b/source/sites/publicodes/tutorial/Tutorial.tsx
index 27663955f8..5b432f5c7d 100644
--- a/source/sites/publicodes/tutorial/Tutorial.tsx
+++ b/source/sites/publicodes/tutorial/Tutorial.tsx
@@ -1,11 +1,12 @@
import { skipTutorial } from 'Actions/actions'
import SlidesLayout from 'Components/SlidesLayout'
import Meta from 'Components/utils/Meta'
-import useKeypress from 'Components/utils/useKeyPress'
import { useContext, useEffect } from 'react'
import { useDispatch, useSelector } from 'react-redux'
import { useNavigate } from 'react-router-dom'
-import { TrackerContext } from '../../../contexts/TrackerContext'
+import { getMatomoEventParcoursTestTutorialProgress } from '../../../analytics/matomo-events'
+import { MatomoContext } from '../../../contexts/MatomoContext'
+import useKeypress from '../../../hooks/useKeyPress'
import { enquêteSelector } from '../enquête/enquêteSelector'
import HorizontalSwipe from '../HorizontalSwipe'
import Categories from './Categories'
@@ -27,28 +28,26 @@ export default ({}) => {
const slides = createSlides(enquête)
const index = tutos.length
- const skip = (name, unskip) => dispatch(skipTutorial(name, unskip)),
- last = index === slides.length - 1,
- next = () => {
- tracker.push([
- 'trackEvent',
- 'testIntro',
- last ? `tuto passé` : `diapo ${index} passée`,
- ])
-
- skip(last ? 'testIntro' : 'testIntro' + index)
- if (last) {
- navigate('/simulateur/bilan')
- }
- },
- previous = () => dispatch(skipTutorial('testIntro' + (index - 1), true))
+ const { trackEvent } = useContext(MatomoContext)
+
+ const skip = (name, unskip) => dispatch(skipTutorial(name, unskip))
+
+ const last = index === slides.length - 1
+ const next = () => {
+ trackEvent(getMatomoEventParcoursTestTutorialProgress(last, index + 1))
+
+ skip(last ? 'testIntro' : 'testIntro' + index)
+ if (last) {
+ navigate('/simulateur/bilan')
+ }
+ }
+ const previous = () => dispatch(skipTutorial('testIntro' + (index - 1), true))
useKeypress('Escape', false, () => skip('testIntro'), 'keyup', [])
const Component = slides[index]
const dispatch = useDispatch()
- const tracker = useContext(TrackerContext)
// This results from a bug that introduced "slide5" in users' cache :/
// Here we correct the bug in the user's cache
diff --git a/source/sites/publicodes/tutorial/TutorialSlide.tsx b/source/sites/publicodes/tutorial/TutorialSlide.tsx
index 0cd2f5527c..364c743222 100644
--- a/source/sites/publicodes/tutorial/TutorialSlide.tsx
+++ b/source/sites/publicodes/tutorial/TutorialSlide.tsx
@@ -1,9 +1,12 @@
+import { useContext } from 'react'
import { useTranslation } from 'react-i18next'
import { Link } from 'react-router-dom'
+import { matomoEventParcoursTestSkipTutorial } from '../../../analytics/matomo-events'
+import { MatomoContext } from '../../../contexts/MatomoContext'
export default ({ children, last, skip }) => {
const { t } = useTranslation()
-
+ const { trackEvent } = useContext(MatomoContext)
return (
{