diff --git a/src/app/stacks/create/components/sharedSchema.ts b/src/app/stacks/create/components/sharedSchema.ts index 002e80182..7d15fefcb 100644 --- a/src/app/stacks/create/components/sharedSchema.ts +++ b/src/app/stacks/create/components/sharedSchema.ts @@ -1,4 +1,4 @@ -import { validateStackName } from "@/lib/stacks"; +import { validateStackNameNotInUse } from "@/lib/stacks"; import { z } from "zod"; export const stackNameSchema = z @@ -6,4 +6,8 @@ export const stackNameSchema = z .trim() .min(1, "Stack name is required") .max(255, "Stack name must be less than 255 characters") - .refine((name) => validateStackName(name), "Stack name is already in use"); + .refine( + (name) => name.match(/^[a-zA-Z0-9-]+$/), + "Stack name can only contain only letters, numbers and dashes" + ) + .refine((name) => validateStackNameNotInUse(name), "Stack name is already in use"); diff --git a/src/lib/stacks.ts b/src/lib/stacks.ts index 7673eb22b..6af495faf 100644 --- a/src/lib/stacks.ts +++ b/src/lib/stacks.ts @@ -1,7 +1,7 @@ import { fetchStacks } from "@/data/stacks/stacklist-query"; import AwesomeDebouncePromise from "awesome-debounce-promise"; -export const validateStackName = AwesomeDebouncePromise(async (name: string) => { +export const validateStackNameNotInUse = AwesomeDebouncePromise(async (name: string) => { const data = await fetchStacks({ name }); return data.total === 0; }, 500);