save method

Future<bool> save()

Creates or updates the user. Returns true when the dialog can close.

Implementation

Future<bool> save() async {
  final List<int> roleTags = <int>[
    if (canManageRoles) role.number,
    if (canManageRoles && role == TagUser.subAdmin) ...permissions.map((TagUser t) => t.number),
  ];
  if (editing == null) {
    return await send(
          UServices.user.create(
            p: UUserCreateParams(
              firstName: firstNameController.text,
              lastName: lastNameController.text,
              password: passwordController.trimmedLatin(),
              email: emailController.trimmedLatin(),
              phoneNumber: phoneController.trimmedLatin(),
              userName: userNameController.trimmedLatin(),
              birthdate: birthdate,
              fatherName: fatherNameController.text,
              tags: <int>[gender.number, ...roleTags],
            ),
          ),
          read,
        ) !=
        null;
  }
  // Tags not picked any more are removed: the other gender, the other roles and the unchecked permissions.
  final List<int> removeTags = <int>[
    if (gender == TagUser.male) TagUser.female.number else TagUser.male.number,
    if (canManageRoles) ...<TagUser>[TagUser.superAdmin, TagUser.subAdmin, TagUser.guest, ...TagUser.permissions].map((TagUser t) => t.number).where((int n) => !roleTags.contains(n)),
  ];
  return await send(
        UServices.user.update(
          p: UUserUpdateParams(
            id: editing!.id,
            firstName: firstNameController.text,
            lastName: lastNameController.text,
            password: passwordController.text,
            email: emailController.text.toLatinNumber(),
            phoneNumber: phoneController.trimmedLatin(),
            userName: userNameController.numString(),
            birthdate: birthdate,
            fatherName: fatherNameController.text,
            addTags: <int>[gender.number, ...roleTags],
            removeTags: removeTags,
          ),
        ),
        read,
      ) !=
      null;
}