diff --git a/src/app/(main)/websites/[websiteId]/WebsiteControls.tsx b/src/app/(main)/websites/[websiteId]/WebsiteControls.tsx index 6223dbc0..3d8103a0 100644 --- a/src/app/(main)/websites/[websiteId]/WebsiteControls.tsx +++ b/src/app/(main)/websites/[websiteId]/WebsiteControls.tsx @@ -4,6 +4,7 @@ import { FilterBar } from '@/components/input/FilterBar'; import { MonthFilter } from '@/components/input/MonthFilter'; import { WebsiteDateFilter } from '@/components/input/WebsiteDateFilter'; import { WebsiteFilterButton } from '@/components/input/WebsiteFilterButton'; +import UniqueVisitors from '@/components/metrics/UniqueVisitors'; export function WebsiteControls({ websiteId, @@ -23,8 +24,9 @@ export function WebsiteControls({ return ( - + {allowFilter ? :
} + {allowDateFilter && ( diff --git a/src/components/metrics/UniqueVisitors.tsx b/src/components/metrics/UniqueVisitors.tsx new file mode 100644 index 00000000..91505738 --- /dev/null +++ b/src/components/metrics/UniqueVisitors.tsx @@ -0,0 +1,42 @@ +import { Loading, Row, Text } from '@umami/react-zen'; +import { useMessages, useWebsiteStatsQuery } from '@/components/hooks'; + +interface UniqueVisitorsProps { + websiteId: string; +} + +const UniqueVisitors = ({ websiteId }: UniqueVisitorsProps) => { + const { data, isLoading, error } = useWebsiteStatsQuery(websiteId); + const { formatMessage, labels } = useMessages(); + + const renderContent = () => { + if (isLoading) { + return ; + } + + if (error) { + return ( + + Error loading data + + ); + } + + return ( + + {data?.visitors ?? 0} + + ); + }; + + return ( + + + {formatMessage(labels.visitors)}: + + {renderContent()} + + ); +}; + +export default UniqueVisitors;