diff --git a/components/dashboard/PeakHours.tsx b/components/dashboard/PeakHours.tsx index 60ccad2..0242531 100644 --- a/components/dashboard/PeakHours.tsx +++ b/components/dashboard/PeakHours.tsx @@ -26,6 +26,7 @@ export default function PeakHours({ siteId, dateRange }: PeakHoursProps) { const [animKey, setAnimKey] = useState(0) const [hovered, setHovered] = useState<{ day: number; hour: number } | null>(null) const [tooltipPos, setTooltipPos] = useState<{ x: number; y: number } | null>(null) + const [blobMode, setBlobMode] = useState(false) const gridRef = useRef(null) useEffect(() => { @@ -81,10 +82,8 @@ export default function PeakHours({ siteId, dateRange }: PeakHoursProps) { if (!hovered) return null const { day, hour } = hovered const value = grid[day][hour] - const dayTotal = dayTotals[day] - const hourTotal = hourTotals[hour] const pct = weekTotal > 0 ? Math.round((value / weekTotal) * 100) : 0 - return { value, dayTotal, hourTotal, pct } + return { value, dayTotal: dayTotals[day], hourTotal: hourTotals[hour], pct } }, [hovered, grid, dayTotals, hourTotals, weekTotal]) const handleCellMouseEnter = ( @@ -107,6 +106,18 @@ export default function PeakHours({ siteId, dateRange }: PeakHoursProps) {

Peak Hours

+ {hasData && !isLoading && ( + + )}

When your visitors are most active @@ -129,31 +140,54 @@ export default function PeakHours({ siteId, dateRange }: PeakHoursProps) { {DAYS[dayIdx]} -

+
{hours.map((value, hour) => { const isHoveredCell = hovered?.day === dayIdx && hovered?.hour === hour + const isBestCell = bestTime?.day === dayIdx && bestTime?.hour === hour + + const bgColor = value === 0 + ? (blobMode ? 'rgba(253,94,15,0.0)' : 'rgba(253,94,15,0.07)') + : `rgba(253,94,15,${Math.max(blobMode ? 0.25 : 0.15, (value / max) * (blobMode ? 1 : 0.92))})` return ( handleCellMouseEnter(e, dayIdx, hour)} @@ -209,9 +243,10 @@ export default function PeakHours({ siteId, dateRange }: PeakHoursProps) { {tooltipData.pct}% of week's traffic
- {/* Arrow */} -
+
)}