diff --git a/package.json b/package.json
index 7d3528fa..4e927d13 100644
--- a/package.json
+++ b/package.json
@@ -82,7 +82,7 @@
"@react-spring/web": "^10.0.1",
"@svgr/cli": "^8.1.0",
"@tanstack/react-query": "^5.85.5",
- "@umami/react-zen": "^0.179.0",
+ "@umami/react-zen": "^0.180.0",
"@umami/redis-client": "^0.29.0",
"bcryptjs": "^3.0.2",
"chalk": "^5.6.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index a587f004..1c4b2a3c 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -45,8 +45,8 @@ importers:
specifier: ^5.85.5
version: 5.85.5(react@19.1.1)
'@umami/react-zen':
- specifier: ^0.179.0
- version: 0.179.0(@babel/core@7.28.3)(@types/react@19.1.12)(babel-plugin-react-compiler@19.1.0-rc.2)(immer@10.1.1)(use-sync-external-store@1.5.0(react@19.1.1))
+ specifier: ^0.180.0
+ version: 0.180.0(@babel/core@7.28.3)(@types/react@19.1.12)(babel-plugin-react-compiler@19.1.0-rc.2)(immer@10.1.1)(use-sync-external-store@1.5.0(react@19.1.1))
'@umami/redis-client':
specifier: ^0.29.0
version: 0.29.0
@@ -2735,8 +2735,8 @@ packages:
'@prisma/client': ^6.1.0
'@prisma/extension-read-replicas': ^0.4.1
- '@umami/react-zen@0.179.0':
- resolution: {integrity: sha512-OS6Xa1tMO2PfXYXEB98XyOBctvnw/gE2eO3gK5mkJF5P3Ati6Z9KpTpj28Fxi7PgJiWYqcQ5enFzQqHXjYy/3A==}
+ '@umami/react-zen@0.180.0':
+ resolution: {integrity: sha512-/kkSeJ/D3WeW577Jb4W0/P6eBjWfGn6E4GHYS0W3K1RgNScz46bEcZe2HJc/l/ssiNoQcSE0vt63t0dUzUaqMQ==}
'@umami/redis-client@0.29.0':
resolution: {integrity: sha512-Jaqh++jskqDB7ny75pfC02OvKp1JTS4asGDsFrRL3qy8sxL3PAl9+/mybCJe4/6vWrXDJKqpgkSfUDJq2bFjyw==}
@@ -10333,7 +10333,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@umami/react-zen@0.179.0(@babel/core@7.28.3)(@types/react@19.1.12)(babel-plugin-react-compiler@19.1.0-rc.2)(immer@10.1.1)(use-sync-external-store@1.5.0(react@19.1.1))':
+ '@umami/react-zen@0.180.0(@babel/core@7.28.3)(@types/react@19.1.12)(babel-plugin-react-compiler@19.1.0-rc.2)(immer@10.1.1)(use-sync-external-store@1.5.0(react@19.1.1))':
dependencies:
'@fontsource/jetbrains-mono': 5.2.6
'@internationalized/date': 3.9.0
diff --git a/src/app/(main)/settings/teams/TeamsSettingsPage.tsx b/src/app/(main)/settings/teams/TeamsSettingsPage.tsx
index 9d5c8acd..b7cbe37e 100644
--- a/src/app/(main)/settings/teams/TeamsSettingsPage.tsx
+++ b/src/app/(main)/settings/teams/TeamsSettingsPage.tsx
@@ -9,7 +9,7 @@ export function TeamsSettingsPage() {
-
+
);
diff --git a/src/app/(main)/teams/TeamsDataTable.tsx b/src/app/(main)/teams/TeamsDataTable.tsx
index b023f77e..6475c456 100644
--- a/src/app/(main)/teams/TeamsDataTable.tsx
+++ b/src/app/(main)/teams/TeamsDataTable.tsx
@@ -2,7 +2,7 @@ import { ReactNode } from 'react';
import Link from 'next/link';
import { DataGrid } from '@/components/common/DataGrid';
import { TeamsTable } from './TeamsTable';
-import { useLoginQuery, useUserTeamsQuery } from '@/components/hooks';
+import { useLoginQuery, useNavigation, useUserTeamsQuery } from '@/components/hooks';
export function TeamsDataTable({
showActions,
@@ -13,10 +13,12 @@ export function TeamsDataTable({
}) {
const { user } = useLoginQuery();
const query = useUserTeamsQuery(user.id);
+ const { pathname } = useNavigation();
+ const isSettings = pathname.includes('/settings');
const renderLink = (row: any) => {
return (
-
+
{row.name}
);
diff --git a/src/app/api/links/route.ts b/src/app/api/links/route.ts
index 4f10a8fd..c6bc6ed2 100644
--- a/src/app/api/links/route.ts
+++ b/src/app/api/links/route.ts
@@ -31,7 +31,7 @@ export async function POST(request: Request) {
url: z.string().max(500),
slug: z.string().max(100),
teamId: z.string().nullable().optional(),
- id: z.string().uuid().nullable().optional(),
+ id: z.uuid().nullable().optional(),
});
const { auth, body, error } = await parseRequest(request, schema);
diff --git a/src/app/api/pixels/route.ts b/src/app/api/pixels/route.ts
index 038d3660..06a25edd 100644
--- a/src/app/api/pixels/route.ts
+++ b/src/app/api/pixels/route.ts
@@ -30,7 +30,7 @@ export async function POST(request: Request) {
name: z.string().max(100),
slug: z.string().max(100),
teamId: z.string().nullable().optional(),
- id: z.string().uuid().nullable().optional(),
+ id: z.uuid().nullable().optional(),
});
const { auth, body, error } = await parseRequest(request, schema);
diff --git a/src/app/api/reports/route.ts b/src/app/api/reports/route.ts
index 8777f645..fde1822c 100644
--- a/src/app/api/reports/route.ts
+++ b/src/app/api/reports/route.ts
@@ -8,7 +8,7 @@ import { getReports, createReport } from '@/queries';
export async function GET(request: Request) {
const schema = z.object({
- websiteId: z.string().uuid().optional(),
+ websiteId: z.uuid().optional(),
type: z.string().optional(),
...pagingParams,
});
diff --git a/src/app/api/send/route.ts b/src/app/api/send/route.ts
index 31ced9c2..fe8afa07 100644
--- a/src/app/api/send/route.ts
+++ b/src/app/api/send/route.ts
@@ -27,9 +27,9 @@ const schema = z.object({
type: z.enum(['event', 'identify']),
payload: z
.object({
- website: z.string().uuid().optional(),
- link: z.string().uuid().optional(),
- pixel: z.string().uuid().optional(),
+ website: z.uuid().optional(),
+ link: z.uuid().optional(),
+ pixel: z.uuid().optional(),
data: anyObjectParam.optional(),
hostname: z.string().max(100).optional(),
language: z.string().max(35).optional(),
diff --git a/src/app/api/teams/[teamId]/users/route.ts b/src/app/api/teams/[teamId]/users/route.ts
index 2bd40e35..295d1d7f 100644
--- a/src/app/api/teams/[teamId]/users/route.ts
+++ b/src/app/api/teams/[teamId]/users/route.ts
@@ -50,7 +50,7 @@ export async function GET(request: Request, { params }: { params: Promise<{ team
export async function POST(request: Request, { params }: { params: Promise<{ teamId: string }> }) {
const schema = z.object({
- userId: z.string().uuid(),
+ userId: z.uuid(),
role: teamRoleParam,
});
diff --git a/src/app/api/users/route.ts b/src/app/api/users/route.ts
index 3ebaeac1..cf6667a7 100644
--- a/src/app/api/users/route.ts
+++ b/src/app/api/users/route.ts
@@ -9,7 +9,7 @@ import { createUser, getUserByUsername } from '@/queries';
export async function POST(request: Request) {
const schema = z.object({
- id: z.string().uuid().optional(),
+ id: z.uuid().optional(),
username: z.string().max(255),
password: z.string(),
role: z.string().regex(/admin|user|view-only/i),
diff --git a/src/app/api/websites/[websiteId]/transfer/route.ts b/src/app/api/websites/[websiteId]/transfer/route.ts
index 1bb0a0f5..ae35f158 100644
--- a/src/app/api/websites/[websiteId]/transfer/route.ts
+++ b/src/app/api/websites/[websiteId]/transfer/route.ts
@@ -9,8 +9,8 @@ export async function POST(
{ params }: { params: Promise<{ websiteId: string }> },
) {
const schema = z.object({
- userId: z.string().uuid().optional(),
- teamId: z.string().uuid().optional(),
+ userId: z.uuid().optional(),
+ teamId: z.uuid().optional(),
});
const { auth, body, error } = await parseRequest(request, schema);
diff --git a/src/app/api/websites/route.ts b/src/app/api/websites/route.ts
index f9b18be8..8f0870f1 100644
--- a/src/app/api/websites/route.ts
+++ b/src/app/api/websites/route.ts
@@ -13,7 +13,7 @@ export async function POST(request: Request) {
domain: z.string().max(500),
shareId: z.string().max(50).nullable().optional(),
teamId: z.string().nullable().optional(),
- id: z.string().uuid().nullable().optional(),
+ id: z.uuid().nullable().optional(),
});
const { auth, body, error } = await parseRequest(request, schema);
diff --git a/src/components/common/DataGrid.tsx b/src/components/common/DataGrid.tsx
index f4c94340..d95ee515 100644
--- a/src/components/common/DataGrid.tsx
+++ b/src/components/common/DataGrid.tsx
@@ -34,6 +34,7 @@ export function DataGrid({
const { data, error, isLoading, isFetching } = query;
const { router, updateParams, query: queryParams } = useNavigation();
const [search, setSearch] = useState(queryParams?.search || data?.search || '');
+ const showPager = allowPaging && data && data.count > data.pageSize;
const handleSearch = (value: string) => {
if (value !== search) {
@@ -73,7 +74,7 @@ export function DataGrid({
{data && (
<>
{typeof children === 'function' ? children(data) : children}
- {allowPaging && data && (
+ {showPager && (