diff --git a/apps/red-ui/src/app/modules/dossiers-listing/config.service.ts b/apps/red-ui/src/app/modules/dossiers-listing/config.service.ts
index 987a131a5..c6a87dbc2 100644
--- a/apps/red-ui/src/app/modules/dossiers-listing/config.service.ts
+++ b/apps/red-ui/src/app/modules/dossiers-listing/config.service.ts
@@ -153,7 +153,7 @@ export class ConfigService {
checker: (dossier: Dossier, filter: INestedFilter) => this._dossierStatusChecker(dossier, filter),
});
- const peopleFilters = [...allDistinctPeople].map(
+ const peopleFilters = this._sortByName([...allDistinctPeople]).map(
userId =>
new NestedFilter({
id: userId,
@@ -265,4 +265,8 @@ export class ConfigService {
}
}
};
+
+ private _sortByName(ids: string[]) {
+ return ids.sort((a, b) => this._userService.getName(a).localeCompare(this._userService.getName(b)));
+ }
}
diff --git a/apps/red-ui/src/app/modules/file-preview/components/user-management/user-management.component.html b/apps/red-ui/src/app/modules/file-preview/components/user-management/user-management.component.html
index 8be9ccc97..6684b0f1b 100644
--- a/apps/red-ui/src/app/modules/file-preview/components/user-management/user-management.component.html
+++ b/apps/red-ui/src/app/modules/file-preview/components/user-management/user-management.component.html
@@ -27,7 +27,7 @@
(save)="assignReviewer(file, $event)"
*ngIf="editingReviewer"
[options]="usersOptions$ | async"
- [value]="file.assignee"
+ [value]="file.assignee === null ? undefined : file.assignee"
>
diff --git a/apps/red-ui/src/app/modules/file-preview/components/user-management/user-management.component.ts b/apps/red-ui/src/app/modules/file-preview/components/user-management/user-management.component.ts
index b4a1db772..9d086d657 100644
--- a/apps/red-ui/src/app/modules/file-preview/components/user-management/user-management.component.ts
+++ b/apps/red-ui/src/app/modules/file-preview/components/user-management/user-management.component.ts
@@ -1,6 +1,6 @@
import { Component } from '@angular/core';
import { Dossier, File, StatusBarConfigs, User } from '@red/domain';
-import { List, LoadingService, Toaster } from '@iqser/common-ui';
+import { getCurrentUser, List, LoadingService, Toaster } from '@iqser/common-ui';
import { PermissionsService } from '@services/permissions.service';
import { workflowFileStatusTranslations } from '@translations/file-status-translations';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
@@ -32,6 +32,7 @@ export class UserManagementComponent {
private readonly _dossier$: Observable;
private readonly _canAssignUser$: Observable;
private readonly _canUnassignUser$: Observable;
+ readonly currentUserId = getCurrentUser().id;
constructor(
readonly fileAssignService: FileAssignService,
@@ -89,10 +90,11 @@ export class UserManagementComponent {
this.usersOptions$ = combineLatest([this._canUnassignUser$, this.stateService.file$, this._dossier$]).pipe(
map(([canUnassignUser, file, dossier]) => {
- const unassignUser = canUnassignUser ? [undefined] : [];
+ const unassignUser = canUnassignUser && file.assignee ? [undefined] : [];
+ console.log(unassignUser);
return file.isUnderApproval
- ? this._customSort([...dossier.approverIds, ...unassignUser], file)
- : this._customSort([...dossier.memberIds, ...unassignUser], file);
+ ? this.#customSort([...dossier.approverIds, ...unassignUser])
+ : this.#customSort([...dossier.memberIds, ...unassignUser]);
}),
);
}
@@ -117,12 +119,12 @@ export class UserManagementComponent {
this.editingReviewer = false;
}
- private _customSort(ids: string[], file: File) {
+ #customSort(ids: string[]) {
let sorted = [...ids].sort((a, b) => this.userService.getName(a).localeCompare(this.userService.getName(b)));
- if (file.assignee) {
- sorted = moveElementInArray(sorted, file.assignee, 0);
+ sorted = moveElementInArray(sorted, this.currentUserId, 0);
+ if (sorted.includes(undefined)) {
+ sorted = moveElementInArray(sorted, undefined, 1);
}
- sorted = moveElementInArray(sorted, undefined, file.assignee ? 1 : 0);
return sorted;
}
}
diff --git a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.ts b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.ts
index 1263d9173..1d2b8f2d8 100644
--- a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.ts
+++ b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.ts
@@ -90,28 +90,11 @@ export class AssignReviewerApproverDialogComponent {
return this.permissionsService.canUnassignUser(this.data.files, this.dossier);
}
- get #uniqueReviewers(): Set {
- const uniqueReviewers = new Set();
-
- for (const file of this.data.files) {
- if (file.assignee) {
- uniqueReviewers.add(file.assignee);
- }
- }
-
- return uniqueReviewers;
- }
-
get #user(): string {
- const userOptions = this.userOptions;
-
- if (this.data.withCurrentUserAsDefault && userOptions.includes(this.currentUser.id)) {
- return this.currentUser.id;
+ if (this.data.files.every(file => !file.assignee)) {
+ return null;
}
-
- const uniqueReviewers = [...this.#uniqueReviewers.values()];
- const user = uniqueReviewers.length === 1 ? uniqueReviewers[0] : this.currentUser.id;
- return userOptions.indexOf(user) >= 0 ? userOptions[userOptions.indexOf(user)] : user;
+ return this.data.files.length === 1 ? this.data.files[0].assignee : this.currentUser.id;
}
get #form() {
@@ -145,14 +128,10 @@ export class AssignReviewerApproverDialogComponent {
#customSort(ids: string[]) {
let sorted = ids.sort((a, b) => this.userService.getName(a).localeCompare(this.userService.getName(b)));
- const fileHasAssignee = this.data.files.length === 1 && this.data.files[0].assignee;
-
- if (fileHasAssignee) {
- sorted = moveElementInArray(sorted, this.data.files[0].assignee, 0);
- }
+ sorted = moveElementInArray(sorted, this.currentUser.id, 0);
if (sorted.includes('undefined')) {
- sorted = moveElementInArray(sorted, 'undefined', fileHasAssignee ? 1 : 0);
+ sorted = moveElementInArray(sorted, 'undefined', 1);
}
return sorted;
diff --git a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.ts b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.ts
index a431db51b..09a1e1ba8 100644
--- a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.ts
+++ b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.ts
@@ -1,14 +1,14 @@
import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';
import { UserService } from '@users/user.service';
import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';
-import { Dossier, IDossierRequest, User } from '@red/domain';
+import { Dossier, IDossierRequest } from '@red/domain';
import { EditDossierSaveResult, EditDossierSectionInterface } from '../edit-dossier-section.interface';
import { BehaviorSubject, firstValueFrom } from 'rxjs';
import { PermissionsService } from '@services/permissions.service';
import { DossiersService } from '@services/dossiers/dossiers.service';
import { compareLists } from '@utils/functions';
import { FilesService } from '@services/files/files.service';
-import { Debounce, getCurrentUser } from '@iqser/common-ui';
+import { Debounce } from '@iqser/common-ui';
@Component({
selector: 'redaction-edit-dossier-team',
@@ -25,7 +25,6 @@ export class EditDossierTeamComponent implements EditDossierSectionInterface, On
membersSelectOptions: string[] = [];
readonly ownersSelectOptions = this.userService.all.filter(u => u.isManager).map(m => m.id);
readonly selectedReviewers$ = new BehaviorSubject([]);
- readonly #currentUser = getCurrentUser();
constructor(
readonly userService: UserService,
@@ -140,7 +139,8 @@ export class EditDossierTeamComponent implements EditDossierSectionInterface, On
this.membersSelectOptions = possibleMembers
.filter(user => this.userService.getName(user.id).toLowerCase().includes(value.toLowerCase()))
.filter(user => this.selectedOwnerId !== user.id)
- .map(user => user.id);
+ .map(user => user.id)
+ .sort((a, b) => this.userService.getName(a).localeCompare(this.userService.getName(b)));
}
@Debounce(0)
@@ -156,7 +156,7 @@ export class EditDossierTeamComponent implements EditDossierSectionInterface, On
private _setSelectedReviewersList() {
const selectedReviewers = this.selectedMembersList.filter(m => this.selectedApproversList.indexOf(m) === -1);
- this.selectedReviewers$.next(selectedReviewers);
+ this.selectedReviewers$.next(this._sortByName(selectedReviewers));
}
private _loadData() {
@@ -168,8 +168,8 @@ export class EditDossierTeamComponent implements EditDossierSectionInterface, On
},
Validators.required,
],
- approvers: [[...this.dossier.approverIds]],
- members: [[...this.dossier.memberIds]],
+ approvers: [this._sortByName([...this.dossier.approverIds])],
+ members: [this._sortByName([...this.dossier.memberIds])],
});
this._updateLists();
}
@@ -178,4 +178,8 @@ export class EditDossierTeamComponent implements EditDossierSectionInterface, On
this._setSelectedReviewersList();
this.setMembersSelectOptions();
}
+
+ private _sortByName(ids: string[]) {
+ return ids.sort((a, b) => this.userService.getName(a).localeCompare(this.userService.getName(b)));
+ }
}
diff --git a/apps/red-ui/src/app/modules/shared/components/team-members/team-members.component.ts b/apps/red-ui/src/app/modules/shared/components/team-members/team-members.component.ts
index 0cb3ffa41..c416bdee0 100644
--- a/apps/red-ui/src/app/modules/shared/components/team-members/team-members.component.ts
+++ b/apps/red-ui/src/app/modules/shared/components/team-members/team-members.component.ts
@@ -1,18 +1,20 @@
-import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';
+import { Component, ElementRef, EventEmitter, inject, Input, OnChanges, Output, ViewChild } from '@angular/core';
import { CircleButtonTypes, getCurrentUser, List } from '@iqser/common-ui';
import { DossiersDialogService } from '../../../shared-dossiers/services/dossiers-dialog.service';
import { ROLES } from '@users/roles';
import { User } from '@red/domain';
+import { UserService } from '@users/user.service';
@Component({
selector: 'redaction-team-members',
templateUrl: './team-members.component.html',
styleUrls: ['./team-members.component.scss'],
})
-export class TeamMembersComponent {
+export class TeamMembersComponent implements OnChanges {
readonly circleButtonTypes = CircleButtonTypes;
readonly roles = ROLES;
readonly currentUser = getCurrentUser();
+ readonly userService = inject(UserService);
@Input() memberIds: List;
@Input() perLine: number;
@@ -29,6 +31,10 @@ export class TeamMembersComponent {
constructor(private readonly _dialogService: DossiersDialogService) {}
+ ngOnChanges() {
+ this.memberIds = [...this.memberIds].sort((a, b) => this.userService.getName(a).localeCompare(this.userService.getName(b)));
+ }
+
get maxTeamMembersBeforeExpand(): number {
return this.perLine - (this.canAdd ? 1 : 0);
}