diff --git a/src/features/create-profile-form/ui/CreateProfileForm.tsx b/src/features/create-profile-form/ui/CreateProfileForm.tsx index 113e4d40..dccb8021 100644 --- a/src/features/create-profile-form/ui/CreateProfileForm.tsx +++ b/src/features/create-profile-form/ui/CreateProfileForm.tsx @@ -41,6 +41,8 @@ export function CreateProfileForm(props: CreateProfileFormProps) { version: profile?.clientVersion || '', }, resolver: zodResolver(CreateProfileSchema), + mode: 'onChange', + reValidateMode: 'onChange', }); const versions = useGetGameVersions({ @@ -158,7 +160,7 @@ export function CreateProfileForm(props: CreateProfileFormProps) { disabled={!form.getFieldState('version').isDirty || loaderVersion.isFetching} > - + {enumValues(GameLoaderOption).map(([loader, value]) => ( @@ -217,7 +219,7 @@ export function CreateProfileForm(props: CreateProfileFormProps) { loaderVersion.isFetching } > - {isPending && } + {isPending && } Создать diff --git a/src/shared/api/contracts/profiles/zod.ts b/src/shared/api/contracts/profiles/zod.ts index aaabc6e5..66b27001 100644 --- a/src/shared/api/contracts/profiles/zod.ts +++ b/src/shared/api/contracts/profiles/zod.ts @@ -2,30 +2,36 @@ import { z } from 'zod'; export const ModDetailsEntitySchema = z.object({ title: z - .string() - .min(2, { message: 'Название мода должно быть больше 2 символов' }) - .max(100, { message: 'Название мода не должно быть больше 100 символов' }), + .string() + .min(2, { message: 'Название мода должно быть больше 2 символов' }) + .max(100, { message: 'Название мода не должно быть больше 100 символов' }), description: z - .string() - .min(2, { message: 'Описание мода должно быть больше 2 символов' }) - .max(1000, { message: 'Описание мода не должно быть больше 1000 символов' }), + .string() + .min(2, { message: 'Описание мода должно быть больше 2 символов' }) + .max(1000, { message: 'Описание мода не должно быть больше 1000 символов' }), }); export const CreateProfileSchema = z.object({ name: z - .string() - .min(2, { message: 'Длина имени должна быть больше 2 символов' }) - .max(100, { message: 'Длина имени не должна быть больше 100 символов' }), + .string() + .min(1, { message: 'Обязательное поле' }) + .regex(/^[a-zA-Z0-9-]*$/, { + message: 'Название профиля может содержать только английские буквы, цифры и тире', + }) + .min(2, { message: 'Длина имени должна быть от 2 до 100 символов' }) + .max(100, { message: 'Длина имени должна быть от 2 до 100 символов' }), displayName: z - .string() - .min(2, { message: 'Длина имени должна быть больше 2 символов' }) - .max(100, { message: 'Длина имени не должна быть больше 100 символов' }), + .string() + .min(1, { message: 'Обязательное поле' }) + .min(2, { message: 'Длина имени должна быть больше 2 символов' }) + .max(100, { message: 'Длина имени не должна быть больше 100 символов' }), description: z - .string() - .min(2, { message: 'Длина описания должна быть больше 2 символов' }) - .max(1000, { - message: 'Длина описания не должна быть больше 1000 символов', - }), + .string() + .min(1, { message: 'Обязательное поле' }) + .min(2, { message: 'Длина описания должна быть больше 2 символов' }) + .max(1000, { + message: 'Длина описания не должна быть больше 1000 символов', + }), version: z.string({ errorMap: () => ({ message: 'Не выбрана версия игры', @@ -38,19 +44,19 @@ export const CreateProfileSchema = z.object({ export const EditProfileSchema = z.object({ name: z - .string() - .min(2, { message: 'Длина имени должна быть больше 2 символов' }) - .max(100, { message: 'Длина имени не должна быть больше 100 символов' }), + .string() + .min(2, { message: 'Длина имени должна быть больше 2 символов' }) + .max(100, { message: 'Длина имени не должна быть больше 100 символов' }), displayName: z - .string() - .min(2, { message: 'Длина имени должна быть больше 2 символов' }) - .max(100, { message: 'Длина имени не должна быть больше 100 символов' }), + .string() + .min(2, { message: 'Длина имени должна быть больше 2 символов' }) + .max(100, { message: 'Длина имени не должна быть больше 100 символов' }), description: z - .string() - .min(2, { message: 'Длина описания должна быть больше 2 символов' }) - .max(255, { - message: 'Длина описания не должна быть больше 255 символов', - }), + .string() + .min(2, { message: 'Длина описания должна быть больше 2 символов' }) + .max(255, { + message: 'Длина описания не должна быть больше 255 символов', + }), jvmArguments: z.string().optional(), gameArguments: z.string().optional(), priority: z.coerce.number().optional(),