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(),