diff --git a/src/app/(main)/App.tsx b/src/app/(main)/App.tsx
index 92228397..470856a0 100644
--- a/src/app/(main)/App.tsx
+++ b/src/app/(main)/App.tsx
@@ -6,10 +6,10 @@ import { UpdateNotice } from './UpdateNotice';
import { Nav } from '@/app/(main)/Nav';
import { MenuBar } from '@/app/(main)/MenuBar';
import { Page } from '@/components/layout/Page';
-import { useLogin, useConfig } from '@/components/hooks';
+import { useLoginQuery, useConfig } from '@/components/hooks';
export function App({ children }) {
- const { user, isLoading, error } = useLogin();
+ const { user, isLoading, error } = useLoginQuery();
const config = useConfig();
const pathname = usePathname();
diff --git a/src/app/(main)/MenuBar.tsx b/src/app/(main)/MenuBar.tsx
index 2dcf0a0e..60b6096b 100644
--- a/src/app/(main)/MenuBar.tsx
+++ b/src/app/(main)/MenuBar.tsx
@@ -17,6 +17,7 @@ export function MenuBar(props: RowProps) {
paddingY="3"
paddingX="3"
paddingRight="5"
+ backgroundColor="1"
>
+
+ >
);
}
diff --git a/src/app/(main)/websites/[websiteId]/WebsiteMetricsBar.tsx b/src/app/(main)/websites/[websiteId]/WebsiteMetricsBar.tsx
index a4b71701..912aeee4 100644
--- a/src/app/(main)/websites/[websiteId]/WebsiteMetricsBar.tsx
+++ b/src/app/(main)/websites/[websiteId]/WebsiteMetricsBar.tsx
@@ -5,7 +5,7 @@ import { WebsiteDateFilter } from '@/components/input/WebsiteDateFilter';
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 { useWebsiteStatsQuery } from '@/components/hooks/queries/useWebsiteStatsQuery';
import { useWebsites, setWebsiteDateCompare } from '@/store/websites';
import { WebsiteFilterButton } from './WebsiteFilterButton';
import styles from './WebsiteMetricsBar.module.css';
@@ -26,8 +26,8 @@ export function WebsiteMetricsBar({
const { dateRange } = useDateRange(websiteId);
const { formatMessage, labels } = useMessages();
const dateCompare = useWebsites(state => state[websiteId]?.dateCompare);
- const { ref, isSticky } = useSticky({ enabled: sticky });
- const { data, isLoading, isFetched, error } = useWebsiteStats(
+ const { ref } = useSticky({ enabled: sticky });
+ const { data, isLoading, isFetched, error } = useWebsiteStatsQuery(
websiteId,
compareMode && dateCompare,
);
@@ -82,13 +82,7 @@ export function WebsiteMetricsBar({
];
return (
-
+
{metrics.map(({ label, value, prev, change, formatValue, reverseColors }) => {
diff --git a/src/app/(main)/websites/[websiteId]/WebsiteProvider.tsx b/src/app/(main)/websites/[websiteId]/WebsiteProvider.tsx
index 4c11e2e9..27cbe386 100644
--- a/src/app/(main)/websites/[websiteId]/WebsiteProvider.tsx
+++ b/src/app/(main)/websites/[websiteId]/WebsiteProvider.tsx
@@ -1,6 +1,6 @@
'use client';
import { createContext, ReactNode, useEffect } from 'react';
-import { useModified, useWebsite } from '@/components/hooks';
+import { useModified, useWebsiteQuery } from '@/components/hooks';
import { Loading } from '@umami/react-zen';
export const WebsiteContext = createContext(null);
@@ -13,7 +13,7 @@ export function WebsiteProvider({
children: ReactNode;
}) {
const { modified } = useModified(`website:${websiteId}`);
- const { data: website, isFetching, isLoading, refetch } = useWebsite(websiteId);
+ const { data: website, isFetching, isLoading, refetch } = useWebsiteQuery(websiteId);
useEffect(() => {
if (modified) {
diff --git a/src/app/(main)/websites/[websiteId]/WebsiteTabs.tsx b/src/app/(main)/websites/[websiteId]/WebsiteTabs.tsx
new file mode 100644
index 00000000..373b3b8e
--- /dev/null
+++ b/src/app/(main)/websites/[websiteId]/WebsiteTabs.tsx
@@ -0,0 +1,58 @@
+import { Tabs, TabList, Tab, Icon, Text, Row } from '@umami/react-zen';
+import { Icons } from '@/components/icons';
+import { useMessages, useNavigation } from '@/components/hooks';
+
+export function WebsiteTabs({ websiteId }: { websiteId: string }) {
+ const { formatMessage, labels } = useMessages();
+ const { renderTeamUrl } = useNavigation();
+
+ const links = [
+ {
+ label: formatMessage(labels.overview),
+ icon: ,
+ path: '',
+ },
+ {
+ label: formatMessage(labels.events),
+ icon: ,
+ path: '/events',
+ },
+ {
+ label: formatMessage(labels.sessions),
+ icon: ,
+ path: '/sessions',
+ },
+ {
+ label: formatMessage(labels.realtime),
+ icon: ,
+ path: '/realtime',
+ },
+ {
+ label: formatMessage(labels.compare),
+ icon: ,
+ path: '/compare',
+ },
+ {
+ label: formatMessage(labels.reports),
+ icon: ,
+ path: '/reports',
+ },
+ ].map((link, index) => ({ ...link, id: index }));
+
+ return (
+
+
+ {({ label, icon, path }) => {
+ return (
+
+
+ {icon}
+ {label}
+
+
+ );
+ }}
+
+
+ );
+}
diff --git a/src/app/(main)/websites/[websiteId]/events/EventProperties.tsx b/src/app/(main)/websites/[websiteId]/events/EventProperties.tsx
index 53443397..e4cc16a3 100644
--- a/src/app/(main)/websites/[websiteId]/events/EventProperties.tsx
+++ b/src/app/(main)/websites/[websiteId]/events/EventProperties.tsx
@@ -1,5 +1,9 @@
-import { GridColumn, GridTable } from '@umami/react-zen';
-import { useEventDataProperties, useEventDataValues, useMessages } from '@/components/hooks';
+import { DataColumn, DataTable } from '@umami/react-zen';
+import {
+ useEventDataPropertiesQuery,
+ useEventDataValuesQuery,
+ useMessages,
+} from '@/components/hooks';
import { LoadingPanel } from '@/components/common/LoadingPanel';
import { PieChart } from '@/components/charts/PieChart';
import { useState } from 'react';
@@ -10,8 +14,8 @@ export function EventProperties({ websiteId }: { websiteId: string }) {
const [propertyName, setPropertyName] = useState('');
const [eventName, setEventName] = useState('');
const { formatMessage, labels } = useMessages();
- const { data, isLoading, isFetched, error } = useEventDataProperties(websiteId);
- const { data: values } = useEventDataValues(websiteId, eventName, propertyName);
+ const { data, isLoading, isFetched, error } = useEventDataPropertiesQuery(websiteId);
+ const { data: values } = useEventDataValuesQuery(websiteId, eventName, propertyName);
const chartData =
propertyName && values
? {
@@ -34,23 +38,23 @@ export function EventProperties({ websiteId }: { websiteId: string }) {
return (
-
-
+
+
{row => (
handleRowClick(row)}>
{row.eventName}
)}
-
-
+
+
{row => (
handleRowClick(row)}>
{row.propertyName}
)}
-
-
-
+
+
+
{propertyName && (
{propertyName}
diff --git a/src/app/(main)/websites/[websiteId]/events/EventsDataTable.tsx b/src/app/(main)/websites/[websiteId]/events/EventsDataTable.tsx
index d17406c7..d8c23476 100644
--- a/src/app/(main)/websites/[websiteId]/events/EventsDataTable.tsx
+++ b/src/app/(main)/websites/[websiteId]/events/EventsDataTable.tsx
@@ -1,4 +1,4 @@
-import { useWebsiteEvents } from '@/components/hooks';
+import { useWebsiteEventsQuery } from '@/components/hooks';
import { EventsTable } from './EventsTable';
import { DataGrid } from '@/components/common/DataGrid';
import { ReactNode } from 'react';
@@ -10,7 +10,7 @@ export function EventsDataTable({
teamId?: string;
children?: ReactNode;
}) {
- const queryResult = useWebsiteEvents(websiteId);
+ const queryResult = useWebsiteEventsQuery(websiteId);
return (
diff --git a/src/app/(main)/websites/[websiteId]/events/EventsMetricsBar.tsx b/src/app/(main)/websites/[websiteId]/events/EventsMetricsBar.tsx
index 9aa92140..3099898f 100644
--- a/src/app/(main)/websites/[websiteId]/events/EventsMetricsBar.tsx
+++ b/src/app/(main)/websites/[websiteId]/events/EventsMetricsBar.tsx
@@ -1,5 +1,5 @@
import { useMessages } from '@/components/hooks';
-import { useWebsiteSessionStats } from '@/components/hooks/queries/useWebsiteSessionStats';
+import { useWebsiteSessionStatsQuery } from '@/components/hooks/queries/useWebsiteSessionStatsQuery';
import { WebsiteDateFilter } from '@/components/input/WebsiteDateFilter';
import { MetricCard } from '@/components/metrics/MetricCard';
import { MetricsBar } from '@/components/metrics/MetricsBar';
@@ -8,7 +8,7 @@ import { Flexbox } from '@umami/react-zen';
export function EventsMetricsBar({ websiteId }: { websiteId: string }) {
const { formatMessage, labels } = useMessages();
- const { data, isLoading, isFetched, error } = useWebsiteSessionStats(websiteId);
+ const { data, isLoading, isFetched, error } = useWebsiteSessionStatsQuery(websiteId);
return (
diff --git a/src/app/(main)/websites/[websiteId]/events/EventsPage.tsx b/src/app/(main)/websites/[websiteId]/events/EventsPage.tsx
index 17f67e86..dd3f823d 100644
--- a/src/app/(main)/websites/[websiteId]/events/EventsPage.tsx
+++ b/src/app/(main)/websites/[websiteId]/events/EventsPage.tsx
@@ -6,7 +6,7 @@ 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 '@umami/react-zen';
+import { TabList, Tab, Tabs } from '@umami/react-zen';
import { useState } from 'react';
import { EventProperties } from './EventProperties';
@@ -30,11 +30,13 @@ export function EventsPage({ websiteId }) {
setTab(value)}
+ onSelectionChange={(value: any) => setTab(value)}
style={{ marginBottom: 30 }}
>
- - {formatMessage(labels.activity)}
- - {formatMessage(labels.properties)}
+
+ {formatMessage(labels.activity)}
+ {formatMessage(labels.properties)}
+
{tab === 'activity' &&
}
{tab === 'properties' &&
}
diff --git a/src/app/(main)/websites/[websiteId]/events/EventsTable.tsx b/src/app/(main)/websites/[websiteId]/events/EventsTable.tsx
index b5c9165f..8428ff60 100644
--- a/src/app/(main)/websites/[websiteId]/events/EventsTable.tsx
+++ b/src/app/(main)/websites/[websiteId]/events/EventsTable.tsx
@@ -1,5 +1,5 @@
-import { GridTable, GridColumn, Icon } from '@umami/react-zen';
-import { useMessages, useTeamUrl, useTimezone } from '@/components/hooks';
+import { DataTable, DataColumn, Icon } from '@umami/react-zen';
+import { useMessages, useNavigation, useTimezone } from '@/components/hooks';
import { Empty } from '@/components/common/Empty';
import { Avatar } from '@/components/common/Avatar';
import Link from 'next/link';
@@ -8,23 +8,23 @@ import { Icons } from '@/components/icons';
export function EventsTable({ data = [] }) {
const { formatTimezoneDate } = useTimezone();
const { formatMessage, labels } = useMessages();
- const { renderTeamUrl } = useTeamUrl();
+ const { renderTeamUrl } = useNavigation();
if (data.length === 0) {
return
;
}
return (
-
-
- {row => (
+
+
+ {(row: any) => (
)}
-
-
- {row => {
+
+
+ {(row: any) => {
return (
<>
{row.eventName ? : }
@@ -33,10 +33,10 @@ export function EventsTable({ data = [] }) {
>
);
}}
-
-
- {row => formatTimezoneDate(row.createdAt, 'PPPpp')}
-
-
+
+
+ {(row: any) => formatTimezoneDate(row.createdAt, 'PPPpp')}
+
+
);
}
diff --git a/src/app/(main)/websites/[websiteId]/realtime/RealtimeUrls.tsx b/src/app/(main)/websites/[websiteId]/realtime/RealtimeUrls.tsx
index 12528f62..0e130f3c 100644
--- a/src/app/(main)/websites/[websiteId]/realtime/RealtimeUrls.tsx
+++ b/src/app/(main)/websites/[websiteId]/realtime/RealtimeUrls.tsx
@@ -1,5 +1,4 @@
import { Key, useContext, useState } from 'react';
-import { ButtonGroup, Button, Flexbox } from '@umami/react-zen';
import thenby from 'thenby';
import { percentFilter } from '@/lib/filters';
import { ListTable } from '@/components/metrics/ListTable';
@@ -7,6 +6,7 @@ import { FILTER_PAGES, FILTER_REFERRERS } from '@/lib/constants';
import { useMessages } from '@/components/hooks';
import { RealtimeData } from '@/lib/types';
import { WebsiteContext } from '../WebsiteProvider';
+import { FilterButtons } from '@/components/common/FilterButtons';
export function RealtimeUrls({ data }: { data: RealtimeData }) {
const website = useContext(WebsiteContext);
@@ -17,10 +17,12 @@ export function RealtimeUrls({ data }: { data: RealtimeData }) {
const buttons = [
{
+ id: 1,
label: formatMessage(labels.referrers),
key: FILTER_REFERRERS,
},
{
+ id: 2,
label: formatMessage(labels.pages),
key: FILTER_PAGES,
},
@@ -61,11 +63,7 @@ export function RealtimeUrls({ data }: { data: RealtimeData }) {
return (
<>
-
-
- {({ key, label }) => {label}}
-
-
+
{filter === FILTER_REFERRERS && (
;
diff --git a/src/app/(main)/websites/[websiteId]/reports/WebsiteReportsPage.tsx b/src/app/(main)/websites/[websiteId]/reports/WebsiteReportsPage.tsx
index 20e02a6a..37429dd1 100644
--- a/src/app/(main)/websites/[websiteId]/reports/WebsiteReportsPage.tsx
+++ b/src/app/(main)/websites/[websiteId]/reports/WebsiteReportsPage.tsx
@@ -1,13 +1,13 @@
'use client';
import Link from 'next/link';
import { Button, Flexbox, Icon, Icons, Text } from '@umami/react-zen';
-import { useMessages, useTeamUrl } from '@/components/hooks';
+import { useMessages, useNavigation } from '@/components/hooks';
import { WebsiteHeader } from '../WebsiteHeader';
import { ReportsDataTable } from '@/app/(main)/reports/ReportsDataTable';
export function WebsiteReportsPage({ websiteId }) {
const { formatMessage, labels } = useMessages();
- const { renderTeamUrl } = useTeamUrl();
+ const { renderTeamUrl } = useNavigation();
return (
<>
diff --git a/src/app/(main)/websites/[websiteId]/sessions/SessionProperties.tsx b/src/app/(main)/websites/[websiteId]/sessions/SessionProperties.tsx
index 7e2c5a9d..d4ad4099 100644
--- a/src/app/(main)/websites/[websiteId]/sessions/SessionProperties.tsx
+++ b/src/app/(main)/websites/[websiteId]/sessions/SessionProperties.tsx
@@ -1,5 +1,9 @@
-import { GridColumn, GridTable } from '@umami/react-zen';
-import { useSessionDataProperties, useSessionDataValues, useMessages } from '@/components/hooks';
+import { DataColumn, DataTable } from '@umami/react-zen';
+import {
+ useSessionDataPropertiesQuery,
+ useSessionDataValuesQuery,
+ useMessages,
+} from '@/components/hooks';
import { LoadingPanel } from '@/components/common/LoadingPanel';
import { PieChart } from '@/components/charts/PieChart';
import { useState } from 'react';
@@ -9,8 +13,8 @@ import styles from './SessionProperties.module.css';
export function SessionProperties({ websiteId }: { websiteId: string }) {
const [propertyName, setPropertyName] = useState('');
const { formatMessage, labels } = useMessages();
- const { data, isLoading, isFetched, error } = useSessionDataProperties(websiteId);
- const { data: values } = useSessionDataValues(websiteId, propertyName);
+ const { data, isLoading, isFetched, error } = useSessionDataPropertiesQuery(websiteId);
+ const { data: values } = useSessionDataValuesQuery(websiteId, propertyName);
const chartData =
propertyName && values
? {
@@ -28,16 +32,16 @@ export function SessionProperties({ websiteId }: { websiteId: string }) {
return (
-
-
- {row => (
+
+
+ {(row: any) => (
setPropertyName(row.propertyName)}>
{row.propertyName}
)}
-
-
-
+
+
+
{propertyName && (
{propertyName}
diff --git a/src/app/(main)/websites/[websiteId]/sessions/SessionsDataTable.tsx b/src/app/(main)/websites/[websiteId]/sessions/SessionsDataTable.tsx
index 6cc7eff4..65ef00d7 100644
--- a/src/app/(main)/websites/[websiteId]/sessions/SessionsDataTable.tsx
+++ b/src/app/(main)/websites/[websiteId]/sessions/SessionsDataTable.tsx
@@ -1,4 +1,4 @@
-import { useWebsiteSessions } from '@/components/hooks';
+import { useWebsiteSessionsQuery } from '@/components/hooks';
import { SessionsTable } from './SessionsTable';
import { DataGrid } from '@/components/common/DataGrid';
import { ReactNode } from 'react';
@@ -11,7 +11,7 @@ export function SessionsDataTable({
teamId?: string;
children?: ReactNode;
}) {
- const queryResult = useWebsiteSessions(websiteId);
+ const queryResult = useWebsiteSessionsQuery(websiteId);
return (
children}>
diff --git a/src/app/(main)/websites/[websiteId]/sessions/SessionsMetricsBar.tsx b/src/app/(main)/websites/[websiteId]/sessions/SessionsMetricsBar.tsx
index b1091010..717b2655 100644
--- a/src/app/(main)/websites/[websiteId]/sessions/SessionsMetricsBar.tsx
+++ b/src/app/(main)/websites/[websiteId]/sessions/SessionsMetricsBar.tsx
@@ -1,5 +1,5 @@
import { useMessages } from '@/components/hooks';
-import { useWebsiteSessionStats } from '@/components/hooks/queries/useWebsiteSessionStats';
+import { useWebsiteSessionStatsQuery } from '@/components/hooks/queries/useWebsiteSessionStatsQuery';
import { WebsiteDateFilter } from '@/components/input/WebsiteDateFilter';
import { MetricCard } from '@/components/metrics/MetricCard';
import { MetricsBar } from '@/components/metrics/MetricsBar';
@@ -8,7 +8,7 @@ import { Flexbox } from '@umami/react-zen';
export function SessionsMetricsBar({ websiteId }: { websiteId: string }) {
const { formatMessage, labels } = useMessages();
- const { data, isLoading, isFetched, error } = useWebsiteSessionStats(websiteId);
+ const { data, isLoading, isFetched, error } = useWebsiteSessionStatsQuery(websiteId);
return (
diff --git a/src/app/(main)/websites/[websiteId]/sessions/SessionsPage.tsx b/src/app/(main)/websites/[websiteId]/sessions/SessionsPage.tsx
index 5f18a9f0..16b2d309 100644
--- a/src/app/(main)/websites/[websiteId]/sessions/SessionsPage.tsx
+++ b/src/app/(main)/websites/[websiteId]/sessions/SessionsPage.tsx
@@ -5,7 +5,7 @@ import { SessionsMetricsBar } from './SessionsMetricsBar';
import { SessionProperties } from './SessionProperties';
import { WorldMap } from '@/components/metrics/WorldMap';
import { GridRow } from '@/components/layout/Grid';
-import { Item, Tabs } from '@umami/react-zen';
+import { TabList, Tab, Tabs } from '@umami/react-zen';
import { useState } from 'react';
import { useMessages } from '@/components/hooks';
import { SessionsWeekly } from './SessionsWeekly';
@@ -22,9 +22,15 @@ export function SessionsPage({ websiteId }) {
- setTab(value)} style={{ marginBottom: 30 }}>
- - {formatMessage(labels.activity)}
- - {formatMessage(labels.properties)}
+ setTab(value)}
+ style={{ marginBottom: 30 }}
+ >
+
+ {formatMessage(labels.activity)}
+ {formatMessage(labels.properties)}
+
{tab === 'activity' && }
{tab === 'properties' && }
diff --git a/src/app/(main)/websites/[websiteId]/sessions/SessionsTable.tsx b/src/app/(main)/websites/[websiteId]/sessions/SessionsTable.tsx
index d9c21319..4db25fbc 100644
--- a/src/app/(main)/websites/[websiteId]/sessions/SessionsTable.tsx
+++ b/src/app/(main)/websites/[websiteId]/sessions/SessionsTable.tsx
@@ -1,5 +1,5 @@
import Link from 'next/link';
-import { GridColumn, GridTable } from '@umami/react-zen';
+import { DataColumn, DataTable } from '@umami/react-zen';
import { useFormat, useMessages, useTimezone } from '@/components/hooks';
import { Avatar } from '@/components/common/Avatar';
import styles from './SessionsTable.module.css';
@@ -11,48 +11,48 @@ export function SessionsTable({ data = [] }: { data: any[]; showDomain?: boolean
const { formatValue } = useFormat();
return (
-
-
- {row => (
+
+
+ {(row: any) => (
)}
-
-
-
-
- {row => (
+
+
+
+
+ {(row: any) => (
{formatValue(row.country, 'country')}
)}
-
-
-
- {row => (
+
+
+
+ {(row: any) => (
{formatValue(row.browser, 'browser')}
)}
-
-
- {row => (
+
+
+ {(row: any) => (
{formatValue(row.os, 'os')}
)}
-
-
- {row => (
+
+
+ {(row: any) => (
{formatValue(row.device, 'device')}
)}
-
-
- {row => formatTimezoneDate(row.createdAt, 'PPPpp')}
-
-
+
+
+ {(row: any) => formatTimezoneDate(row.createdAt, 'PPPpp')}
+
+
);
}
diff --git a/src/app/(main)/websites/[websiteId]/sessions/SessionsWeekly.tsx b/src/app/(main)/websites/[websiteId]/sessions/SessionsWeekly.tsx
index 92ee3caa..cb95d4d7 100644
--- a/src/app/(main)/websites/[websiteId]/sessions/SessionsWeekly.tsx
+++ b/src/app/(main)/websites/[websiteId]/sessions/SessionsWeekly.tsx
@@ -1,13 +1,13 @@
import { format, startOfDay, addHours } from 'date-fns';
-import { useLocale, useMessages, useWebsiteSessionsWeekly } from '@/components/hooks';
+import { useLocale, useMessages, useWebsiteSessionsWeeklyQuery } from '@/components/hooks';
import { LoadingPanel } from '@/components/common/LoadingPanel';
import { getDayOfWeekAsDate } from '@/lib/date';
import styles from './SessionsWeekly.module.css';
import classNames from 'classnames';
-import { TooltipPopup } from '@umami/react-zen';
+import { Tooltip, TooltipTrigger } from '@umami/react-zen';
export function SessionsWeekly({ websiteId }: { websiteId: string }) {
- const { data, ...props } = useWebsiteSessionsWeekly(websiteId);
+ const { data, ...props } = useWebsiteSessionsWeeklyQuery(websiteId);
const { dateLocale } = useLocale();
const { labels, formatMessage } = useMessages();
const { weekStartsOn } = dateLocale.options;
@@ -67,15 +67,13 @@ export function SessionsWeekly({ websiteId }: { websiteId: string }) {
return (
{hour > 0 && (
-
+
-
+
{`${formatMessage(labels.visitors)}: ${hour}`}
+
)}
);
diff --git a/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionActivity.tsx b/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionActivity.tsx
index 73caa59a..a39ed919 100644
--- a/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionActivity.tsx
+++ b/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionActivity.tsx
@@ -1,7 +1,7 @@
import { isSameDay } from 'date-fns';
import { Loading, Icon, StatusLight } from '@umami/react-zen';
import { Icons } from '@/components/icons';
-import { useSessionActivity, useTimezone } from '@/components/hooks';
+import { useSessionActivityQuery, useTimezone } from '@/components/hooks';
import styles from './SessionActivity.module.css';
import { Fragment } from 'react';
@@ -17,7 +17,7 @@ export function SessionActivity({
endDate: Date;
}) {
const { formatTimezoneDate } = useTimezone();
- const { data, isLoading } = useSessionActivity(websiteId, sessionId, startDate, endDate);
+ const { data, isLoading } = useSessionActivityQuery(websiteId, sessionId, startDate, endDate);
if (isLoading) {
return ;
diff --git a/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionData.tsx b/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionData.tsx
index 0288f427..06d9555f 100644
--- a/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionData.tsx
+++ b/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionData.tsx
@@ -1,5 +1,5 @@
import { TextOverflow } from '@umami/react-zen';
-import { useMessages, useSessionData } from '@/components/hooks';
+import { useMessages, useSessionDataQuery } from '@/components/hooks';
import { Empty } from '@/components/common/Empty';
import { DATA_TYPES } from '@/lib/constants';
import styles from './SessionData.module.css';
@@ -7,7 +7,7 @@ import { LoadingPanel } from '@/components/common/LoadingPanel';
export function SessionData({ websiteId, sessionId }: { websiteId: string; sessionId: string }) {
const { formatMessage, labels } = useMessages();
- const { data, ...query } = useSessionData(websiteId, sessionId);
+ const { data, ...query } = useSessionDataQuery(websiteId, sessionId);
return (
<>
diff --git a/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionDetailsPage.tsx b/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionDetailsPage.tsx
index 99066344..766fd193 100644
--- a/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionDetailsPage.tsx
+++ b/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionDetailsPage.tsx
@@ -1,7 +1,7 @@
'use client';
import { Avatar } from '@/components/common/Avatar';
import { LoadingPanel } from '@/components/common/LoadingPanel';
-import { useWebsiteSession } from '@/components/hooks';
+import { useWebsiteSessionQuery } from '@/components/hooks';
import { WebsiteHeader } from '../../WebsiteHeader';
import { SessionActivity } from './SessionActivity';
import { SessionData } from './SessionData';
@@ -16,7 +16,7 @@ export function SessionDetailsPage({
websiteId: string;
sessionId: string;
}) {
- const { data, ...query } = useWebsiteSession(websiteId, sessionId);
+ const { data, ...query } = useWebsiteSessionQuery(websiteId, sessionId);
return (
diff --git a/src/app/share/[...shareId]/SharePage.tsx b/src/app/share/[...shareId]/SharePage.tsx
index 0830b8e4..c45ebcaa 100644
--- a/src/app/share/[...shareId]/SharePage.tsx
+++ b/src/app/share/[...shareId]/SharePage.tsx
@@ -1,6 +1,6 @@
'use client';
import { WebsiteDetailsPage } from '../../(main)/websites/[websiteId]/WebsiteDetailsPage';
-import { useShareToken } from '@/components/hooks';
+import { useShareTokenQuery } from '@/components/hooks';
import { Page } from '@/components/layout/Page';
import { Header } from './Header';
import { Footer } from './Footer';
@@ -8,7 +8,7 @@ import styles from './SharePage.module.css';
import { WebsiteProvider } from '@/app/(main)/websites/[websiteId]/WebsiteProvider';
export function SharePage({ shareId }) {
- const { shareToken, isLoading } = useShareToken(shareId);
+ const { shareToken, isLoading } = useShareTokenQuery(shareId);
if (isLoading || !shareToken) {
return null;
diff --git a/src/components/hooks/index.ts b/src/components/hooks/index.ts
index 7c16eeee..7b83cb18 100644
--- a/src/components/hooks/index.ts
+++ b/src/components/hooks/index.ts
@@ -1,32 +1,32 @@
-export * from './queries/useConfig';
-export * from './queries/useEventDataEvents';
-export * from './queries/useEventDataProperties';
-export * from './queries/useEventDataValues';
-export * from './queries/useLogin';
-export * from './queries/useRealtime';
-export * from './queries/useReport';
-export * from './queries/useReports';
-export * from './queries/useSessionActivity';
-export * from './queries/useSessionData';
-export * from './queries/useSessionDataProperties';
-export * from './queries/useSessionDataValues';
-export * from './queries/useWebsiteSession';
-export * from './queries/useWebsiteSessions';
-export * from './queries/useWebsiteSessionsWeekly';
-export * from './queries/useShareToken';
-export * from './queries/useTeam';
-export * from './queries/useTeams';
-export * from './queries/useTeamWebsites';
-export * from './queries/useTeamMembers';
-export * from './queries/useUser';
-export * from './queries/useUsers';
-export * from './queries/useWebsite';
+export * from './queries/useEventDataEventsQuery';
+export * from './queries/useEventDataPropertiesQuery';
+export * from './queries/useEventDataValuesQuery';
+export * from './queries/useLoginQuery';
+export * from './queries/useRealtimeQuery';
+export * from './queries/useReportQuery';
+export * from './queries/useReportsQuery';
+export * from './queries/useSessionActivityQuery';
+export * from './queries/useSessionDataQuery';
+export * from './queries/useSessionDataPropertiesQuery';
+export * from './queries/useSessionDataValuesQuery';
+export * from './queries/useWebsiteSessionQuery';
+export * from './queries/useWebsiteSessionsQuery';
+export * from './queries/useWebsiteSessionsWeeklyQuery';
+export * from './queries/useShareTokenQuery';
+export * from './queries/useTeamQuery';
+export * from './queries/useTeamsQuery';
+export * from './queries/useTeamWebsitesQuery';
+export * from './queries/useTeamMembersQuery';
+export * from './queries/useUserQuery';
+export * from './queries/useUsersQuery';
+export * from './queries/useWebsiteQuery';
export * from './queries/useWebsites';
-export * from './queries/useWebsiteEvents';
-export * from './queries/useWebsiteEventsSeries';
-export * from './queries/useWebsiteMetrics';
-export * from './queries/useWebsiteValues';
+export * from './queries/useWebsiteEventsQuery';
+export * from './queries/useWebsiteEventsSeriesQuery';
+export * from './queries/useWebsiteMetricsQuery';
+export * from './queries/useWebsiteValuesQuery';
export * from './useApi';
+export * from './useConfig';
export * from './useCountryNames';
export * from './useDateRange';
export * from './useDocumentClick';
@@ -39,10 +39,9 @@ export * from './useLanguageNames';
export * from './useLocale';
export * from './useMessages';
export * from './useModified';
-export * from './useNavigation';
export * from './usePagedQuery';
export * from './useRegionNames';
export * from './useSticky';
-export * from './useTeamUrl';
+export * from './useNavigation';
export * from './useTheme';
export * from './useTimezone';
diff --git a/src/components/hooks/queries/useEventDataEvents.ts b/src/components/hooks/queries/useEventDataEventsQuery.ts
similarity index 92%
rename from src/components/hooks/queries/useEventDataEvents.ts
rename to src/components/hooks/queries/useEventDataEventsQuery.ts
index b82126ba..b03906b5 100644
--- a/src/components/hooks/queries/useEventDataEvents.ts
+++ b/src/components/hooks/queries/useEventDataEventsQuery.ts
@@ -2,7 +2,7 @@ import { useApi } from '../useApi';
import { UseQueryOptions } from '@tanstack/react-query';
import { useFilterParams } from '../useFilterParams';
-export function useEventDataEvents(
+export function useEventDataEventsQuery(
websiteId: string,
options?: Omit,
) {
diff --git a/src/components/hooks/queries/useEventDataProperties.ts b/src/components/hooks/queries/useEventDataPropertiesQuery.ts
similarity index 92%
rename from src/components/hooks/queries/useEventDataProperties.ts
rename to src/components/hooks/queries/useEventDataPropertiesQuery.ts
index aaf9c559..97f422eb 100644
--- a/src/components/hooks/queries/useEventDataProperties.ts
+++ b/src/components/hooks/queries/useEventDataPropertiesQuery.ts
@@ -2,7 +2,7 @@ import { UseQueryOptions } from '@tanstack/react-query';
import { useApi } from '../useApi';
import { useFilterParams } from '../useFilterParams';
-export function useEventDataProperties(
+export function useEventDataPropertiesQuery(
websiteId: string,
options?: Omit,
) {
diff --git a/src/components/hooks/queries/useEventDataValues.ts b/src/components/hooks/queries/useEventDataValuesQuery.ts
similarity index 94%
rename from src/components/hooks/queries/useEventDataValues.ts
rename to src/components/hooks/queries/useEventDataValuesQuery.ts
index 2d4c58fd..cc9e55b5 100644
--- a/src/components/hooks/queries/useEventDataValues.ts
+++ b/src/components/hooks/queries/useEventDataValuesQuery.ts
@@ -2,7 +2,7 @@ import { UseQueryOptions } from '@tanstack/react-query';
import { useApi } from '../useApi';
import { useFilterParams } from '../useFilterParams';
-export function useEventDataValues(
+export function useEventDataValuesQuery(
websiteId: string,
eventName: string,
propertyName: string,
diff --git a/src/components/hooks/queries/useLogin.ts b/src/components/hooks/queries/useLoginQuery.ts
similarity index 94%
rename from src/components/hooks/queries/useLogin.ts
rename to src/components/hooks/queries/useLoginQuery.ts
index d06cc41c..19acff70 100644
--- a/src/components/hooks/queries/useLogin.ts
+++ b/src/components/hooks/queries/useLoginQuery.ts
@@ -4,7 +4,7 @@ import { useApi } from '../useApi';
const selector = (state: { user: any }) => state.user;
-export function useLogin(): {
+export function useLoginQuery(): {
user: any;
setUser: (data: any) => void;
} & UseQueryResult {
diff --git a/src/components/hooks/queries/useRealtime.ts b/src/components/hooks/queries/useRealtimeQuery.ts
similarity index 91%
rename from src/components/hooks/queries/useRealtime.ts
rename to src/components/hooks/queries/useRealtimeQuery.ts
index 997344b3..58e72ef5 100644
--- a/src/components/hooks/queries/useRealtime.ts
+++ b/src/components/hooks/queries/useRealtimeQuery.ts
@@ -3,7 +3,7 @@ import { REALTIME_INTERVAL } from '@/lib/constants';
import { RealtimeData } from '@/lib/types';
import { useApi } from '../useApi';
-export function useRealtime(websiteId: string) {
+export function useRealtimeQuery(websiteId: string) {
const { get, useQuery } = useApi();
const { timezone } = useTimezone();
const { data, isLoading, error } = useQuery({
diff --git a/src/components/hooks/queries/useReport.ts b/src/components/hooks/queries/useReportQuery.ts
similarity index 98%
rename from src/components/hooks/queries/useReport.ts
rename to src/components/hooks/queries/useReportQuery.ts
index 71cfba75..c5b139a5 100644
--- a/src/components/hooks/queries/useReport.ts
+++ b/src/components/hooks/queries/useReportQuery.ts
@@ -5,7 +5,7 @@ import { useTimezone } from '../useTimezone';
import { useMessages } from '../useMessages';
import { parseDateRange } from '@/lib/date';
-export function useReport(
+export function useReportQuery(
reportId: string,
defaultParameters?: { type: string; parameters: { [key: string]: any } },
) {
diff --git a/src/components/hooks/queries/useReports.ts b/src/components/hooks/queries/useReportsQuery.ts
similarity index 87%
rename from src/components/hooks/queries/useReports.ts
rename to src/components/hooks/queries/useReportsQuery.ts
index 628afd6c..3fafe1cd 100644
--- a/src/components/hooks/queries/useReports.ts
+++ b/src/components/hooks/queries/useReportsQuery.ts
@@ -2,7 +2,7 @@ import { useApi } from '../useApi';
import { usePagedQuery } from '../usePagedQuery';
import { useModified } from '../useModified';
-export function useReports({ websiteId, teamId }: { websiteId?: string; teamId?: string }) {
+export function useReportsQuery({ websiteId, teamId }: { websiteId?: string; teamId?: string }) {
const { modified } = useModified(`reports`);
const { get, del, useMutation } = useApi();
const queryResult = usePagedQuery({
diff --git a/src/components/hooks/queries/useRevenueValues.ts b/src/components/hooks/queries/useRevenueValuesQuery.ts
similarity index 78%
rename from src/components/hooks/queries/useRevenueValues.ts
rename to src/components/hooks/queries/useRevenueValuesQuery.ts
index 803c2a8e..cd29dbbc 100644
--- a/src/components/hooks/queries/useRevenueValues.ts
+++ b/src/components/hooks/queries/useRevenueValuesQuery.ts
@@ -1,6 +1,6 @@
import { useApi } from '../useApi';
-export function useRevenueValues(websiteId: string, startDate: Date, endDate: Date) {
+export function useRevenueValuesQuery(websiteId: string, startDate: Date, endDate: Date) {
const { get, useQuery } = useApi();
return useQuery({
diff --git a/src/components/hooks/queries/useSessionActivity.ts b/src/components/hooks/queries/useSessionActivityQuery.ts
similarity index 92%
rename from src/components/hooks/queries/useSessionActivity.ts
rename to src/components/hooks/queries/useSessionActivityQuery.ts
index 1c9c8f57..d8d34aca 100644
--- a/src/components/hooks/queries/useSessionActivity.ts
+++ b/src/components/hooks/queries/useSessionActivityQuery.ts
@@ -1,6 +1,6 @@
import { useApi } from '../useApi';
-export function useSessionActivity(
+export function useSessionActivityQuery(
websiteId: string,
sessionId: string,
startDate: Date,
diff --git a/src/components/hooks/queries/useSessionDataProperties.ts b/src/components/hooks/queries/useSessionDataPropertiesQuery.ts
similarity index 92%
rename from src/components/hooks/queries/useSessionDataProperties.ts
rename to src/components/hooks/queries/useSessionDataPropertiesQuery.ts
index 94afb60d..b694cf37 100644
--- a/src/components/hooks/queries/useSessionDataProperties.ts
+++ b/src/components/hooks/queries/useSessionDataPropertiesQuery.ts
@@ -2,7 +2,7 @@ import { useApi } from '../useApi';
import { UseQueryOptions } from '@tanstack/react-query';
import { useFilterParams } from '../useFilterParams';
-export function useSessionDataProperties(
+export function useSessionDataPropertiesQuery(
websiteId: string,
options?: Omit,
) {
diff --git a/src/components/hooks/queries/useSessionData.ts b/src/components/hooks/queries/useSessionDataQuery.ts
similarity index 78%
rename from src/components/hooks/queries/useSessionData.ts
rename to src/components/hooks/queries/useSessionDataQuery.ts
index 521ba7d5..62b53983 100644
--- a/src/components/hooks/queries/useSessionData.ts
+++ b/src/components/hooks/queries/useSessionDataQuery.ts
@@ -1,6 +1,6 @@
import { useApi } from '../useApi';
-export function useSessionData(websiteId: string, sessionId: string) {
+export function useSessionDataQuery(websiteId: string, sessionId: string) {
const { get, useQuery } = useApi();
return useQuery({
diff --git a/src/components/hooks/queries/useSessionDataValues.ts b/src/components/hooks/queries/useSessionDataValuesQuery.ts
similarity index 93%
rename from src/components/hooks/queries/useSessionDataValues.ts
rename to src/components/hooks/queries/useSessionDataValuesQuery.ts
index 2f756c22..8a75b1a3 100644
--- a/src/components/hooks/queries/useSessionDataValues.ts
+++ b/src/components/hooks/queries/useSessionDataValuesQuery.ts
@@ -2,7 +2,7 @@ import { useApi } from '../useApi';
import { UseQueryOptions } from '@tanstack/react-query';
import { useFilterParams } from '../useFilterParams';
-export function useSessionDataValues(
+export function useSessionDataValuesQuery(
websiteId: string,
propertyName: string,
options?: Omit,
diff --git a/src/components/hooks/queries/useShareToken.ts b/src/components/hooks/queries/useShareTokenQuery.ts
similarity index 91%
rename from src/components/hooks/queries/useShareToken.ts
rename to src/components/hooks/queries/useShareTokenQuery.ts
index 050d05a8..122dc484 100644
--- a/src/components/hooks/queries/useShareToken.ts
+++ b/src/components/hooks/queries/useShareTokenQuery.ts
@@ -3,7 +3,7 @@ import { useApi } from '../useApi';
const selector = (state: { shareToken: string }) => state.shareToken;
-export function useShareToken(shareId: string): {
+export function useShareTokenQuery(shareId: string): {
shareToken: any;
isLoading?: boolean;
error?: Error;
diff --git a/src/components/hooks/queries/useTeamMembers.ts b/src/components/hooks/queries/useTeamMembersQuery.ts
similarity index 88%
rename from src/components/hooks/queries/useTeamMembers.ts
rename to src/components/hooks/queries/useTeamMembersQuery.ts
index c285c30f..87956ed0 100644
--- a/src/components/hooks/queries/useTeamMembers.ts
+++ b/src/components/hooks/queries/useTeamMembersQuery.ts
@@ -2,7 +2,7 @@ import { useApi } from '../useApi';
import { usePagedQuery } from '../usePagedQuery';
import { useModified } from '../useModified';
-export function useTeamMembers(teamId: string) {
+export function useTeamMembersQuery(teamId: string) {
const { get } = useApi();
const { modified } = useModified(`teams:members`);
diff --git a/src/components/hooks/queries/useTeam.ts b/src/components/hooks/queries/useTeamQuery.ts
similarity index 81%
rename from src/components/hooks/queries/useTeam.ts
rename to src/components/hooks/queries/useTeamQuery.ts
index f9383ce0..563e16d5 100644
--- a/src/components/hooks/queries/useTeam.ts
+++ b/src/components/hooks/queries/useTeamQuery.ts
@@ -1,6 +1,6 @@
import { useApi } from '../useApi';
-export function useTeam(teamId: string) {
+export function useTeamQuery(teamId: string) {
const { get, useQuery } = useApi();
return useQuery({
queryKey: ['teams', teamId],
diff --git a/src/components/hooks/queries/useTeamWebsites.ts b/src/components/hooks/queries/useTeamWebsitesQuery.ts
similarity index 87%
rename from src/components/hooks/queries/useTeamWebsites.ts
rename to src/components/hooks/queries/useTeamWebsitesQuery.ts
index 1f578709..892cc848 100644
--- a/src/components/hooks/queries/useTeamWebsites.ts
+++ b/src/components/hooks/queries/useTeamWebsitesQuery.ts
@@ -2,7 +2,7 @@ import { useApi } from '../useApi';
import { usePagedQuery } from '../usePagedQuery';
import { useModified } from '../useModified';
-export function useTeamWebsites(teamId: string) {
+export function useTeamWebsitesQuery(teamId: string) {
const { get } = useApi();
const { modified } = useModified(`websites`);
diff --git a/src/components/hooks/queries/useTeams.ts b/src/components/hooks/queries/useTeamsQuery.ts
similarity index 89%
rename from src/components/hooks/queries/useTeams.ts
rename to src/components/hooks/queries/useTeamsQuery.ts
index 9e83539a..a4edc287 100644
--- a/src/components/hooks/queries/useTeams.ts
+++ b/src/components/hooks/queries/useTeamsQuery.ts
@@ -2,7 +2,7 @@ import { useApi } from '../useApi';
import { usePagedQuery } from '../usePagedQuery';
import { useModified } from '../useModified';
-export function useTeams(userId: string) {
+export function useTeamsQuery(userId: string) {
const { get } = useApi();
const { modified } = useModified(`teams`);
diff --git a/src/components/hooks/queries/useUser.ts b/src/components/hooks/queries/useUserQuery.ts
similarity index 73%
rename from src/components/hooks/queries/useUser.ts
rename to src/components/hooks/queries/useUserQuery.ts
index 671b4af1..f454b96a 100644
--- a/src/components/hooks/queries/useUser.ts
+++ b/src/components/hooks/queries/useUserQuery.ts
@@ -1,6 +1,6 @@
import { useApi } from '../useApi';
-export function useUser(userId: string, options?: { [key: string]: any }) {
+export function useUserQuery(userId: string, options?: { [key: string]: any }) {
const { get, useQuery } = useApi();
return useQuery({
queryKey: ['users', userId],
diff --git a/src/components/hooks/queries/useUsers.ts b/src/components/hooks/queries/useUsersQuery.ts
similarity index 91%
rename from src/components/hooks/queries/useUsers.ts
rename to src/components/hooks/queries/useUsersQuery.ts
index 5952a981..05c93310 100644
--- a/src/components/hooks/queries/useUsers.ts
+++ b/src/components/hooks/queries/useUsersQuery.ts
@@ -2,7 +2,7 @@ import { useApi } from '../useApi';
import { usePagedQuery } from '../usePagedQuery';
import { useModified } from '../useModified';
-export function useUsers() {
+export function useUsersQuery() {
const { get } = useApi();
const { modified } = useModified(`users`);
diff --git a/src/components/hooks/queries/useWebsiteEvents.ts b/src/components/hooks/queries/useWebsiteEventsQuery.ts
similarity index 93%
rename from src/components/hooks/queries/useWebsiteEvents.ts
rename to src/components/hooks/queries/useWebsiteEventsQuery.ts
index e4204c84..c36db405 100644
--- a/src/components/hooks/queries/useWebsiteEvents.ts
+++ b/src/components/hooks/queries/useWebsiteEventsQuery.ts
@@ -3,7 +3,7 @@ import { UseQueryOptions } from '@tanstack/react-query';
import { useFilterParams } from '../useFilterParams';
import { usePagedQuery } from '../usePagedQuery';
-export function useWebsiteEvents(
+export function useWebsiteEventsQuery(
websiteId: string,
options?: Omit,
) {
diff --git a/src/components/hooks/queries/useWebsiteEventsSeries.ts b/src/components/hooks/queries/useWebsiteEventsSeriesQuery.ts
similarity index 92%
rename from src/components/hooks/queries/useWebsiteEventsSeries.ts
rename to src/components/hooks/queries/useWebsiteEventsSeriesQuery.ts
index 7543f3e5..6e0267f4 100644
--- a/src/components/hooks/queries/useWebsiteEventsSeries.ts
+++ b/src/components/hooks/queries/useWebsiteEventsSeriesQuery.ts
@@ -2,7 +2,7 @@ import { useApi } from '../useApi';
import { UseQueryOptions } from '@tanstack/react-query';
import { useFilterParams } from '../useFilterParams';
-export function useWebsiteEventsSeries(
+export function useWebsiteEventsSeriesQuery(
websiteId: string,
options?: Omit,
) {
diff --git a/src/components/hooks/queries/useWebsiteMetrics.ts b/src/components/hooks/queries/useWebsiteMetricsQuery.ts
similarity index 96%
rename from src/components/hooks/queries/useWebsiteMetrics.ts
rename to src/components/hooks/queries/useWebsiteMetricsQuery.ts
index 4cc37736..479edf84 100644
--- a/src/components/hooks/queries/useWebsiteMetrics.ts
+++ b/src/components/hooks/queries/useWebsiteMetricsQuery.ts
@@ -3,7 +3,7 @@ import { useApi } from '../useApi';
import { useFilterParams } from '../useFilterParams';
import { useSearchParams } from 'next/navigation';
-export function useWebsiteMetrics(
+export function useWebsiteMetricsQuery(
websiteId: string,
queryParams: { type: string; limit?: number; search?: string; startAt?: number; endAt?: number },
options?: Omit void }, 'queryKey' | 'queryFn'>,
diff --git a/src/components/hooks/queries/useWebsitePageviews.ts b/src/components/hooks/queries/useWebsitePageviewsQuery.ts
similarity index 93%
rename from src/components/hooks/queries/useWebsitePageviews.ts
rename to src/components/hooks/queries/useWebsitePageviewsQuery.ts
index e14a6e3d..a2e71df3 100644
--- a/src/components/hooks/queries/useWebsitePageviews.ts
+++ b/src/components/hooks/queries/useWebsitePageviewsQuery.ts
@@ -2,7 +2,7 @@ import { UseQueryOptions } from '@tanstack/react-query';
import { useApi } from '../useApi';
import { useFilterParams } from '../useFilterParams';
-export function useWebsitePageviews(
+export function useWebsitePageviewsQuery(
websiteId: string,
compare?: string,
options?: Omit,
diff --git a/src/components/hooks/queries/useWebsite.ts b/src/components/hooks/queries/useWebsiteQuery.ts
similarity index 73%
rename from src/components/hooks/queries/useWebsite.ts
rename to src/components/hooks/queries/useWebsiteQuery.ts
index 5f98192c..30d9fbcf 100644
--- a/src/components/hooks/queries/useWebsite.ts
+++ b/src/components/hooks/queries/useWebsiteQuery.ts
@@ -1,6 +1,6 @@
import { useApi } from '../useApi';
-export function useWebsite(websiteId: string, options?: { [key: string]: any }) {
+export function useWebsiteQuery(websiteId: string, options?: { [key: string]: any }) {
const { get, useQuery } = useApi();
return useQuery({
diff --git a/src/components/hooks/queries/useWebsiteSession.ts b/src/components/hooks/queries/useWebsiteSessionQuery.ts
similarity index 76%
rename from src/components/hooks/queries/useWebsiteSession.ts
rename to src/components/hooks/queries/useWebsiteSessionQuery.ts
index 0f771c4e..053dae31 100644
--- a/src/components/hooks/queries/useWebsiteSession.ts
+++ b/src/components/hooks/queries/useWebsiteSessionQuery.ts
@@ -1,6 +1,6 @@
import { useApi } from '../useApi';
-export function useWebsiteSession(websiteId: string, sessionId: string) {
+export function useWebsiteSessionQuery(websiteId: string, sessionId: string) {
const { get, useQuery } = useApi();
return useQuery({
diff --git a/src/components/hooks/queries/useWebsiteSessionStats.ts b/src/components/hooks/queries/useWebsiteSessionStatsQuery.ts
similarity index 77%
rename from src/components/hooks/queries/useWebsiteSessionStats.ts
rename to src/components/hooks/queries/useWebsiteSessionStatsQuery.ts
index 6860fccc..4fa8e666 100644
--- a/src/components/hooks/queries/useWebsiteSessionStats.ts
+++ b/src/components/hooks/queries/useWebsiteSessionStatsQuery.ts
@@ -1,7 +1,10 @@
import { useApi } from '../useApi';
import { useFilterParams } from '../useFilterParams';
-export function useWebsiteSessionStats(websiteId: string, options?: { [key: string]: string }) {
+export function useWebsiteSessionStatsQuery(
+ websiteId: string,
+ options?: { [key: string]: string },
+) {
const { get, useQuery } = useApi();
const params = useFilterParams(websiteId);
diff --git a/src/components/hooks/queries/useWebsiteSessions.ts b/src/components/hooks/queries/useWebsiteSessionsQuery.ts
similarity index 84%
rename from src/components/hooks/queries/useWebsiteSessions.ts
rename to src/components/hooks/queries/useWebsiteSessionsQuery.ts
index 2b943eb9..f0684a2d 100644
--- a/src/components/hooks/queries/useWebsiteSessions.ts
+++ b/src/components/hooks/queries/useWebsiteSessionsQuery.ts
@@ -3,7 +3,10 @@ import { usePagedQuery } from '../usePagedQuery';
import { useModified } from '../useModified';
import { useFilterParams } from '@/components/hooks/useFilterParams';
-export function useWebsiteSessions(websiteId: string, params?: { [key: string]: string | number }) {
+export function useWebsiteSessionsQuery(
+ websiteId: string,
+ params?: { [key: string]: string | number },
+) {
const { get } = useApi();
const { modified } = useModified(`sessions`);
const filters = useFilterParams(websiteId);
diff --git a/src/components/hooks/queries/useWebsiteSessionsWeekly.ts b/src/components/hooks/queries/useWebsiteSessionsWeeklyQuery.ts
similarity index 92%
rename from src/components/hooks/queries/useWebsiteSessionsWeekly.ts
rename to src/components/hooks/queries/useWebsiteSessionsWeeklyQuery.ts
index 2e691904..4a07f38d 100644
--- a/src/components/hooks/queries/useWebsiteSessionsWeekly.ts
+++ b/src/components/hooks/queries/useWebsiteSessionsWeeklyQuery.ts
@@ -2,7 +2,7 @@ import { useApi } from '../useApi';
import { useModified } from '../useModified';
import { useFilterParams } from '@/components/hooks/useFilterParams';
-export function useWebsiteSessionsWeekly(
+export function useWebsiteSessionsWeeklyQuery(
websiteId: string,
params?: { [key: string]: string | number },
) {
diff --git a/src/components/hooks/queries/useWebsiteStats.ts b/src/components/hooks/queries/useWebsiteStatsQuery.ts
similarity index 92%
rename from src/components/hooks/queries/useWebsiteStats.ts
rename to src/components/hooks/queries/useWebsiteStatsQuery.ts
index a553fe09..5c761fce 100644
--- a/src/components/hooks/queries/useWebsiteStats.ts
+++ b/src/components/hooks/queries/useWebsiteStatsQuery.ts
@@ -1,7 +1,7 @@
import { useApi } from '../useApi';
import { useFilterParams } from '../useFilterParams';
-export function useWebsiteStats(
+export function useWebsiteStatsQuery(
websiteId: string,
compare?: string,
options?: { [key: string]: string },
diff --git a/src/components/hooks/queries/useWebsiteValues.ts b/src/components/hooks/queries/useWebsiteValuesQuery.ts
similarity index 97%
rename from src/components/hooks/queries/useWebsiteValues.ts
rename to src/components/hooks/queries/useWebsiteValuesQuery.ts
index a386faa1..7320e08c 100644
--- a/src/components/hooks/queries/useWebsiteValues.ts
+++ b/src/components/hooks/queries/useWebsiteValuesQuery.ts
@@ -3,7 +3,7 @@ import { useCountryNames } from '@/components/hooks/useCountryNames';
import { useRegionNames } from '@/components/hooks/useRegionNames';
import { useLocale } from '../useLocale';
-export function useWebsiteValues({
+export function useWebsiteValuesQuery({
websiteId,
type,
startDate,
diff --git a/src/components/hooks/queries/useWebsites.ts b/src/components/hooks/queries/useWebsites.ts
index f9e1ddc2..545f0fbb 100644
--- a/src/components/hooks/queries/useWebsites.ts
+++ b/src/components/hooks/queries/useWebsites.ts
@@ -1,6 +1,6 @@
import { useApi } from '../useApi';
import { usePagedQuery } from '../usePagedQuery';
-import { useLogin } from './useLogin';
+import { useLoginQuery } from './useLoginQuery';
import { useModified } from '../useModified';
export function useWebsites(
@@ -8,7 +8,7 @@ export function useWebsites(
params?: { [key: string]: string | number },
) {
const { get } = useApi();
- const { user } = useLogin();
+ const { user } = useLoginQuery();
const { modified } = useModified(`websites`);
return usePagedQuery({
diff --git a/src/components/hooks/queries/useConfig.ts b/src/components/hooks/useConfig.ts
similarity index 100%
rename from src/components/hooks/queries/useConfig.ts
rename to src/components/hooks/useConfig.ts
diff --git a/src/components/hooks/useGlobalState.ts b/src/components/hooks/useGlobalState.ts
index dccbfcea..477cfe58 100644
--- a/src/components/hooks/useGlobalState.ts
+++ b/src/components/hooks/useGlobalState.ts
@@ -3,7 +3,7 @@ import { create } from 'zustand';
const store = create(() => ({}));
const useGlobalState = (key: string, value?: any) => {
- if (value !== undefined && !store.getState()[key]) {
+ if (value !== undefined && store.getState()[key] === undefined) {
store.setState({ [key]: value });
}
diff --git a/src/components/hooks/useNavigation.ts b/src/components/hooks/useNavigation.ts
index 40dc69e1..e3371fe4 100644
--- a/src/components/hooks/useNavigation.ts
+++ b/src/components/hooks/useNavigation.ts
@@ -2,15 +2,11 @@ import { useMemo } from 'react';
import { usePathname, useRouter, useSearchParams } from 'next/navigation';
import { buildUrl } from '@/lib/url';
-export function useNavigation(): {
- pathname: string;
- query: { [key: string]: string };
- router: any;
- renderUrl: (params: any, reset?: boolean) => string;
-} {
+export function useNavigation() {
const router = useRouter();
const pathname = usePathname();
const params = useSearchParams();
+ const [, teamId] = pathname.match(/^\/teams\/([a-f0-9-]+)/) || [];
const query = useMemo(() => {
const obj = {};
@@ -26,5 +22,9 @@ export function useNavigation(): {
return reset ? pathname : buildUrl(pathname, { ...query, ...params });
}
- return { pathname, query, router, renderUrl };
+ function renderTeamUrl(url: string) {
+ return teamId ? `/teams/${teamId}${url}` : url;
+ }
+
+ return { pathname, query, router, renderUrl, renderTeamUrl, teamId };
}
diff --git a/src/components/hooks/useTeamUrl.ts b/src/components/hooks/useTeamUrl.ts
deleted file mode 100644
index fcbb5d21..00000000
--- a/src/components/hooks/useTeamUrl.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { usePathname } from 'next/navigation';
-
-export function useTeamUrl() {
- const pathname = usePathname();
- const [, teamId] = pathname.match(/^\/teams\/([a-f0-9-]+)/) || [];
-
- function renderTeamUrl(url: string) {
- return teamId ? `/teams/${teamId}${url}` : url;
- }
-
- return { teamId, renderTeamUrl, pathname };
-}
diff --git a/src/components/input/ProfileButton.tsx b/src/components/input/ProfileButton.tsx
index 5621e31d..e3356099 100644
--- a/src/components/input/ProfileButton.tsx
+++ b/src/components/input/ProfileButton.tsx
@@ -12,11 +12,11 @@ import {
} from '@umami/react-zen';
import { useRouter } from 'next/navigation';
import { User, LogOut, CircleUserRound } from 'lucide-react';
-import { useMessages, useLogin } from '@/components/hooks';
+import { useMessages, useLoginQuery } from '@/components/hooks';
export function ProfileButton() {
const { formatMessage, labels } = useMessages();
- const { user } = useLogin();
+ const { user } = useLoginQuery();
const router = useRouter();
const cloudMode = !!process.env.cloudMode;
diff --git a/src/components/input/RefreshButton.tsx b/src/components/input/RefreshButton.tsx
index bf563a82..e880e2e9 100644
--- a/src/components/input/RefreshButton.tsx
+++ b/src/components/input/RefreshButton.tsx
@@ -1,4 +1,4 @@
-import { LoadingButton, Icon, TooltipPopup } from '@umami/react-zen';
+import { LoadingButton, Icon, Tooltip, TooltipTrigger } from '@umami/react-zen';
import { setWebsiteDateRange } from '@/store/websites';
import { useDateRange } from '@/components/hooks';
import { Icons } from '@/components/icons';
@@ -21,12 +21,13 @@ export function RefreshButton({
}
return (
-
-
+
+
-
+ {formatMessage(labels.refresh)}
+
);
}
diff --git a/src/components/input/TeamsButton.tsx b/src/components/input/TeamsButton.tsx
index 2cc34094..c1eb453c 100644
--- a/src/components/input/TeamsButton.tsx
+++ b/src/components/input/TeamsButton.tsx
@@ -15,7 +15,7 @@ import {
Icons,
} from '@umami/react-zen';
import { User, Users } from 'lucide-react';
-import { useLogin, useMessages, useTeams, useTeamUrl } from '@/components/hooks';
+import { useLoginQuery, useMessages, useTeamsQuery, useNavigation } from '@/components/hooks';
export function TeamsButton({
className,
@@ -24,10 +24,10 @@ export function TeamsButton({
className?: string;
showText?: boolean;
}) {
- const { user } = useLogin();
+ const { user } = useLoginQuery();
const { formatMessage, labels } = useMessages();
- const { result } = useTeams(user.id);
- const { teamId } = useTeamUrl();
+ const { result } = useTeamsQuery(user.id);
+ const { teamId } = useNavigation();
const router = useRouter();
const team = result?.data?.find(({ id }) => id === teamId);
const [selectedKeys, setSelectedKeys] = useState(new Set([teamId || user.id]));
diff --git a/src/components/metrics/EventsChart.tsx b/src/components/metrics/EventsChart.tsx
index e82f2e09..514b0e76 100644
--- a/src/components/metrics/EventsChart.tsx
+++ b/src/components/metrics/EventsChart.tsx
@@ -1,6 +1,6 @@
import { colord } from 'colord';
import { BarChart } from '@/components/charts/BarChart';
-import { useDateRange, useLocale, useWebsiteEventsSeries } from '@/components/hooks';
+import { useDateRange, useLocale, useWebsiteEventsSeriesQuery } from '@/components/hooks';
import { renderDateLabels } from '@/lib/charts';
import { CHART_COLORS } from '@/lib/constants';
import { useMemo } from 'react';
@@ -15,7 +15,7 @@ export function EventsChart({ websiteId, className }: EventsChartProps) {
dateRange: { startDate, endDate, unit, value },
} = useDateRange(websiteId);
const { locale } = useLocale();
- const { data, isLoading } = useWebsiteEventsSeries(websiteId);
+ const { data, isLoading } = useWebsiteEventsSeriesQuery(websiteId);
const chartData = useMemo(() => {
if (!data) return [];
diff --git a/src/components/metrics/MetricsBar.tsx b/src/components/metrics/MetricsBar.tsx
index 232ac125..b005b34c 100644
--- a/src/components/metrics/MetricsBar.tsx
+++ b/src/components/metrics/MetricsBar.tsx
@@ -22,7 +22,7 @@ export function MetricsBar({ children, isLoading, isFetched, error }: MetricsBar
!error &&
isFetched &&
cloneChildren(children, child => {
- return { format: child.props['format'] || formatFunc };
+ return { format: child?.props['format'] || formatFunc };
})}
);
diff --git a/src/components/metrics/MetricsTable.tsx b/src/components/metrics/MetricsTable.tsx
index c4179596..0af9d6bf 100644
--- a/src/components/metrics/MetricsTable.tsx
+++ b/src/components/metrics/MetricsTable.tsx
@@ -1,14 +1,14 @@
import { ReactNode, useMemo, useState } from 'react';
-import { Loading, Icon, Text, SearchField } from '@umami/react-zen';
-import classNames from 'classnames';
+import { Loading, Icon, Text, SearchField, Row } from '@umami/react-zen';
import { ErrorMessage } from '@/components/common/ErrorMessage';
import { LinkButton } from '@/components/common/LinkButton';
import { DEFAULT_ANIMATION_DURATION } from '@/lib/constants';
import { percentFilter } from '@/lib/filters';
-import { useNavigation, useWebsiteMetrics, useMessages, useFormat } from '@/components/hooks';
+import { useNavigation, useWebsiteMetricsQuery, useMessages, useFormat } from '@/components/hooks';
import { Icons } from '@/components/icons';
import { ListTable, ListTableProps } from './ListTable';
import styles from './MetricsTable.module.css';
+import { Panel } from '@/components/layout/Panel';
export interface MetricsTableProps extends ListTableProps {
websiteId: string;
@@ -46,7 +46,7 @@ export function MetricsTable({
const { renderUrl } = useNavigation();
const { formatMessage, labels } = useMessages();
- const { data, isLoading, isFetched, error } = useWebsiteMetrics(
+ const { data, isLoading, isFetched, error } = useWebsiteMetricsQuery(
websiteId,
{ type, limit, search: searchFormattedValues ? undefined : search, ...params },
{
@@ -85,15 +85,7 @@ export function MetricsTable({
}, [data, dataFilter, search, limit, formatValue, type]);
return (
-
+
{error && }
{allowSearch && (
@@ -111,7 +103,7 @@ export function MetricsTable({
)}
{!data && isLoading && !isFetched &&
}
-
+
{showMore && data && !error && limit && (
{formatMessage(labels.more)}
@@ -120,7 +112,7 @@ export function MetricsTable({
)}
-
-
+
+
);
}
diff --git a/src/components/metrics/WorldMap.tsx b/src/components/metrics/WorldMap.tsx
index f6582013..a57fc489 100644
--- a/src/components/metrics/WorldMap.tsx
+++ b/src/components/metrics/WorldMap.tsx
@@ -3,7 +3,7 @@ import { ComposableMap, Geographies, Geography, ZoomableGroup } from 'react-simp
import classNames from 'classnames';
import { colord } from 'colord';
import { ISO_COUNTRIES, MAP_FILE } from '@/lib/constants';
-import { useDateRange, useTheme, useWebsiteMetrics } from '@/components/hooks';
+import { useDateRange, useTheme, useWebsiteMetricsQuery } from '@/components/hooks';
import { useCountryNames } from '@/components/hooks';
import { useLocale } from '@/components/hooks';
import { useMessages } from '@/components/hooks';
@@ -32,7 +32,7 @@ export function WorldMap({
const {
dateRange: { startDate, endDate },
} = useDateRange(websiteId);
- const { data: mapData } = useWebsiteMetrics(websiteId, {
+ const { data: mapData } = useWebsiteMetricsQuery(websiteId, {
type: 'country',
startAt: +startDate,
endAt: +endDate,