diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/components/CreateWebhookModal.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/components/CreateWebhookModal.tsx index acf5aedc479..e776ff1f282 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/components/CreateWebhookModal.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/components/CreateWebhookModal.tsx @@ -86,7 +86,7 @@ export function CreateWebhookModal({ isOpen, thirdwebClient: client, chainIds, - addresses, + addresses: addresses || "", extractSignatures: extractEventSignatures, type: "event", }); diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/components/FilterDetailsStep.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/components/FilterDetailsStep.tsx index 09a8f949d74..f82af592e6c 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/components/FilterDetailsStep.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/components/FilterDetailsStep.tsx @@ -191,9 +191,7 @@ export function FilterDetailsStep({ render={({ field }) => (
- - Contract Addresses * - + Contract Addresses

Enter a contract address

@@ -281,9 +279,7 @@ export function FilterDetailsStep({ render={({ field }) => (
- - To Address * - + To Address

Enter a to address

diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/utils/webhookTypes.ts b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/utils/webhookTypes.ts index 1f73034ce5e..52c93042c3d 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/utils/webhookTypes.ts +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/utils/webhookTypes.ts @@ -36,25 +36,53 @@ export const webhookFormSchema = z.object({ .min(1, { message: "Select at least one chain" }), addresses: z .string() - .min(1, { message: "Addresses is required" }) - .refine((val) => val.split(/[\,\s]+/).every((a) => isAddress(a.trim())), { - message: "Enter a valid address", - }), + .optional() + .refine( + (val) => { + if (val === undefined || val.trim() === "") { + return true; + } + return val + .split(/[\,\s]+/) + .filter(Boolean) + .every((a) => isAddress(a.trim())); + }, + { + message: "Enter valid addresses (comma-separated) or leave empty", + }, + ), fromAddresses: z .string() .optional() .refine( - (val) => !val || val.split(/[,\s]+/).every((a) => isAddress(a.trim())), + (val) => { + if (val === undefined || val.trim() === "") { + return true; + } + return val + .split(/[\,\s]+/) + .filter(Boolean) + .every((a) => isAddress(a.trim())); + }, { - message: "Enter a valid address", + message: "Enter valid addresses (comma-separated) or leave empty", }, ), toAddresses: z .string() + .optional() .refine( - (val) => !val || val.split(/[,\s]+/).every((a) => isAddress(a.trim())), + (val) => { + if (val === undefined || val.trim() === "") { + return true; + } + return val + .split(/[\,\s]+/) + .filter(Boolean) + .every((a) => isAddress(a.trim())); + }, { - message: "Enter a valid address (comma-separated)", + message: "Enter valid addresses (comma-separated) or leave empty", }, ), sigHash: z.string().optional(),