diff --git a/assets/translations/en.json b/assets/translations/en.json index 382988e07a..0b9b3f5eb5 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -204,7 +204,6 @@ "6": "Delete the server and volume?", "7": "Yes", "8": "Remove task" - }, "timer": { "sec": "{} sec" @@ -216,10 +215,11 @@ "empty": "No jobs" }, "validations": { - "required": "required", - "invalid_format": "invalid format", + "required": "Required", + "invalid_format": "Invalid format", "root_name": "User name cannot be 'root'", - "key_format": "invalid key format", - "length": "length is [] shoud be {}" + "key_format": "Invalid key format", + "length": "Length is [] shoud be {}", + "user_alredy_exist": "Already exists" } } \ No newline at end of file diff --git a/assets/translations/ru.json b/assets/translations/ru.json index 5fda5fca77..bc89ab19e5 100644 --- a/assets/translations/ru.json +++ b/assets/translations/ru.json @@ -216,9 +216,10 @@ }, "validations": { "required": "обязательное поле", - "invalid_format": "неверный формат", + "invalid_format": "Неверный формат", "root_name": "Имя пользователя не может быть'root'", - "key_format": "неверный формат", - "length": "Длина строки [] должна быть {}" + "key_format": "Неверный формат", + "length": "Длина строки [] должна быть {}", + "user_alredy_exist": "Имя уже используется" } } \ No newline at end of file diff --git a/lib/logic/cubit/forms/user/user_form_cubit.dart b/lib/logic/cubit/forms/user/user_form_cubit.dart index 5db9ad6f0a..a30b90f820 100644 --- a/lib/logic/cubit/forms/user/user_form_cubit.dart +++ b/lib/logic/cubit/forms/user/user_form_cubit.dart @@ -9,7 +9,8 @@ import 'package:easy_localization/easy_localization.dart'; class UserFormCubit extends FormCubit { UserFormCubit({ - required this.usersCubit, + required this.jobsCubit, + required List users, User? user, }) { var isEdit = user != null; @@ -20,6 +21,10 @@ class UserFormCubit extends FormCubit { login = FieldCubit( initalValue: isEdit ? user!.login : '', validations: [ + ValidationModel( + (login) => users.any((user) => user.login == login), + 'validations.user_alredy_exist'.tr(), + ), RequiredStringValidation('validations.required'.tr()), ValidationModel( (s) => userRegExp.hasMatch(s), 'validations.invalid_format'.tr()), @@ -44,7 +49,7 @@ class UserFormCubit extends FormCubit { login: login.state.value, password: password.state.value, ); - usersCubit.addJob(CreateUserJob(user: user)); + jobsCubit.addJob(CreateUserJob(user: user)); } late FieldCubit login; @@ -54,5 +59,5 @@ class UserFormCubit extends FormCubit { password.externalSetValue(genPass()); } - late JobsCubit usersCubit; + final JobsCubit jobsCubit; } diff --git a/lib/ui/pages/users/new_user.dart b/lib/ui/pages/users/new_user.dart index ed35c2e346..4f6da178a6 100644 --- a/lib/ui/pages/users/new_user.dart +++ b/lib/ui/pages/users/new_user.dart @@ -9,8 +9,24 @@ class _NewUser extends StatelessWidget { return BrandBottomSheet( child: BlocProvider( - create: (context) => - UserFormCubit(usersCubit: context.read()), + create: (context) { + var jobCubit = context.read(); + var jobState = jobCubit.state; + var users = []; + users.addAll(context.read().state.users); + if (jobState is JobsStateWithJobs) { + var jobs = jobState.jobList; + jobs.forEach((job) { + if (job is CreateUserJob) { + users.add(job.user); + } + }); + } + return UserFormCubit( + jobsCubit: jobCubit, + users: users, + ); + }, child: Builder(builder: (context) { var formCubitState = context.watch().state; diff --git a/lib/ui/pages/users/users.dart b/lib/ui/pages/users/users.dart index 46d0b1845e..da994ef962 100644 --- a/lib/ui/pages/users/users.dart +++ b/lib/ui/pages/users/users.dart @@ -6,6 +6,7 @@ import 'package:selfprivacy/logic/cubit/app_config/app_config_cubit.dart'; import 'package:selfprivacy/logic/cubit/forms/user/user_form_cubit.dart'; import 'package:selfprivacy/logic/cubit/jobs/jobs_cubit.dart'; import 'package:selfprivacy/logic/cubit/users/users_cubit.dart'; +import 'package:selfprivacy/logic/models/jobs/job.dart'; import 'package:selfprivacy/logic/models/user.dart'; import 'package:selfprivacy/ui/components/brand_bottom_sheet/brand_bottom_sheet.dart'; import 'package:selfprivacy/ui/components/brand_button/brand_button.dart';