diff --git a/dashboard/components/dashboard/TopCards.vue b/dashboard/components/dashboard/TopCards.vue index 8013ecb..c5f6fe7 100644 --- a/dashboard/components/dashboard/TopCards.vue +++ b/dashboard/components/dashboard/TopCards.vue @@ -21,14 +21,24 @@ const chartSlice = computed(() => { function transformResponse(input: { _id: string, count: number }[]) { + const data = input.map(e => e.count || 0); + const labels = input.map(e => DateService.getChartLabelFromISO(e._id, navigator.language, chartSlice.value)); + const pool = [...input.map(e => e.count || 0)]; - pool.pop(); + const avg = pool.reduce((a, e) => a + e, 0) / pool.length; - const diffPercent: number = (100 / avg * (input.at(-1)?.count || 0)) - 100; + + const targets = input.slice(Math.floor(input.length / 4 * 3)); + const targetAvg = targets.reduce((a, e) => a + e.count, 0) / targets.length; + + const diffPercent: number = (100 / avg * (targetAvg)) - 100; + const trend = Math.max(Math.min(diffPercent, 99), -99); + return { data, labels, trend } + } const visitsData = useFetch('/api/timeline/visits', { diff --git a/dashboard/components/events/EventsStackedBarChart.vue b/dashboard/components/events/EventsStackedBarChart.vue index 13212d7..e8723b2 100644 --- a/dashboard/components/events/EventsStackedBarChart.vue +++ b/dashboard/components/events/EventsStackedBarChart.vue @@ -14,10 +14,9 @@ function transformResponse(input: { _id: string, name: string, count: number }[] data: input, from: input[0]._id, to: safeSnapshotDates.value.to - }, slice.value, { - advanced: true, - advancedGroupKey: 'name' - }); + }, + slice.value, + { advanced: true, advancedGroupKey: 'name' }); const parsedDatasets: any[] = []; @@ -62,6 +61,7 @@ function transformResponse(input: { _id: string, name: string, count: number }[] datasets: parsedDatasets, labels: fixed.labels } + } const errorData = ref<{ errored: boolean, text: string }>({ @@ -83,7 +83,7 @@ function onResponse(e: any) { const eventsStackedData = useFetch(`/api/timeline/events_stacked`, { lazy: true, immediate: false, transform: transformResponse, - headers: useComputedHeaders({slice}), + headers: useComputedHeaders({ slice }), onResponseError, onResponse }); diff --git a/dashboard/pages/events.vue b/dashboard/pages/events.vue index 87b7767..27ed523 100644 --- a/dashboard/pages/events.vue +++ b/dashboard/pages/events.vue @@ -29,7 +29,7 @@ const eventsData = await useFetch(`/api/data/count`, { headers: useComputedHeade
- + Trigger your first event
diff --git a/dashboard/utils/DateUtils.ts b/dashboard/utils/DateUtils.ts index 7f10934..a0de4db 100644 --- a/dashboard/utils/DateUtils.ts +++ b/dashboard/utils/DateUtils.ts @@ -62,7 +62,7 @@ export function fixMetrics(result: { data: MetricsTimeline[], from: string, to: const allKeys = !options.advanced ? [] : Array.from(new Set(result.data.map((e: any) => e[options.advancedGroupKey])).values()); -console.log({allKeys}) + console.log({ allKeys, allDates }) const fixed: any[] = allDates.map(matchDate => { @@ -102,9 +102,9 @@ console.log({allKeys}) if (slice == 'hour') { return `${e._id.getHours().toString().padStart(2, '0')}:00` } else if (slice == 'day') { - return `${e._id.getDate().toString().padStart(2, '0')}/${e._id.getMonth().toString().padStart(2, '0')}` + return `${e._id.getDate().toString().padStart(2, '0')}/${(e._id.getMonth() + 1).toString().padStart(2, '0')}` } else if (slice == 'month') { - return `${e._id.getMonth().toString().padStart(2, '0')}/${e._id.getFullYear().toString()}` + return `${(e._id.getMonth() + 1).toString().padStart(2, '0')}/${e._id.getFullYear().toString()}` } else if (slice == 'year') { return `${e._id.getFullYear().toString()}` } else {