umami/src/app/(main)/websites/[websiteId]/WebsiteChart.tsx

42 lines
1.3 KiB
TypeScript
Raw Normal View History

import { useMemo } from 'react';
import PageviewsChart from 'components/metrics/PageviewsChart';
import { getDateArray } from 'lib/date';
import useWebsitePageviews from 'components/hooks/queries/useWebsitePageviews';
import { useDateRange } from 'components/hooks';
2024-05-24 02:35:29 +00:00
export function WebsiteChart({
websiteId,
compareMode = false,
}: {
websiteId: string;
compareMode: boolean;
}) {
const { dateRange, dateCompare } = useDateRange(websiteId);
2024-02-03 01:49:17 +00:00
const { startDate, endDate, unit } = dateRange;
2024-05-24 02:35:29 +00:00
const { data, isLoading } = useWebsitePageviews(websiteId, compareMode ? dateCompare : undefined);
const { pageviews, sessions, compare } = (data || {}) as any;
const chartData = useMemo(() => {
if (data) {
2024-05-24 02:35:29 +00:00
const result = {
pageviews: getDateArray(pageviews, startDate, endDate, unit),
sessions: getDateArray(sessions, startDate, endDate, unit),
};
2024-05-24 02:35:29 +00:00
if (compare) {
result['compare'] = {
pageviews: result.pageviews.map(({ x }, i) => ({ x, y: compare.pageviews[i].y })),
sessions: result.sessions.map(({ x }, i) => ({ x, y: compare.sessions[i].y })),
};
}
return result;
}
return { pageviews: [], sessions: [] };
}, [data, startDate, endDate, unit]);
2023-12-03 11:07:03 +00:00
return <PageviewsChart data={chartData} unit={unit} isLoading={isLoading} />;
}
export default WebsiteChart;