From ba1d6c4bd0c4c6ef1cce5e1a9824d819c77ceadd Mon Sep 17 00:00:00 2001 From: Emily Date: Sun, 4 Aug 2024 00:33:28 +0200 Subject: [PATCH] fix visits + sessions reactivity --- dashboard/components/AdvancedLineChart.vue | 3 -- .../dashboard/SessionsLineChart.vue | 51 ++++++++++--------- dashboard/components/dashboard/TopCards.vue | 1 - .../components/dashboard/VisitsLineChart.vue | 50 +++++++++--------- dashboard/pages/index.vue | 15 +++--- dashboard/utils/DateUtils.ts | 2 + shared/services/DateService.ts | 4 +- 7 files changed, 66 insertions(+), 60 deletions(-) diff --git a/dashboard/components/AdvancedLineChart.vue b/dashboard/components/AdvancedLineChart.vue index 6f50a19..070ac00 100644 --- a/dashboard/components/AdvancedLineChart.vue +++ b/dashboard/components/AdvancedLineChart.vue @@ -81,8 +81,6 @@ const { lineChartProps, lineChartRef } = useLineChart({ chartData: chartData, op onMounted(async () => { - console.log('MOUNTED') - const c = document.createElement('canvas'); const ctx = c.getContext("2d"); let gradient: any = `${props.color}22`; @@ -98,7 +96,6 @@ onMounted(async () => { chartData.value.datasets[0].backgroundColor = [gradient]; watch(props, () => { - console.log('UPDATE') chartData.value.labels = props.labels; chartData.value.datasets[0].data = props.data; }); diff --git a/dashboard/components/dashboard/SessionsLineChart.vue b/dashboard/components/dashboard/SessionsLineChart.vue index 59dacaf..b4bed31 100644 --- a/dashboard/components/dashboard/SessionsLineChart.vue +++ b/dashboard/components/dashboard/SessionsLineChart.vue @@ -2,42 +2,45 @@ import { onMounted } from 'vue'; import DateService, { type Slice } from '@services/DateService'; -const data = ref([]); -const labels = ref([]); const props = defineProps<{ slice: Slice }>(); -const slice = computed(() => props.slice); +const activeProject = useActiveProject(); -const res = useTimeline('sessions', slice); +const { safeSnapshotDates } = useSnapshot() + +function transformResponse(input: { _id: string, count: number }[]) { + const data = input.map(e => e.count); + const labels = input.map(e => DateService.getChartLabelFromISO(e._id, navigator.language, props.slice)); + return { data, labels } +} + +const body = computed(() => { + return { + from: safeSnapshotDates.value.from, + to: safeSnapshotDates.value.to, + slice: props.slice + } +}); + + +const sessionsData = useFetch(`/api/metrics/${activeProject.value?._id}/timeline/visits`, { + method: 'POST', ...signHeaders({ v2: 'true' }), body, transform: transformResponse, + lazy: true, immediate: false +}); onMounted(async () => { - - res.onResponse(resData => { - if (!resData.value) return; - data.value = resData.value.map(e => e.count); - labels.value = resData.value.map(e => DateService.getChartLabelFromISO(e._id, navigator.language, props.slice)); - }); - - await res.refresh(); - - watch(props, () => res.refresh()); -}) - - -const chartVisible = computed(() => { - if (res.pending.value) return false; - if (!res.data.value) return false; - return true; -}) + sessionsData.execute(); +}); \ No newline at end of file diff --git a/dashboard/components/dashboard/TopCards.vue b/dashboard/components/dashboard/TopCards.vue index 715bef9..a3e358d 100644 --- a/dashboard/components/dashboard/TopCards.vue +++ b/dashboard/components/dashboard/TopCards.vue @@ -101,7 +101,6 @@ const sessionsDurationData = useFetch(`/api/metrics/${activeProject.value?._id}/ onMounted(async () => { - console.log('MOUNTED') visitsData.execute(); eventsData.execute(); sessionsData.execute(); diff --git a/dashboard/components/dashboard/VisitsLineChart.vue b/dashboard/components/dashboard/VisitsLineChart.vue index 67ac53b..3adbff1 100644 --- a/dashboard/components/dashboard/VisitsLineChart.vue +++ b/dashboard/components/dashboard/VisitsLineChart.vue @@ -2,43 +2,45 @@ import { onMounted } from 'vue'; import DateService, { type Slice } from '@services/DateService'; -const data = ref([]); -const labels = ref([]); const props = defineProps<{ slice: Slice }>(); -const slice = computed(() => props.slice); +const activeProject = useActiveProject(); -const res = useTimeline('visits', slice); +const { safeSnapshotDates } = useSnapshot() +function transformResponse(input: { _id: string, count: number }[]) { + const data = input.map(e => e.count); + const labels = input.map(e => DateService.getChartLabelFromISO(e._id, navigator.language, props.slice)); + return { data, labels } +} + +const body = computed(() => { + return { + from: safeSnapshotDates.value.from, + to: safeSnapshotDates.value.to, + slice: props.slice + } +}); + + +const visitsData = useFetch(`/api/metrics/${activeProject.value?._id}/timeline/visits`, { + method: 'POST', ...signHeaders({ v2: 'true' }), body, transform: transformResponse, + lazy: true, immediate: false +}); onMounted(async () => { - - res.onResponse(resData => { - if (!resData.value) return; - data.value = resData.value.map(e => e.count); - labels.value = resData.value.map(e => DateService.getChartLabelFromISO(e._id, navigator.language, props.slice)); - }); - - await res.refresh(); - - watch(props, () => res.refresh()); -}) - - -const chartVisible = computed(() => { - if (res.pending.value) return false; - if (!res.data.value) return false; - return true; -}) + visitsData.execute(); +}); \ No newline at end of file diff --git a/dashboard/pages/index.vue b/dashboard/pages/index.vue index 38bbfb5..16f135e 100644 --- a/dashboard/pages/index.vue +++ b/dashboard/pages/index.vue @@ -78,7 +78,8 @@ const limitAlertActions: any[] = [ ] const { snapshot } = useSnapshot(); -const topCardsKey = computed(() => `${snapshot.value._id.toString()}`); + +const refreshKey = computed(() => `${snapshot.value._id.toString()}`); @@ -116,13 +117,13 @@ const topCardsKey = computed(() => `${snapshot.value._id.toString()}`); - - + + + -