diff --git a/server/routers/resource/createResource.ts b/server/routers/resource/createResource.ts index 3bc7c05c..2f2bed5a 100644 --- a/server/routers/resource/createResource.ts +++ b/server/routers/resource/createResource.ts @@ -31,7 +31,10 @@ const createResourceParamsSchema = z const createHttpResourceSchema = z .object({ name: z.string().min(1).max(255), - subdomain: z.string().optional(), + subdomain: z + .string() + .optional() + .transform((val) => val?.toLowerCase()), isBaseDomain: z.boolean().optional(), siteId: z.number(), http: z.boolean(), @@ -128,7 +131,7 @@ export async function createResource( ); } - if (!req.body?.http) { + if (typeof req.body.http !== "boolean") { return next( createHttpError(HttpCode.BAD_REQUEST, "http field is required") ); @@ -233,6 +236,7 @@ async function createHttpResource( .values({ siteId, fullDomain, + domainId, orgId, name, subdomain, diff --git a/server/routers/resource/updateResource.ts b/server/routers/resource/updateResource.ts index 46c36542..ce574299 100644 --- a/server/routers/resource/updateResource.ts +++ b/server/routers/resource/updateResource.ts @@ -30,7 +30,9 @@ const updateResourceParamsSchema = z const updateHttpResourceBodySchema = z .object({ name: z.string().min(1).max(255).optional(), - subdomain: subdomainSchema.optional(), + subdomain: subdomainSchema + .optional() + .transform((val) => val?.toLowerCase()), ssl: z.boolean().optional(), sso: z.boolean().optional(), blockAccess: z.boolean().optional(), diff --git a/src/app/[orgId]/settings/resources/CreateResourceForm.tsx b/src/app/[orgId]/settings/resources/CreateResourceForm.tsx index 6adf8003..e7f4f763 100644 --- a/src/app/[orgId]/settings/resources/CreateResourceForm.tsx +++ b/src/app/[orgId]/settings/resources/CreateResourceForm.tsx @@ -119,6 +119,7 @@ export default function CreateResourceForm({ open, setOpen }: CreateResourceFormProps) { + const [formKey, setFormKey] = useState(0); const api = createApiClient(useEnvContext()); const [loading, setLoading] = useState(false); @@ -209,6 +210,7 @@ export default function CreateResourceForm({ setBaseDomains(domains); if (domains.length) { form.setValue("domainId", domains[0].domainId); + setFormKey((k) => k + 1); } } }; @@ -229,7 +231,7 @@ export default function CreateResourceForm({ protocol: data.protocol, proxyPort: data.http ? undefined : data.proxyPort, siteId: data.siteId, - isBaseDomain: data.isBaseDomain + isBaseDomain: data.http ? undefined : data.isBaseDomain } ) .catch((e) => { @@ -281,7 +283,7 @@ export default function CreateResourceForm({ {!showSnippets && ( -
+ Toggle if this is an HTTP resource or a - raw TCP/UDP resource. + raw TCP/UDP + resource. @@ -381,49 +384,88 @@ export default function CreateResourceForm({ {form.watch("http") && ( <> {domainType === "subdomain" ? ( - ( - - {!env.flags - .allowBaseDomainResources && ( - - Subdomain - - )} - {domainType === - "subdomain" && ( - - { - form.setValue( - "subdomain", - value - ); - form.setValue( - "domainId", - selectedDomainId - ); - }} - /> - - )} - - +
+ {!env.flags + .allowBaseDomainResources && ( + + Subdomain + )} - /> +
+
+ ( + + + + )} + /> +
+
+ ( + + + + + )} + /> +
+
+
) : ( diff --git a/src/app/[orgId]/settings/resources/[resourceId]/general/page.tsx b/src/app/[orgId]/settings/resources/[resourceId]/general/page.tsx index 6bcc3fde..c8603b0f 100644 --- a/src/app/[orgId]/settings/resources/[resourceId]/general/page.tsx +++ b/src/app/[orgId]/settings/resources/[resourceId]/general/page.tsx @@ -108,6 +108,7 @@ type GeneralFormValues = z.infer; type TransferFormValues = z.infer; export default function GeneralForm() { + const [formKey, setFormKey] = useState(0); const params = useParams(); const { resource, updateResource } = useResourceContext(); const { org } = useOrgContext(); @@ -178,6 +179,7 @@ export default function GeneralForm() { if (res?.status === 200) { const domains = res.data.data.domains; setBaseDomains(domains); + setFormKey((key) => key + 1); } }; @@ -191,10 +193,10 @@ export default function GeneralForm() { const res = await api .post(`resource/${resource?.resourceId}`, { name: data.name, - subdomain: data.subdomain, + subdomain: data.http ? data.subdomain : undefined, proxyPort: data.proxyPort, - isBaseDomain: data.isBaseDomain, - domainId: data.domainId + isBaseDomain: data.http ? data.isBaseDomain : undefined, + domainId: data.http ? data.domainId : undefined }) .catch((e) => { toast({ @@ -219,6 +221,8 @@ export default function GeneralForm() { proxyPort: data.proxyPort, isBaseDomain: data.isBaseDomain }); + + router.refresh(); } setSaveLoading(false); } @@ -265,7 +269,7 @@ export default function GeneralForm() { - + )} @@ -370,9 +375,10 @@ export default function GeneralForm() { field.onChange } defaultValue={ - field.value || - baseDomains[0] - ?.domainId + field.value + } + value={ + field.value } >