diff --git a/src/app/(main)/websites/[websiteId]/WebsiteChartList.tsx b/src/app/(main)/websites/[websiteId]/WebsiteChartList.tsx
index b27f9870d..e1a1ed81d 100644
--- a/src/app/(main)/websites/[websiteId]/WebsiteChartList.tsx
+++ b/src/app/(main)/websites/[websiteId]/WebsiteChartList.tsx
@@ -1,12 +1,13 @@
-import { Button, Text, Icon, Icons } from 'react-basics';
-import { useMemo } from 'react';
-import { firstBy } from 'thenby';
-import Link from 'next/link';
-import WebsiteChart from './WebsiteChart';
+import { useLocale, useMessages, useTeamUrl } from '@/components/hooks';
import useDashboard from '@/store/dashboard';
+import Link from 'next/link';
+import { useMemo } from 'react';
+import { Button, Icon, Icons, Text } from 'react-basics';
+import { firstBy } from 'thenby';
+import WebsiteChart from './WebsiteChart';
import WebsiteHeader from './WebsiteHeader';
+import { WebsiteMetrics } from './WebsiteMetrics';
import { WebsiteMetricsBar } from './WebsiteMetricsBar';
-import { useMessages, useLocale, useTeamUrl } from '@/components/hooks';
export default function WebsiteChartList({
websites,
@@ -46,7 +47,9 @@ export default function WebsiteChartList({
-
+
+
+
{showCharts && }
) : null;
diff --git a/src/app/(main)/websites/[websiteId]/WebsiteDetailsPage.tsx b/src/app/(main)/websites/[websiteId]/WebsiteDetailsPage.tsx
index 460792efc..d3dc3209f 100644
--- a/src/app/(main)/websites/[websiteId]/WebsiteDetailsPage.tsx
+++ b/src/app/(main)/websites/[websiteId]/WebsiteDetailsPage.tsx
@@ -1,13 +1,14 @@
'use client';
-import { usePathname } from 'next/navigation';
-import FilterTags from '@/components/metrics/FilterTags';
import { useNavigation } from '@/components/hooks';
+import FilterTags from '@/components/metrics/FilterTags';
+import { FILTER_COLUMNS } from '@/lib/constants';
+import { usePathname } from 'next/navigation';
import WebsiteChart from './WebsiteChart';
import WebsiteExpandedView from './WebsiteExpandedView';
import WebsiteHeader from './WebsiteHeader';
+import { WebsiteMetrics } from './WebsiteMetrics';
import WebsiteMetricsBar from './WebsiteMetricsBar';
import WebsiteTableView from './WebsiteTableView';
-import { FILTER_COLUMNS } from '@/lib/constants';
export default function WebsiteDetailsPage({ websiteId }: { websiteId: string }) {
const pathname = usePathname();
@@ -27,7 +28,9 @@ export default function WebsiteDetailsPage({ websiteId }: { websiteId: string })
<>
-
+
+
+
{!view && }
{view && }
diff --git a/src/app/(main)/websites/[websiteId]/WebsiteMetricsBar.module.css b/src/app/(main)/websites/[websiteId]/WebsiteMetrics.module.css
similarity index 100%
rename from src/app/(main)/websites/[websiteId]/WebsiteMetricsBar.module.css
rename to src/app/(main)/websites/[websiteId]/WebsiteMetrics.module.css
diff --git a/src/app/(main)/websites/[websiteId]/WebsiteMetrics.tsx b/src/app/(main)/websites/[websiteId]/WebsiteMetrics.tsx
new file mode 100644
index 000000000..a45b7623a
--- /dev/null
+++ b/src/app/(main)/websites/[websiteId]/WebsiteMetrics.tsx
@@ -0,0 +1,65 @@
+import { useMessages, useSticky } from '@/components/hooks';
+import WebsiteDateFilter from '@/components/input/WebsiteDateFilter';
+import useStore, { setWebsiteDateCompare } from '@/store/websites';
+import classNames from 'classnames';
+import { ReactNode } from 'react';
+import { Dropdown, Item } from 'react-basics';
+import WebsiteFilterButton from './WebsiteFilterButton';
+import styles from './WebsiteMetrics.module.css';
+
+export function WebsiteMetrics({
+ websiteId,
+ sticky,
+ compareMode = false,
+ showFilter = false,
+ children,
+}: {
+ websiteId: string;
+ sticky?: boolean;
+ showChange?: boolean;
+ compareMode?: boolean;
+ showFilter?: boolean;
+ children?: ReactNode;
+}) {
+ const { formatMessage, labels } = useMessages();
+ const { ref, isSticky } = useSticky({ enabled: sticky });
+ const dateCompare = useStore(state => state[websiteId]?.dateCompare);
+
+ const items = [
+ { label: formatMessage(labels.previousPeriod), value: 'prev' },
+ { label: formatMessage(labels.previousYear), value: 'yoy' },
+ ];
+
+ return (
+
+
{children}
+
+ {showFilter &&
}
+
+ {compareMode && (
+
+ VS
+ items.find(i => i.value === value)?.label}
+ alignment="end"
+ onChange={(value: any) => setWebsiteDateCompare(websiteId, value)}
+ >
+ {items.map(({ label, value }) => (
+ - {label}
+ ))}
+
+
+ )}
+
+
+ );
+}
diff --git a/src/app/(main)/websites/[websiteId]/WebsiteMetricsBar.tsx b/src/app/(main)/websites/[websiteId]/WebsiteMetricsBar.tsx
index f206d3c9e..70ada7600 100644
--- a/src/app/(main)/websites/[websiteId]/WebsiteMetricsBar.tsx
+++ b/src/app/(main)/websites/[websiteId]/WebsiteMetricsBar.tsx
@@ -1,21 +1,14 @@
-import { Dropdown, Item } from 'react-basics';
-import classNames from 'classnames';
-import { useDateRange, useMessages, useSticky } from '@/components/hooks';
-import WebsiteDateFilter from '@/components/input/WebsiteDateFilter';
+import { useDateRange, useMessages } from '@/components/hooks';
+import useWebsiteStats from '@/components/hooks/queries/useWebsiteStats';
import MetricCard from '@/components/metrics/MetricCard';
import MetricsBar from '@/components/metrics/MetricsBar';
-import { formatShortTime, formatLongNumber } from '@/lib/format';
-import useWebsiteStats from '@/components/hooks/queries/useWebsiteStats';
-import useStore, { setWebsiteDateCompare } from '@/store/websites';
-import WebsiteFilterButton from './WebsiteFilterButton';
-import styles from './WebsiteMetricsBar.module.css';
+import { formatLongNumber, formatShortTime } from '@/lib/format';
+import useStore from '@/store/websites';
export function WebsiteMetricsBar({
websiteId,
- sticky,
showChange = false,
compareMode = false,
- showFilter = false,
}: {
websiteId: string;
sticky?: boolean;
@@ -26,7 +19,6 @@ export function WebsiteMetricsBar({
const { dateRange } = useDateRange(websiteId);
const { formatMessage, labels } = useMessages();
const dateCompare = useStore(state => state[websiteId]?.dateCompare);
- const { ref, isSticky } = useSticky({ enabled: sticky });
const { data, isLoading, isFetched, error } = useWebsiteStats(
websiteId,
compareMode && dateCompare,
@@ -76,60 +68,24 @@ export function WebsiteMetricsBar({
]
: [];
- const items = [
- { label: formatMessage(labels.previousPeriod), value: 'prev' },
- { label: formatMessage(labels.previousYear), value: 'yoy' },
- ];
-
return (
-
+ {metrics.map(({ label, value, prev, change, formatValue, reverseColors }) => {
+ return (
+
+ );
})}
- >
-
-
- {metrics.map(({ label, value, prev, change, formatValue, reverseColors }) => {
- return (
-
- );
- })}
-
-
-
- {showFilter &&
}
-
- {compareMode && (
-
- VS
- items.find(i => i.value === value)?.label}
- alignment="end"
- onChange={(value: any) => setWebsiteDateCompare(websiteId, value)}
- >
- {items.map(({ label, value }) => (
- - {label}
- ))}
-
-
- )}
-
-
+
);
}
diff --git a/src/app/(main)/websites/[websiteId]/compare/WebsiteComparePage.tsx b/src/app/(main)/websites/[websiteId]/compare/WebsiteComparePage.tsx
index 10a2eed15..fd04ad968 100644
--- a/src/app/(main)/websites/[websiteId]/compare/WebsiteComparePage.tsx
+++ b/src/app/(main)/websites/[websiteId]/compare/WebsiteComparePage.tsx
@@ -1,10 +1,11 @@
'use client';
-import WebsiteHeader from '../WebsiteHeader';
-import WebsiteMetricsBar from '../WebsiteMetricsBar';
-import FilterTags from '@/components/metrics/FilterTags';
import { useNavigation } from '@/components/hooks';
+import FilterTags from '@/components/metrics/FilterTags';
import { FILTER_COLUMNS } from '@/lib/constants';
import WebsiteChart from '../WebsiteChart';
+import WebsiteHeader from '../WebsiteHeader';
+import { WebsiteMetrics } from '../WebsiteMetrics';
+import WebsiteMetricsBar from '../WebsiteMetricsBar';
import WebsiteCompareTables from './WebsiteCompareTables';
export function WebsiteComparePage({ websiteId }) {
@@ -21,7 +22,9 @@ export function WebsiteComparePage({ websiteId }) {
<>
-
+
+
+
>
diff --git a/src/app/(main)/websites/[websiteId]/events/EventsMetricsBar.tsx b/src/app/(main)/websites/[websiteId]/events/EventsMetricsBar.tsx
index e90a7790a..0a532f6e8 100644
--- a/src/app/(main)/websites/[websiteId]/events/EventsMetricsBar.tsx
+++ b/src/app/(main)/websites/[websiteId]/events/EventsMetricsBar.tsx
@@ -1,41 +1,36 @@
import { useMessages } from '@/components/hooks';
import useWebsiteSessionStats from '@/components/hooks/queries/useWebsiteSessionStats';
-import WebsiteDateFilter from '@/components/input/WebsiteDateFilter';
import MetricCard from '@/components/metrics/MetricCard';
import MetricsBar from '@/components/metrics/MetricsBar';
import { formatLongNumber } from '@/lib/format';
-import { Flexbox } from 'react-basics';
export function EventsMetricsBar({ websiteId }: { websiteId: string }) {
const { formatMessage, labels } = useMessages();
const { data, isLoading, isFetched, error } = useWebsiteSessionStats(websiteId);
return (
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
);
}
diff --git a/src/app/(main)/websites/[websiteId]/events/EventsPage.tsx b/src/app/(main)/websites/[websiteId]/events/EventsPage.tsx
index cf4c19ef4..4ac4ad0b3 100644
--- a/src/app/(main)/websites/[websiteId]/events/EventsPage.tsx
+++ b/src/app/(main)/websites/[websiteId]/events/EventsPage.tsx
@@ -1,14 +1,15 @@
'use client';
+import { useMessages } from '@/components/hooks';
+import { GridRow } from '@/components/layout/Grid';
+import EventsChart from '@/components/metrics/EventsChart';
+import MetricsTable from '@/components/metrics/MetricsTable';
+import { useState } from 'react';
+import { Item, Tabs } from 'react-basics';
import WebsiteHeader from '../WebsiteHeader';
+import { WebsiteMetrics } from '../WebsiteMetrics';
+import EventProperties from './EventProperties';
import EventsDataTable from './EventsDataTable';
import EventsMetricsBar from './EventsMetricsBar';
-import EventsChart from '@/components/metrics/EventsChart';
-import { GridRow } from '@/components/layout/Grid';
-import MetricsTable from '@/components/metrics/MetricsTable';
-import { useMessages } from '@/components/hooks';
-import { Item, Tabs } from 'react-basics';
-import { useState } from 'react';
-import EventProperties from './EventProperties';
export default function EventsPage({ websiteId }) {
const [tab, setTab] = useState('activity');
@@ -17,7 +18,9 @@ export default function EventsPage({ websiteId }) {
return (
<>
-
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
);
}
diff --git a/src/app/(main)/websites/[websiteId]/sessions/SessionsPage.tsx b/src/app/(main)/websites/[websiteId]/sessions/SessionsPage.tsx
index 2ee044db6..b73b46e44 100644
--- a/src/app/(main)/websites/[websiteId]/sessions/SessionsPage.tsx
+++ b/src/app/(main)/websites/[websiteId]/sessions/SessionsPage.tsx
@@ -1,13 +1,14 @@
'use client';
+import { useMessages } from '@/components/hooks';
+import { GridRow } from '@/components/layout/Grid';
+import WorldMap from '@/components/metrics/WorldMap';
+import { useState } from 'react';
+import { Item, Tabs } from 'react-basics';
import WebsiteHeader from '../WebsiteHeader';
+import { WebsiteMetrics } from '../WebsiteMetrics';
+import SessionProperties from './SessionProperties';
import SessionsDataTable from './SessionsDataTable';
import SessionsMetricsBar from './SessionsMetricsBar';
-import SessionProperties from './SessionProperties';
-import WorldMap from '@/components/metrics/WorldMap';
-import { GridRow } from '@/components/layout/Grid';
-import { Item, Tabs } from 'react-basics';
-import { useState } from 'react';
-import { useMessages } from '@/components/hooks';
import SessionsWeekly from './SessionsWeekly';
export function SessionsPage({ websiteId }) {
@@ -17,7 +18,9 @@ export function SessionsPage({ websiteId }) {
return (
<>
-
+
+
+