'use client'; /** * Compact "Website at a glance" tile for the main sales dashboard. Shows * pageviews today + active visitors right now + a deep-link to the full * /website-analytics page. Soft-fails (renders nothing) when Umami isn't * configured for this port - so the dashboard doesn't get cluttered with * a "configure Umami" prompt that the user already saw on the dedicated * page. */ import Link from 'next/link'; import { Globe, ArrowRight } from 'lucide-react'; import { useUIStore } from '@/stores/ui-store'; import { Card } from '@/components/ui/card'; import { Skeleton } from '@/components/ui/skeleton'; import { useUmamiActive, useUmamiStats, } from '@/components/website-analytics/use-website-analytics'; export function WebsiteGlanceTile() { const portSlug = useUIStore((s) => s.currentPortSlug); const stats = useUmamiStats('today'); const active = useUmamiActive('today'); // Hide the tile entirely if Umami isn't configured - this dashboard is // for sales, not for prompting the operator into integration setup. // The API surfaces `notConfigured: true` on a 200 response so React // Query doesn't retry-loop (a prior 409-throw caused server hangs). if (stats.data?.notConfigured || active.data?.notConfigured) { return null; } const today = stats.data?.data?.pageviews?.value ?? 0; const activeNow = active.data?.data?.visitors ?? 0; const loading = stats.isLoading || active.isLoading; return (
Website today
{loading ? ( ) : (
{today.toLocaleString()} pageviews
)}
{activeNow} active right now
); }