feat: toggle moyenne / pages les plus visitées sur le chart
- Ajout toggle Kirby natif au-dessus du graphique - Moyenne : courbe agrégée unique pour toutes les pages - Pages les + visitées : multi-courbes pour le top 10 - Toggle masqué quand un filtre par page est actif - PHP : visitsByDayByPage inclut toutes les pages Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
084bb46379
commit
f0652c12cd
4 changed files with 11872 additions and 30 deletions
|
|
@ -61,7 +61,18 @@
|
|||
</div>
|
||||
|
||||
<div class="k-analytics-chart-container">
|
||||
<h3>Visites par jour</h3>
|
||||
<div class="k-analytics-chart-header">
|
||||
<h3>Visites par jour</h3>
|
||||
<k-toggle-field
|
||||
v-if="selectedPages.length === 0"
|
||||
:value="showTopPagesOnly"
|
||||
before="Moyenne"
|
||||
after="Pages les + visitées"
|
||||
text=" "
|
||||
name="topPages"
|
||||
@input="onToggleTopPages"
|
||||
/>
|
||||
</div>
|
||||
<canvas ref="chartCanvas"></canvas>
|
||||
</div>
|
||||
|
||||
|
|
@ -135,6 +146,7 @@ export default {
|
|||
users: [],
|
||||
selectedEmails: [],
|
||||
selectedPages: [],
|
||||
showTopPagesOnly: true,
|
||||
};
|
||||
},
|
||||
|
||||
|
|
@ -193,6 +205,11 @@ export default {
|
|||
this.fetchData();
|
||||
},
|
||||
|
||||
onToggleTopPages(value) {
|
||||
this.showTopPagesOnly = value;
|
||||
this.renderChart();
|
||||
},
|
||||
|
||||
async fetchData() {
|
||||
const params = new URLSearchParams();
|
||||
if (this.startDate) params.set('startDate', this.startDate);
|
||||
|
|
@ -248,13 +265,18 @@ export default {
|
|||
|
||||
const labels = allDays.map((d) => this.formatDateFR(d));
|
||||
const showPerPage =
|
||||
this.selectedPages.length === 0 && this.data.visitsByDayByPage;
|
||||
this.selectedPages.length === 0 &&
|
||||
this.showTopPagesOnly &&
|
||||
this.data.visitsByDayByPage;
|
||||
|
||||
let datasets;
|
||||
let maxValue;
|
||||
|
||||
if (showPerPage) {
|
||||
const pages = Object.keys(this.data.visitsByDayByPage);
|
||||
const topPages = this.data.visitsByPage
|
||||
? Object.keys(this.data.visitsByPage)
|
||||
: [];
|
||||
const pages = topPages;
|
||||
datasets = pages.map((page, i) => {
|
||||
const color = CHART_COLORS[i % CHART_COLORS.length];
|
||||
const values = allDays.map(
|
||||
|
|
@ -272,9 +294,7 @@ export default {
|
|||
borderWidth: 2,
|
||||
};
|
||||
});
|
||||
maxValue = Math.max(
|
||||
...datasets.flatMap((ds) => ds.data)
|
||||
);
|
||||
maxValue = Math.max(...datasets.flatMap((ds) => ds.data));
|
||||
} else {
|
||||
const values = Object.values(this.data.visitsByDay);
|
||||
datasets = [
|
||||
|
|
@ -416,11 +436,18 @@ export default {
|
|||
box-shadow: var(--shadow);
|
||||
}
|
||||
|
||||
.k-analytics-chart-container h3 {
|
||||
.k-analytics-chart-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.k-analytics-chart-header h3 {
|
||||
font-size: 0.875rem;
|
||||
font-weight: 600;
|
||||
color: var(--color-text);
|
||||
margin: 0 0 1rem 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.k-analytics-chart-container canvas {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue