diff --git a/src/components/charts/Chart.tsx b/src/components/charts/Chart.tsx index 993618c2..40829cac 100644 --- a/src/components/charts/Chart.tsx +++ b/src/components/charts/Chart.tsx @@ -80,8 +80,13 @@ export function Chart({ const updateChart = (data: any) => { chart.current.data.datasets.forEach((dataset: { data: any }, index: string | number) => { - dataset.data = data?.datasets[index]?.data; - chart.current.legend.legendItems[index].text = data?.datasets[index].label; + if (data?.datasets[index]) { + dataset.data = data?.datasets[index]?.data; + + if (chart.current.legend.legendItems[index]) { + chart.current.legend.legendItems[index].text = data?.datasets[index]?.label; + } + } }); chart.current.options = options; diff --git a/src/pages/api/websites/[websiteId]/metrics.ts b/src/pages/api/websites/[websiteId]/metrics.ts index f9893e79..4a881ef9 100644 --- a/src/pages/api/websites/[websiteId]/metrics.ts +++ b/src/pages/api/websites/[websiteId]/metrics.ts @@ -109,7 +109,7 @@ export default async ( } if (EVENT_COLUMNS.includes(type)) { - const data = await getPageviewMetrics(websiteId, column, filters, limit, offset); + const data = await getPageviewMetrics(websiteId, type, filters, limit, offset); return ok(res, data); } diff --git a/src/queries/analytics/pageviews/getPageviewMetrics.ts b/src/queries/analytics/pageviews/getPageviewMetrics.ts index 7f8a39d8..eaf4ae32 100644 --- a/src/queries/analytics/pageviews/getPageviewMetrics.ts +++ b/src/queries/analytics/pageviews/getPageviewMetrics.ts @@ -1,17 +1,11 @@ import prisma from 'lib/prisma'; import clickhouse from 'lib/clickhouse'; import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db'; -import { EVENT_TYPE, SESSION_COLUMNS } from 'lib/constants'; +import { EVENT_TYPE, FILTER_COLUMNS, SESSION_COLUMNS } from 'lib/constants'; import { QueryFilters } from 'lib/types'; export async function getPageviewMetrics( - ...args: [ - websiteId: string, - column: string, - filters: QueryFilters, - limit?: number, - offset?: number, - ] + ...args: [websiteId: string, type: string, filters: QueryFilters, limit?: number, offset?: number] ) { return runQuery({ [PRISMA]: () => relationalQuery(...args), @@ -21,20 +15,20 @@ export async function getPageviewMetrics( async function relationalQuery( websiteId: string, - column: string, + type: string, filters: QueryFilters, limit: number = 500, offset: number = 0, ) { + const column = FILTER_COLUMNS[type] || type; const { rawQuery, parseFilters } = prisma; - const { filterQuery, joinSession, params } = await parseFilters( websiteId, { ...filters, eventType: column === 'event_name' ? EVENT_TYPE.customEvent : EVENT_TYPE.pageView, }, - { joinSession: SESSION_COLUMNS.includes(column) }, + { joinSession: SESSION_COLUMNS.includes(type) }, ); let excludeDomain = ''; @@ -64,11 +58,12 @@ async function relationalQuery( async function clickhouseQuery( websiteId: string, - column: string, + type: string, filters: QueryFilters, limit: number = 500, offset: number = 0, ): Promise<{ x: string; y: number }[]> { + const column = FILTER_COLUMNS[type] || type; const { rawQuery, parseFilters } = clickhouse; const { filterQuery, params } = await parseFilters(websiteId, { ...filters,