mirror of
https://github.com/umami-software/umami.git
synced 2026-02-04 04:37:11 +01:00
Add UniqueSessions component to display unique session count
This commit is contained in:
parent
81e27fc18c
commit
0e5e59ad79
2 changed files with 33 additions and 1 deletions
|
|
@ -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 && (
|
||||||
|
|
|
||||||
30
src/components/metrics/UniqueSessions.tsx
Normal file
30
src/components/metrics/UniqueSessions.tsx
Normal 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;
|
||||||
Loading…
Add table
Add a link
Reference in a new issue