save method

Future<bool> save()

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;
}