From 84fb3add337df64b7e79fb21d9d7847d9fb9e596 Mon Sep 17 00:00:00 2001 From: Pallavi Date: Thu, 4 Sep 2025 01:10:55 +0530 Subject: [PATCH 1/3] Enter key handling & hostname field reset in resource create --- .../settings/resources/create/page.tsx | 58 ++++++++++++++----- .../[orgId]/settings/sites/create/page.tsx | 5 ++ 2 files changed, 49 insertions(+), 14 deletions(-) diff --git a/src/app/[orgId]/settings/resources/create/page.tsx b/src/app/[orgId]/settings/resources/create/page.tsx index c28f5a5f..06ecfed9 100644 --- a/src/app/[orgId]/settings/resources/create/page.tsx +++ b/src/app/[orgId]/settings/resources/create/page.tsx @@ -630,19 +630,29 @@ export default function Page() { defaultValue={row.original.ip} className="min-w-[150px]" onBlur={(e) => { - const parsed = parseHostTarget(e.target.value); + const input = e.target.value.trim(); + const hasProtocol = /^(https?|h2c):\/\//.test(input); + const hasPort = /:\d+(?:\/|$)/.test(input); - if (parsed) { - updateTarget(row.original.targetId, { - ...row.original, - method: parsed.protocol, - ip: parsed.host, - port: parsed.port ? Number(parsed.port) : undefined, - }); + if (hasProtocol || hasPort) { + const parsed = parseHostTarget(input); + if (parsed) { + updateTarget(row.original.targetId, { + ...row.original, + method: hasProtocol ? parsed.protocol : row.original.method, + ip: parsed.host, + port: hasPort ? parsed.port : row.original.port + }); + } else { + updateTarget(row.original.targetId, { + ...row.original, + ip: input + }); + } } else { updateTarget(row.original.targetId, { ...row.original, - ip: e.target.value, + ip: input }); } }} @@ -744,6 +754,11 @@ export default function Page() {
{ + if (e.key === "Enter") { + e.preventDefault(); // block default enter refresh + } + }} className="space-y-4" id="base-resource-form" > @@ -856,6 +871,11 @@ export default function Page() { { + if (e.key === "Enter") { + e.preventDefault(); // block default enter refresh + } + }} className="space-y-4" id="tcp-udp-settings-form" > @@ -1204,11 +1224,21 @@ export default function Page() { id="ip" {...field} onBlur={(e) => { - const parsed = parseHostTarget(e.target.value); - if (parsed) { - addTargetForm.setValue("method", parsed.protocol); - addTargetForm.setValue("ip", parsed.host); - addTargetForm.setValue("port", parsed.port); + const input = e.target.value.trim(); + const hasProtocol = /^(https?|h2c):\/\//.test(input); + const hasPort = /:\d+(?:\/|$)/.test(input); + + if (hasProtocol || hasPort) { + const parsed = parseHostTarget(input); + if (parsed) { + if (hasProtocol || !addTargetForm.getValues("method")) { + addTargetForm.setValue("method", parsed.protocol); + } + addTargetForm.setValue("ip", parsed.host); + if (hasPort || !addTargetForm.getValues("port")) { + addTargetForm.setValue("port", parsed.port); + } + } } else { field.onBlur(); } diff --git a/src/app/[orgId]/settings/sites/create/page.tsx b/src/app/[orgId]/settings/sites/create/page.tsx index b9e172a3..22a49eca 100644 --- a/src/app/[orgId]/settings/sites/create/page.tsx +++ b/src/app/[orgId]/settings/sites/create/page.tsx @@ -620,6 +620,11 @@ WantedBy=default.target` { + if (e.key === "Enter") { + e.preventDefault(); // block default enter refresh + } + }} className="space-y-4" id="create-site-form" > From 86956b8cacb3f50351d6fa922367a173d0c7a13b Mon Sep 17 00:00:00 2001 From: Pallavi Date: Thu, 4 Sep 2025 02:23:22 +0530 Subject: [PATCH 2/3] fix enter key reload issue --- src/app/[orgId]/settings/api-keys/create/page.tsx | 5 +++++ src/app/[orgId]/settings/clients/create/page.tsx | 5 +++++ src/app/admin/api-keys/create/page.tsx | 5 +++++ 3 files changed, 15 insertions(+) diff --git a/src/app/[orgId]/settings/api-keys/create/page.tsx b/src/app/[orgId]/settings/api-keys/create/page.tsx index 82a7915c..57822a26 100644 --- a/src/app/[orgId]/settings/api-keys/create/page.tsx +++ b/src/app/[orgId]/settings/api-keys/create/page.tsx @@ -210,6 +210,11 @@ export default function Page() { { + if (e.key === "Enter") { + e.preventDefault(); // block default enter refresh + } + }} className="space-y-4" id="create-site-form" > diff --git a/src/app/[orgId]/settings/clients/create/page.tsx b/src/app/[orgId]/settings/clients/create/page.tsx index 0736ee64..01a93de7 100644 --- a/src/app/[orgId]/settings/clients/create/page.tsx +++ b/src/app/[orgId]/settings/clients/create/page.tsx @@ -440,6 +440,11 @@ export default function Page() { { + if (e.key === "Enter") { + e.preventDefault(); // block default enter refresh + } + }} className="space-y-4" id="create-client-form" > diff --git a/src/app/admin/api-keys/create/page.tsx b/src/app/admin/api-keys/create/page.tsx index 2f95c7fd..b5a61306 100644 --- a/src/app/admin/api-keys/create/page.tsx +++ b/src/app/admin/api-keys/create/page.tsx @@ -200,6 +200,11 @@ export default function Page() { { + if (e.key === "Enter") { + e.preventDefault(); // block default enter refresh + } + }} className="space-y-4" id="create-site-form" > From 2f89a1685213863156d02754bd09ce725340ecd4 Mon Sep 17 00:00:00 2001 From: Pallavi Date: Fri, 5 Sep 2025 20:39:50 +0530 Subject: [PATCH 3/3] minor fix to domain sanitize when create resources --- .../[orgId]/settings/resources/create/page.tsx | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/app/[orgId]/settings/resources/create/page.tsx b/src/app/[orgId]/settings/resources/create/page.tsx index 06ecfed9..ad0a6568 100644 --- a/src/app/[orgId]/settings/resources/create/page.tsx +++ b/src/app/[orgId]/settings/resources/create/page.tsx @@ -91,6 +91,8 @@ import { DockerManager, DockerState } from "@app/lib/docker"; import { parseHostTarget } from "@app/lib/parseHostTarget"; import { toASCII, toUnicode } from 'punycode'; import { DomainRow } from "../../../../../components/DomainsTable"; +import { finalizeSubdomainSanitize } from "@app/lib/subdomain-utils"; + const baseResourceFormSchema = z.object({ name: z.string().min(1).max(255), @@ -326,10 +328,17 @@ export default function Page() { http: baseData.http }; + let sanitizedSubdomain: string | undefined; + if (isHttp) { const httpData = httpForm.getValues(); + + sanitizedSubdomain = httpData.subdomain + ? finalizeSubdomainSanitize(httpData.subdomain) + : undefined; + Object.assign(payload, { - subdomain: httpData.subdomain ? toASCII(httpData.subdomain) : undefined, + subdomain: sanitizedSubdomain ? toASCII(sanitizedSubdomain) : undefined, domainId: httpData.domainId, protocol: "tcp" }); @@ -361,6 +370,10 @@ export default function Page() { const id = res.data.data.resourceId; setResourceId(id); + toast({ + description: `Subdomain: ${sanitizedSubdomain}`, + }); + // Create targets if any exist if (targets.length > 0) { try {