import { useQuery } from '@tanstack/react-query'; import { CartesianGrid, ComposedChart, Line, ResponsiveContainer, XAxis, YAxis, } from 'recharts'; import { ChartTooltipHeader, ChartTooltipItem, createChartTooltip, } from '@/components/charts/chart-tooltip'; import { useOverviewOptions } from '@/components/overview/useOverviewOptions'; import { useFormatDateInterval } from '@/hooks/use-format-date-interval'; import { useYAxisProps, X_AXIS_STYLE_PROPS, } from '@/components/report-chart/common/axis'; import { Skeleton } from '@/components/skeleton'; import { useTRPC } from '@/integrations/trpc/react'; import { getChartColor } from '@/utils/theme'; interface ChartData { date: string; pageviews: number; sessions: number; } const { TooltipProvider, Tooltip } = createChartTooltip< ChartData, { formatDate: (date: Date | string) => string } >(({ data, context }) => { const item = data[0]; if (!item) { return null; } return ( <>
{context.formatDate(item.date)}
Views {item.pageviews.toLocaleString()}
Sessions {item.sessions.toLocaleString()}
); }); interface PageViewsChartProps { projectId: string; origin: string; path: string; } export function PageViewsChart({ projectId, origin, path, }: PageViewsChartProps) { const { range, interval } = useOverviewOptions(); const trpc = useTRPC(); const yAxisProps = useYAxisProps(); const formatDateShort = useFormatDateInterval({ interval, short: true }); const formatDateLong = useFormatDateInterval({ interval, short: false }); const query = useQuery( trpc.event.pageTimeseries.queryOptions({ projectId, range, interval, origin, path, }) ); const data: ChartData[] = (query.data ?? []).map((r) => ({ date: r.date, pageviews: r.pageviews, sessions: r.sessions, })); return (

Views & Sessions

Views Sessions
{query.isLoading ? ( ) : ( formatDateShort(v)} type="category" /> )}
); }