From 7828cf5171230df1fb3fe37dbeabf4dd478acce4 Mon Sep 17 00:00:00 2001 From: Harsh Kumar <9u.harsh@gmail.com> Date: Thu, 3 Sep 2026 19:18:19 +0530 Subject: [PATCH] fix(validation): reject whitespace-only names across dashboard forms (#2632) * fix(api-key): reject whitespace-only key name * fix(private-location): reject whitespace-only location name * fix(monitor-tag): reject whitespace-only tag name * fix(status-report): reject whitespace-only report title * fix(maintenance): reject whitespace-only maintenance title * fix(page-component): reject whitespace-only component name * fix(feedback): reject whitespace-only feedback message * fix(onboarding): reject whitespace-only component name * fix(page-component): reject whitespace-only name on order update * fix(page-component): reject whitespace-only group name * fix(page-component): let component row grow for error text * fix(workspace): reject whitespace-only workspace name --- apps/dashboard/src/components/forms/api-key/form.tsx | 2 +- .../src/components/forms/components/form-components.tsx | 6 +++--- apps/dashboard/src/components/forms/maintenance/form.tsx | 2 +- .../src/components/forms/monitor-tag/form-monitor-tag.tsx | 2 +- .../src/components/forms/onboarding/create-page.tsx | 2 +- .../src/components/forms/private-location/form.tsx | 2 +- .../src/components/forms/settings/form-workspace.tsx | 2 +- .../dashboard/src/components/forms/status-report/form.tsx | 2 +- apps/dashboard/src/components/nav/nav-feedback.tsx | 2 +- packages/services/src/api-key/schemas.ts | 2 +- packages/services/src/maintenance/schemas.ts | 4 ++-- packages/services/src/monitor-tag/schemas.ts | 2 +- packages/services/src/page-component/schemas.ts | 8 ++++---- packages/services/src/private-location/schemas.ts | 4 ++-- packages/services/src/status-report/schemas.ts | 4 ++-- packages/services/src/workspace/schemas.ts | 2 +- 16 files changed, 24 insertions(+), 24 deletions(-) diff --git a/apps/dashboard/src/components/forms/api-key/form.tsx b/apps/dashboard/src/components/forms/api-key/form.tsx index d8db436fa..d5482a4ac 100644 --- a/apps/dashboard/src/components/forms/api-key/form.tsx +++ b/apps/dashboard/src/components/forms/api-key/form.tsx @@ -34,7 +34,7 @@ import { toast } from "sonner"; import { z } from "zod"; export const schema = z.object({ - name: z.string().min(1, "Name is required"), + name: z.string().trim().min(1, "Name is required"), description: z.string().optional(), expiresAt: z.string().optional(), // Single-value radio. The wire format on the create-key API is diff --git a/apps/dashboard/src/components/forms/components/form-components.tsx b/apps/dashboard/src/components/forms/components/form-components.tsx index 1f65910cb..d44063e8f 100644 --- a/apps/dashboard/src/components/forms/components/form-components.tsx +++ b/apps/dashboard/src/components/forms/components/form-components.tsx @@ -106,7 +106,7 @@ const componentSchema = z.object({ id: z.number(), monitorId: z.number().nullish(), order: z.number(), - name: z.string().min(1, { message: "Name is required" }), + name: z.string().trim().min(1, { message: "Name is required" }), description: z.string().optional(), type: z.enum(["monitor", "static"]), }); @@ -117,7 +117,7 @@ const schema = z.object({ z.object({ id: z.number(), order: z.number(), - name: z.string(), + name: z.string().trim().min(1, { message: "Name is required" }), defaultOpen: z.boolean(), components: z.array(componentSchema).min(1, { message: "At least one component is required", @@ -738,7 +738,7 @@ function ComponentRow({ className={cn("rounded-md", className)} {...props} > -