mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-07-24 17:32:15 +00:00
[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:
committed by
Maurizio Vitale
parent
d09373501f
commit
0ae55ba590
@@ -345,22 +345,28 @@ export class GroupCloudComponent implements OnInit, OnChanges, OnDestroy {
|
||||
|
||||
onRemove(groupToRemove: IdentityGroupModel) {
|
||||
this.removeGroup.emit(groupToRemove);
|
||||
const indexToRemove = this.selectedGroups.findIndex((group: IdentityGroupModel) => {
|
||||
return group.id === groupToRemove.id;
|
||||
});
|
||||
this.selectedGroups.splice(indexToRemove, 1);
|
||||
this.removeGroupFromSelected(groupToRemove);
|
||||
this.changedGroups.emit(this.selectedGroups);
|
||||
this.searchGroupsControl.markAsDirty();
|
||||
|
||||
if (this.isValidationEnabled()) {
|
||||
this.removeGroupFromValidation(groupToRemove.name);
|
||||
this.removeGroupFromValidation(groupToRemove);
|
||||
this.checkPreselectValidationErrors();
|
||||
}
|
||||
}
|
||||
|
||||
private removeGroupFromValidation(groupName: string) {
|
||||
private removeGroupFromSelected(groupToRemove: IdentityGroupModel) {
|
||||
const indexToRemove = this.selectedGroups.findIndex((selectedGroup: IdentityGroupModel) => {
|
||||
return selectedGroup.id === groupToRemove.id && selectedGroup.name === groupToRemove.name;
|
||||
});
|
||||
if (indexToRemove !== -1) {
|
||||
this.selectedGroups.splice(indexToRemove, 1);
|
||||
}
|
||||
}
|
||||
|
||||
private removeGroupFromValidation(groupToRemove: IdentityGroupModel) {
|
||||
const indexToRemove = this.invalidGroups.findIndex((invalidGroup) => {
|
||||
return invalidGroup.name === groupName;
|
||||
return invalidGroup.name === groupToRemove.name && invalidGroup.id === groupToRemove.id;
|
||||
});
|
||||
|
||||
if (indexToRemove !== -1) {
|
||||
|
@@ -133,7 +133,7 @@ describe('PeopleCloudComponent', () => {
|
||||
it('should selectedUser and changedUsers emit, update selected users when a user is selected', (done) => {
|
||||
const user = { username: 'username' };
|
||||
fixture.detectChanges();
|
||||
spyOn(component, 'hasUserDetails').and.returnValue(true);
|
||||
spyOn(component, 'isPreselectedUserValid').and.returnValue(true);
|
||||
const selectEmitSpy = spyOn(component.selectUser, 'emit');
|
||||
const changedUsersSpy = spyOn(component.changedUsers, 'emit');
|
||||
component.onSelect(user);
|
||||
@@ -514,7 +514,7 @@ describe('PeopleCloudComponent', () => {
|
||||
|
||||
it('should check validation only for the first user and emit warning when user is invalid - single mode', (done) => {
|
||||
spyOn(identityService, 'findUserById').and.returnValue(Promise.resolve([]));
|
||||
spyOn(component, 'hasUserDetails').and.returnValue(false);
|
||||
spyOn(component, 'isPreselectedUserValid').and.returnValue(false);
|
||||
|
||||
const expectedWarning = {
|
||||
message: 'INVALID_PRESELECTED_USERS',
|
||||
|
@@ -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 = '';
|
||||
|
||||
|
Reference in New Issue
Block a user