2022-05-04 16:58:47 +00:00
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
import 'package:selfprivacy/logic/cubit/forms/validations/validations.dart';
|
|
|
|
import 'package:easy_localization/easy_localization.dart';
|
|
|
|
import 'package:cubit_form/cubit_form.dart';
|
|
|
|
import 'package:selfprivacy/logic/cubit/users/users_cubit.dart';
|
|
|
|
|
|
|
|
class FieldCubitFactory {
|
|
|
|
FieldCubitFactory(this.context);
|
|
|
|
|
2022-05-04 19:32:24 +00:00
|
|
|
/// A common user login field.
|
|
|
|
///
|
|
|
|
/// - Available characters are lowercase a-z, digits and underscore _
|
|
|
|
/// - Must start with either a-z or underscore
|
|
|
|
/// - Must be no longer than 'userMaxLength' characters
|
|
|
|
/// - Must not be empty
|
|
|
|
/// - Must not be a reserved root login
|
|
|
|
/// - Must be unique
|
2022-05-04 16:58:47 +00:00
|
|
|
FieldCubit<String> createUserLoginField() {
|
2022-06-05 19:36:32 +00:00
|
|
|
final RegExp userAllowedRegExp = RegExp(r'^[a-z_][a-z0-9_]+$');
|
|
|
|
const int userMaxLength = 31;
|
2022-05-04 16:58:47 +00:00
|
|
|
return FieldCubit(
|
|
|
|
initalValue: '',
|
|
|
|
validations: [
|
|
|
|
ValidationModel<String>(
|
2022-06-05 22:40:34 +00:00
|
|
|
(final String s) => s.toLowerCase() == 'root',
|
|
|
|
'validations.root_name'.tr(),
|
|
|
|
),
|
2022-05-04 16:58:47 +00:00
|
|
|
ValidationModel(
|
2022-06-05 22:40:34 +00:00
|
|
|
(final String login) =>
|
|
|
|
context.read<UsersCubit>().state.isLoginRegistered(login),
|
2022-10-08 16:14:20 +00:00
|
|
|
'validations.already_exist'.tr(),
|
2022-05-04 16:58:47 +00:00
|
|
|
),
|
|
|
|
RequiredStringValidation('validations.required'.tr()),
|
|
|
|
LengthStringLongerValidation(userMaxLength),
|
2022-06-05 22:40:34 +00:00
|
|
|
ValidationModel<String>(
|
|
|
|
(final String s) => !userAllowedRegExp.hasMatch(s),
|
|
|
|
'validations.invalid_format'.tr(),
|
|
|
|
),
|
2022-05-04 16:58:47 +00:00
|
|
|
],
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2022-05-04 19:32:24 +00:00
|
|
|
/// A common user password field.
|
|
|
|
///
|
|
|
|
/// - Must fail on the regural expression of invalid matches: [\n\r\s]+
|
|
|
|
/// - Must not be empty
|
2022-05-04 16:58:47 +00:00
|
|
|
FieldCubit<String> createUserPasswordField() {
|
2022-06-05 19:36:32 +00:00
|
|
|
final RegExp passwordForbiddenRegExp = RegExp(r'[\n\r\s]+');
|
2022-05-04 16:58:47 +00:00
|
|
|
return FieldCubit(
|
|
|
|
initalValue: '',
|
|
|
|
validations: [
|
|
|
|
RequiredStringValidation('validations.required'.tr()),
|
|
|
|
ValidationModel<String>(
|
2022-06-05 22:40:34 +00:00
|
|
|
passwordForbiddenRegExp.hasMatch,
|
2022-10-08 16:14:20 +00:00
|
|
|
'validations.invalid_format_password'.tr(),
|
2022-06-05 22:40:34 +00:00
|
|
|
),
|
2022-05-04 16:58:47 +00:00
|
|
|
],
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2022-06-05 19:36:32 +00:00
|
|
|
FieldCubit<String> createRequiredStringField() => FieldCubit(
|
2022-06-05 22:40:34 +00:00
|
|
|
initalValue: '',
|
|
|
|
validations: [
|
|
|
|
RequiredStringValidation('validations.required'.tr()),
|
|
|
|
],
|
|
|
|
);
|
2022-05-13 13:57:56 +00:00
|
|
|
|
2022-05-04 16:58:47 +00:00
|
|
|
final BuildContext context;
|
|
|
|
}
|