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(