diff --git a/source/components/stats/StatsContent.js b/source/components/stats/StatsContent.js
index 938de2dc5d..a628e25051 100644
--- a/source/components/stats/StatsContent.js
+++ b/source/components/stats/StatsContent.js
@@ -28,6 +28,7 @@ import {
useVisitsDuration,
useWebsites,
} from './matomo'
+
import Section from './utils/Section'
const Wrapper = styled.div`
diff --git a/source/components/stats/content/IframeFigures.js b/source/components/stats/content/IframeFigures.js
index cc568f3a5e..7f9e8cc415 100644
--- a/source/components/stats/content/IframeFigures.js
+++ b/source/components/stats/content/IframeFigures.js
@@ -81,14 +81,16 @@ const Text = styled.p`
`
export default function IframeFigures(props) {
+ const { i18n } = useTranslation()
+ const currentLangInfos = getCurrentLangInfos(i18n)
+ if (!props.pages.length || !props.activePages.length) return
const [iframes, activeIframes] =
props.pages &&
props.activePages &&
getIframeRate(props.pages, props.activePages)
+
const [iframePages, totalIframe] =
props.pages && getIdentifiedIframes(props.pages)
- const { i18n } = useTranslation()
- const currentLangInfos = getCurrentLangInfos(i18n)
return (
diff --git a/source/components/stats/content/ScoreFromURL.js b/source/components/stats/content/ScoreFromURL.js
index db0a3ea7b9..3dfb8aa234 100644
--- a/source/components/stats/content/ScoreFromURL.js
+++ b/source/components/stats/content/ScoreFromURL.js
@@ -39,6 +39,7 @@ const Text = styled.p`
`
export default function ScoreFromURL(props) {
+ if (!props.pages.length) return
const scores = props.pages && getScores(props.pages)
// we exclude high number of visits on same urls (corresponds to average test score ?)
// pb : if a user goes to end page, come back to test, change test score, come back to end page, 2 score values are taken into account instead of one.
diff --git a/source/components/stats/content/sources/Table.js b/source/components/stats/content/sources/Table.js
index efbef4b751..a0c8fb583b 100644
--- a/source/components/stats/content/sources/Table.js
+++ b/source/components/stats/content/sources/Table.js
@@ -1,5 +1,5 @@
-import styled from 'styled-components'
import { Trans } from 'react-i18next'
+import styled from 'styled-components'
import Tile from '../../utils/Tile'
@@ -75,6 +75,7 @@ export default function Table(props) {
% |
{props.data &&
+ props.data.length > 0 &&
props.data.map(
(line, index) =>
(!props.limit || index < props.limit) && (
diff --git a/source/components/stats/matomo.js b/source/components/stats/matomo.js
index 7978ea65c5..6fef07c795 100644
--- a/source/components/stats/matomo.js
+++ b/source/components/stats/matomo.js
@@ -1,43 +1,36 @@
-import { useQuery } from 'react-query'
import axios from 'axios'
+import { useQuery } from 'react-query'
+import { serverURL } from '../../sites/publicodes/conference/useDatabase'
const idSite = 153
-export const useChart = ({ chartPeriod, chartDate }) =>
+export const useX = (queryName, urlQuery, transformResult, keepPreviousData) =>
useQuery(
- ['chart', chartPeriod, chartDate],
+ queryName,
() =>
axios
.get(
- `https://stats.data.gouv.fr/?module=API&date=last${chartDate}&period=${chartPeriod}&format=json&idSite=${idSite}&method=VisitsSummary.getVisits`
+ serverURL + '/get-stats?requestParams=' + encodeURIComponent(urlQuery)
)
- .then((res) => res.data),
- {
- keepPreviousData: true,
- }
+ .then((res) => transformResult(res)),
+ { keepPreviousData }
)
-export const useSimulationsTerminees = () =>
- useQuery(
- ['SimulationsTerminees'],
- () =>
- axios
- .get(
- `https://stats.data.gouv.fr/?module=API&method=Events.getAction&idSite=${idSite}&period=range&date=last6000&format=JSON`
- )
- .then((res) =>
- res.data.find((action) => action.label === 'A terminé la simulation')
- ),
- {
- keepPreviousData: true,
- }
+export const useChart = ({ chartPeriod, chartDate }) =>
+ useX(
+ ['chart', chartPeriod, chartDate],
+ `module=API&date=last${chartDate}&period=${chartPeriod}&format=json&idSite=${idSite}&method=VisitsSummary.getVisits`,
+ (res) => res.data,
+ true
)
-export const useX = (queryName, urlQuery, transformResult) =>
- useQuery(queryName, () =>
- axios
- .get('https://stats.data.gouv.fr/?' + urlQuery)
- .then((res) => transformResult(res))
+export const useSimulationsTerminees = () =>
+ useX(
+ ['SimulationsTerminees'],
+ `module=API&method=Events.getAction&idSite=${idSite}&period=range&date=last6000&format=JSON`,
+ (res) =>
+ res.data.find((action) => action.label === 'A terminé la simulation'),
+ true
)
export const useVisitsDuration = () =>
diff --git a/source/locales/pages/fr/about.md b/source/locales/pages/fr/about.md
index dc44a6431f..c57c78d792 100644
--- a/source/locales/pages/fr/about.md
+++ b/source/locales/pages/fr/about.md
@@ -34,6 +34,10 @@ Le simulateur est amélioré en continu.
[✨️ Découvrez les dernières nouveautés et les notes de
versions](/nouveautés).
+## Statistiques
+
+Une sélection de statistiques d'audience est disponible publiquement [sur notre page stats](/stats).
+
## Vie privée
Nous collectons des données anonymisées uniquement pour améliorer ce
diff --git a/source/sites/publicodes/conference/useDatabase.tsx b/source/sites/publicodes/conference/useDatabase.tsx
index a5917c69d2..1eddc1b393 100644
--- a/source/sites/publicodes/conference/useDatabase.tsx
+++ b/source/sites/publicodes/conference/useDatabase.tsx
@@ -3,12 +3,13 @@ import { io } from 'socket.io-client'
const secure = NODE_ENV === 'development' ? '' : 's'
const protocol = `http${secure}://`
+export const serverURL = protocol + SERVER_URL
-export const answersURL = protocol + SERVER_URL + '/answers/'
+export const answersURL = serverURL + '/answers/'
-export const surveysURL = protocol + SERVER_URL + '/surveys/'
+export const surveysURL = serverURL + '/surveys/'
-export const contextURL = protocol + SERVER_URL
+export const contextURL = serverURL
export default () => {
const database = useMemo(