import { useNumber } from '@/hooks/use-numer-formatter'; import { useTRPC } from '@/integrations/trpc/react'; import { useQuery } from '@tanstack/react-query'; import { prop, uniqBy } from 'ramda'; import { OverviewWidgetTable } from '../overview/overview-widget-table'; import { SerieIcon } from '../report-chart/common/serie-icon'; import { Tooltiper } from '../ui/tooltip'; interface RealtimeReferralsProps { projectId: string; } export function RealtimeReferrals({ projectId }: RealtimeReferralsProps) { const trpc = useTRPC(); const query = useQuery( trpc.realtime.referrals.queryOptions({ projectId, }), ); const data = query.data ?? []; const maxCount = Math.max(...data.map((item) => item.count)); const number = useNumber(); const unique = uniqBy(prop('referrer_name'), data) .filter((i) => !!i.referrer_name.trim()) .slice(0, 8); return (
Referrals
{unique.map((item) => ( ))}
item.referrer_name} getColumnPercentage={(item) => item.count / maxCount} columns={[ { name: 'Referrer', width: 'w-full', render(item) { return (
{item.referrer_name || '(Not set)'}
); }, }, { name: 'Duration', width: '75px', render(item) { return number.shortWithUnit(item.avg_duration, 'min'); }, }, { name: 'Events', width: '60px', render(item) { return (
{number.short(item.count)}
); }, }, { name: 'Sessions', width: '82px', render(item) { return (
{number.short(item.unique_sessions)}
); }, }, ]} />
); }