Fix source count in statistics

This commit is contained in:
Wavering Ana 2025-02-01 00:01:06 -05:00
parent d8c5a7921c
commit e150bece4d

View file

@ -10,7 +10,7 @@ import {
} from "recharts"; } from "recharts";
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
import { toast } from "@/hooks/use-toast"; import { toast } from "@/hooks/use-toast";
import { useState, useEffect } from "react"; import { useState, useEffect, useMemo } from "react";
import { getLinkClickStats, getLinkSourceStats } from "../api/client"; import { getLinkClickStats, getLinkSourceStats } from "../api/client";
import { ClickStats, SourceStats } from "../types/api"; import { ClickStats, SourceStats } from "../types/api";
@ -97,6 +97,20 @@ export function StatisticsModal({ isOpen, onClose, linkId }: StatisticsModalProp
} }
}, [isOpen, linkId]); }, [isOpen, linkId]);
const aggregatedSources = useMemo(() => {
const sourceMap = sourcesData.reduce<Record<string, number>>(
(acc, { source, count }) => ({
...acc,
[source]: (acc[source] || 0) + count
}),
{}
);
return Object.entries(sourceMap)
.map(([source, count]) => ({ source, count }))
.sort((a, b) => b.count - a.count);
}, [sourcesData]);
return ( return (
<Dialog open={isOpen} onOpenChange={onClose}> <Dialog open={isOpen} onOpenChange={onClose}>
<DialogContent className="max-w-3xl"> <DialogContent className="max-w-3xl">
@ -138,7 +152,7 @@ export function StatisticsModal({ isOpen, onClose, linkId }: StatisticsModalProp
</CardHeader> </CardHeader>
<CardContent> <CardContent>
<ul className="space-y-2"> <ul className="space-y-2">
{sourcesData.map((source, index) => ( {aggregatedSources.map((source, index) => (
<li <li
key={source.source} key={source.source}
className="flex items-center justify-between py-2 border-b last:border-0" className="flex items-center justify-between py-2 border-b last:border-0"
@ -149,9 +163,7 @@ export function StatisticsModal({ isOpen, onClose, linkId }: StatisticsModalProp
</span> </span>
{source.source} {source.source}
</span> </span>
<span className="text-sm font-medium"> <span className="text-sm font-medium">{source.count} clicks</span>
{source.count} clicks
</span>
</li> </li>
))} ))}
</ul> </ul>