From daa913c674f1ba336406243624f8307ea30c3a28 Mon Sep 17 00:00:00 2001 From: Nicoleta Panaghiu Date: Wed, 1 Mar 2023 13:32:25 +0200 Subject: [PATCH] RED-6176: Sorted users. --- .../modules/dossier-overview/config.service.ts | 7 ++++++- .../user-management.component.ts | 14 +++++++++++++- ...assign-reviewer-approver-dialog.component.ts | 17 ++++++++++++++--- apps/red-ui/src/app/utils/functions.ts | 6 ++++++ 4 files changed, 39 insertions(+), 5 deletions(-) diff --git a/apps/red-ui/src/app/modules/dossier-overview/config.service.ts b/apps/red-ui/src/app/modules/dossier-overview/config.service.ts index d5ad67d43..94ccb7e61 100644 --- a/apps/red-ui/src/app/modules/dossier-overview/config.service.ts +++ b/apps/red-ui/src/app/modules/dossier-overview/config.service.ts @@ -306,7 +306,8 @@ export class ConfigService { }), ); } - allDistinctPeople.forEach(userId => { + + this._sortByName([...allDistinctPeople]).forEach(userId => { peopleFilters.push( new NestedFilter({ id: userId, @@ -451,4 +452,8 @@ export class ConfigService { private _openEditDossierDialog($event: MouseEvent, dossierId: string) { this._dialogService.openDialog('editDossier', $event, { dossierId }); } + + 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.ts b/apps/red-ui/src/app/modules/file-preview/components/user-management/user-management.component.ts index 09d377f8d..e8ee23ee7 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 @@ -12,6 +12,7 @@ import { FilePreviewStateService } from '../../services/file-preview-state.servi import { distinctUntilChanged, map } from 'rxjs/operators'; import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service'; import { FileAssignService } from '../../../shared-dossiers/services/file-assign.service'; +import { moveElementInArray } from '@utils/functions'; @Component({ selector: 'redaction-user-management', @@ -89,7 +90,9 @@ export class UserManagementComponent { this.usersOptions$ = combineLatest([this._canUnassignUser$, this.stateService.file$, this._dossier$]).pipe( map(([canUnassignUser, file, dossier]) => { const unassignUser = canUnassignUser ? [undefined] : []; - return file.isUnderApproval ? [...dossier.approverIds, ...unassignUser] : [...dossier.memberIds, ...unassignUser]; + return file.isUnderApproval + ? this._customSort([...dossier.approverIds, ...unassignUser], file) + : this._customSort([...dossier.memberIds, ...unassignUser], file); }), ); } @@ -114,4 +117,13 @@ export class UserManagementComponent { this.toaster.success(_('assignment.reviewer'), { params: { reviewerName, filename } }); this.editingReviewer = false; } + + private _customSort(ids: string[], file: File) { + 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, 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 27650e4f3..9870066b4 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 @@ -9,6 +9,7 @@ import { FilesService } from '@services/files/files.service'; import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service'; import { PermissionsService } from '@services/permissions.service'; import { firstValueFrom } from 'rxjs'; +import { moveElementInArray } from '@utils/functions'; class DialogData { targetStatus: WorkflowFileStatus; @@ -59,15 +60,14 @@ export class AssignReviewerApproverDialogComponent { if (this.dossier.hasReviewers && cannotAssignUser) { return [...unassignUser]; } - - return [...this.dossier.memberIds, ...unassignUser]; + return this._customSort([...this.dossier.memberIds, ...unassignUser]); } if (this.dossier.approverIds.length > 1 && cannotAssignUser) { return [...unassignUser]; } - return [...this.dossier.approverIds, ...unassignUser]; + return this._customSort([...this.dossier.approverIds, ...unassignUser]); } get changed(): boolean { @@ -140,4 +140,15 @@ export class AssignReviewerApproverDialogComponent { user: [this._user, this._canUnassignFiles && !this._user ? Validators.required : null], }); } + + private _customSort(ids: string[]) { + let sorted = ids.sort((a, b) => this.userService.getName(a).localeCompare(this.userService.getName(b))); + if (this.data.files.length === 1 && this.data.files[0].assignee) { + sorted = moveElementInArray(sorted, this.data.files[0].assignee, 0); + } + if (this.data.withUnassignedOption) { + sorted = moveElementInArray(sorted, 'undefined', this.data.files[0].assignee && this.data.files.length === 1 ? 1 : 0); + } + return sorted; + } } diff --git a/apps/red-ui/src/app/utils/functions.ts b/apps/red-ui/src/app/utils/functions.ts index b69838063..02e0dffa1 100644 --- a/apps/red-ui/src/app/utils/functions.ts +++ b/apps/red-ui/src/app/utils/functions.ts @@ -104,3 +104,9 @@ export const dateWithoutTime = (date: Dayjs) => date.set('h', 0).set('m', 0).set export function hasChanges(left: T, right: T) { return JSON.stringify(left) !== JSON.stringify(right); } + +export function moveElementInArray(array: T[], element: T, index: number) { + const result = array.filter(e => e !== element); + result.splice(index, 0, element); + return result; +}