save method
Implementation
Future<bool> save() async {
final UUserResponse? u = editing;
if (u == null) {
return await send(
UServices.user.create(
p: UUserCreateParams(
firstName: firstNameController.text,
lastName: lastNameController.text,
userName: userNameController.trimmedLatin(),
password: passwordController.trimmedLatin(),
fatherName: fatherNameController.text.nullIfEmpty(),
nationalCode: nationalCodeController.valueOrNull()?.toLatinNumber(),
birthdate: birthdate,
phoneNumber: phoneNumberController.trimmedLatin(),
landLine: landLineController.valueOrNull()?.toLatinNumber(),
email: emailController.trimmedLatin().nullIfEmpty(),
bio: bioController.valueOrNull(),
tags: <int>[
gender.number,
if (canManageRoles) role.number,
if (canManageRoles && role == TagUser.subAdmin) ...permissions.map((TagUser t) => t.number),
],
),
),
null,
) !=
null;
}
final List<int> addTags = <int>[gender.number];
final List<int> removeTags = <TagUser>[TagUser.male, TagUser.female, TagUser.unspecified].where((TagUser t) => t != gender).map((TagUser t) => t.number).toList();
if (canManageRoles) {
addTags.add(role.number);
removeTags.addAll(<TagUser>[TagUser.superAdmin, TagUser.subAdmin, TagUser.guest].where((TagUser t) => t != role).map((TagUser t) => t.number));
if (role == TagUser.subAdmin) {
addTags.addAll(permissions.map((TagUser t) => t.number));
removeTags.addAll(TagUser.permissions.where((TagUser t) => !permissions.contains(t)).map((TagUser t) => t.number));
} else {
removeTags.addAll(TagUser.permissions.map((TagUser t) => t.number));
}
}
return await send(
UServices.user.update(
p: UUserUpdateParams(
id: u.id,
firstName: firstNameController.text,
lastName: lastNameController.text,
userName: userNameController.trimmedLatin(),
password: passwordController.text.nullIfEmpty(),
fatherName: fatherNameController.text.nullIfEmpty(),
nationalCode: nationalCodeController.valueOrNull()?.toLatinNumber(),
birthdate: birthdate,
phoneNumber: phoneNumberController.trimmedLatin(),
landLine: landLineController.valueOrNull()?.toLatinNumber(),
email: emailController.text.toLatinNumber().nullIfEmpty(),
bio: bioController.valueOrNull(),
addTags: addTags,
removeTags: removeTags,
),
),
null,
) !=
null;
}