Add UniqueSessions component to display unique session count

This commit is contained in:
Yash 2025-12-07 17:28:00 +05:30
parent 81e27fc18c
commit 0e5e59ad79
2 changed files with 33 additions and 1 deletions

View file

@ -4,6 +4,7 @@ import { FilterBar } from '@/components/input/FilterBar';
import { MonthFilter } from '@/components/input/MonthFilter'; import { MonthFilter } from '@/components/input/MonthFilter';
import { WebsiteDateFilter } from '@/components/input/WebsiteDateFilter'; import { WebsiteDateFilter } from '@/components/input/WebsiteDateFilter';
import { WebsiteFilterButton } from '@/components/input/WebsiteFilterButton'; import { WebsiteFilterButton } from '@/components/input/WebsiteFilterButton';
import UniqueSessions from '@/components/metrics/UniqueSessions';
export function WebsiteControls({ export function WebsiteControls({
websiteId, websiteId,
@ -23,8 +24,9 @@ export function WebsiteControls({
return ( return (
<Column gap> <Column gap>
<Grid columns={{ xs: '1fr', md: 'auto 1fr' }} gap> <Grid columns={{ xs: '1fr', md: 'auto 1fr' }} gap>
<Row alignItems="center" justifyContent="flex-start"> <Row alignItems="center" justifyContent="flex-start" gap="4">
{allowFilter ? <WebsiteFilterButton websiteId={websiteId} /> : <div />} {allowFilter ? <WebsiteFilterButton websiteId={websiteId} /> : <div />}
<UniqueSessions websiteId={websiteId} />
</Row> </Row>
<Row alignItems="center" justifyContent={{ xs: 'flex-start', md: 'flex-end' }}> <Row alignItems="center" justifyContent={{ xs: 'flex-start', md: 'flex-end' }}>
{allowDateFilter && ( {allowDateFilter && (

View file

@ -0,0 +1,30 @@
import { Container, Text } from '@umami/react-zen';
import { useMemo } from 'react';
import { useWebsiteEventsQuery } from '@/components/hooks';
const UniqueSessions = ({ websiteId }) => {
const query = useWebsiteEventsQuery(websiteId, { view: 'all' });
const uniqueSessionCount = useMemo(() => {
if (!query?.data?.data) return 0;
const uniqueSessions = new Set(query.data.data.map((event: any) => event.sessionId));
return uniqueSessions.size;
}, [query?.data?.data]);
return (
<Container className="flex items-center gap-8">
<Text size="5" color="gray">
{' '}
Unique Sessions:{' '}
</Text>
<Text size="5" className="text-white" weight="bold">
{' '}
{uniqueSessionCount}{' '}
</Text>
</Container>
);
};
export default UniqueSessions;