[AAE-1602][AAE-1594] Fix duplicated users issue when validation enabl… (#5413)

* [AAE-1602][AAE-1594] Fix duplicated users issue when validation enabled, fix partial username should not return a valid user

* [AAE-1602][AAE-1594] Fix removing incorrect invalid user/group when name or id matches
This commit is contained in:
arditdomi
2020-01-28 15:05:26 +00:00
committed by Maurizio Vitale
parent d09373501f
commit 0ae55ba590
3 changed files with 40 additions and 35 deletions

View File

@@ -298,11 +298,12 @@ export class PeopleCloudComponent implements OnInit, OnChanges, OnDestroy {
await Promise.all(preselectedUsersToValidate.map(async (user: IdentityUserModel) => {
try {
const validationResult = await this.searchUser(user);
if (!this.hasUserDetails(validationResult)) {
this.invalidUsers.push(user);
} else {
const validationResult: IdentityUserModel = await this.searchUser(user);
if (this.isPreselectedUserValid(user, validationResult)) {
validationResult.readonly = user.readonly;
validUsers.push(validationResult);
} else {
this.invalidUsers.push(user);
}
} catch (error) {
this.invalidUsers.push(user);
@@ -310,20 +311,16 @@ export class PeopleCloudComponent implements OnInit, OnChanges, OnDestroy {
}
}));
this.checkPreselectValidationErrors();
this.alignUsersAfterValidation(validUsers);
this.selectedUsers = validUsers.concat(this.invalidUsers);
this.isLoading = false;
}
private alignUsersAfterValidation(validatedUsers: IdentityUserModel[]) {
this.selectedUsers.forEach((selectedUser, index) => {
validatedUsers.forEach(validatedUser => {
if ((selectedUser.id === validatedUser.id) || (selectedUser.username === validatedUser.username)
|| (selectedUser.email === validatedUser.email)) {
validatedUser.readonly = selectedUser.readonly;
this.selectedUsers[index] = validatedUser;
}
});
});
isPreselectedUserValid(preselectedUser: IdentityUserModel, validatedUser: IdentityUserModel) {
if (validatedUser && (validatedUser.id !== undefined || validatedUser.username !== undefined || validatedUser.email !== undefined)) {
return preselectedUser.id === validatedUser.id || preselectedUser.username === validatedUser.username || preselectedUser.email === validatedUser.email;
} else {
return false;
}
}
async searchUser(user: IdentityUserModel) {
@@ -390,22 +387,28 @@ export class PeopleCloudComponent implements OnInit, OnChanges, OnDestroy {
onRemove(userToRemove: IdentityUserModel) {
this.removeUser.emit(userToRemove);
const indexToRemove = this.selectedUsers.findIndex((selectedUser: IdentityUserModel) => {
return selectedUser.id === userToRemove.id;
});
this.selectedUsers.splice(indexToRemove, 1);
this.removeUserFromSelected(userToRemove);
this.changedUsers.emit(this.selectedUsers);
this.searchUserCtrl.markAsDirty();
if (this.isValidationEnabled()) {
this.removeUserFromValidation(userToRemove.username);
this.removeUserFromValidation(userToRemove);
this.checkPreselectValidationErrors();
}
}
private removeUserFromValidation(username: string) {
private removeUserFromSelected(userToRemove: IdentityUserModel) {
const indexToRemove = this.selectedUsers.findIndex((selectedUser: IdentityUserModel) => {
return selectedUser.id === userToRemove.id && selectedUser.username === userToRemove.username && selectedUser.email === userToRemove.email;
});
if (indexToRemove !== -1) {
this.selectedUsers.splice(indexToRemove, 1);
}
}
private removeUserFromValidation(userToRemove: IdentityUserModel) {
const indexToRemove = this.invalidUsers.findIndex((invalidUser) => {
return invalidUser.username === username;
return invalidUser.username === userToRemove.username && invalidUser.id === userToRemove.id && invalidUser.email === userToRemove.email;
});
if (indexToRemove !== -1) {
@@ -413,10 +416,6 @@ export class PeopleCloudComponent implements OnInit, OnChanges, OnDestroy {
}
}
hasUserDetails(user: IdentityUserModel): boolean {
return user && (user.id !== undefined || user.username !== undefined || user.email !== undefined);
}
generateInvalidUsersMessage() {
this.validateUsersMessage = '';