feat: add events page filters

This commit is contained in:
PirvuCatalin 2025-05-12 18:31:22 +03:00
parent 12cf66861c
commit 1f01c06787
2 changed files with 28 additions and 4 deletions

View file

@ -5,8 +5,18 @@ import MetricCard from '@/components/metrics/MetricCard';
import MetricsBar from '@/components/metrics/MetricsBar'; import MetricsBar from '@/components/metrics/MetricsBar';
import { formatLongNumber } from '@/lib/format'; import { formatLongNumber } from '@/lib/format';
import { Flexbox } from 'react-basics'; import { Flexbox } from 'react-basics';
import WebsiteFilterButton from '../WebsiteFilterButton';
import styles from '../WebsiteMetricsBar.module.css';
export function EventsMetricsBar({ websiteId }: { websiteId: string }) { export function EventsMetricsBar({
websiteId,
compareMode = false,
showFilter = false,
}: {
websiteId: string;
compareMode?: boolean;
showFilter?: boolean;
}) {
const { formatMessage, labels } = useMessages(); const { formatMessage, labels } = useMessages();
const { data, isLoading, isFetched, error } = useWebsiteSessionStats(websiteId); const { data, isLoading, isFetched, error } = useWebsiteSessionStats(websiteId);
@ -34,7 +44,10 @@ export function EventsMetricsBar({ websiteId }: { websiteId: string }) {
formatValue={formatLongNumber} formatValue={formatLongNumber}
/> />
</MetricsBar> </MetricsBar>
<WebsiteDateFilter websiteId={websiteId} /> <div className={styles.actions}>
{showFilter && <WebsiteFilterButton websiteId={websiteId} />}
<WebsiteDateFilter websiteId={websiteId} showAllTime={!compareMode} />
</div>
</Flexbox> </Flexbox>
); );
} }

View file

@ -5,24 +5,35 @@ import EventsMetricsBar from './EventsMetricsBar';
import EventsChart from '@/components/metrics/EventsChart'; import EventsChart from '@/components/metrics/EventsChart';
import { GridRow } from '@/components/layout/Grid'; import { GridRow } from '@/components/layout/Grid';
import EventsTable from '@/components/metrics/EventsTable'; import EventsTable from '@/components/metrics/EventsTable';
import { useMessages } from '@/components/hooks'; import FilterTags from '@/components/metrics/FilterTags';
import { useMessages, useNavigation } from '@/components/hooks';
import { Item, Tabs } from 'react-basics'; import { Item, Tabs } from 'react-basics';
import { useState } from 'react'; import { useState } from 'react';
import EventProperties from './EventProperties'; import EventProperties from './EventProperties';
import { FILTER_COLUMNS } from '@/lib/constants';
export default function EventsPage({ websiteId }) { export default function EventsPage({ websiteId }) {
const [label, setLabel] = useState(null); const [label, setLabel] = useState(null);
const [tab, setTab] = useState('activity'); const [tab, setTab] = useState('activity');
const { formatMessage, labels } = useMessages(); const { formatMessage, labels } = useMessages();
const { query } = useNavigation();
const handleLabelClick = (value: string) => { const handleLabelClick = (value: string) => {
setLabel(value !== label ? value : ''); setLabel(value !== label ? value : '');
}; };
const params = Object.keys(query).reduce((obj, key) => {
if (FILTER_COLUMNS[key]) {
obj[key] = query[key];
}
return obj;
}, {});
return ( return (
<> <>
<WebsiteHeader websiteId={websiteId} /> <WebsiteHeader websiteId={websiteId} />
<EventsMetricsBar websiteId={websiteId} /> <FilterTags websiteId={websiteId} params={params} />
<EventsMetricsBar websiteId={websiteId} showFilter={true} />
<GridRow columns="two-one"> <GridRow columns="two-one">
<EventsChart websiteId={websiteId} focusLabel={label} /> <EventsChart websiteId={websiteId} focusLabel={label} />
<EventsTable <EventsTable